From Fedora Project Wiki

< Infrastructure

Revision as of 13:34, 18 June 2010 by Mcepl (talk | contribs) (Added Mozilla mercurial wishlist)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.


Version Control

Who's working on this

  • ToshioKuratomi abadger1999 toshio@fedoraproject.org Bazaar; possibly Mercurial
  • Paulo Santos paulobanon
  • John Kraal geonetix
  • WarrenTogami warren
  • Mike Mcgrath mmcgrath Subversion
  • JesseKeating f13 Mercurial git
  • Kristian Hoegsberg (git)
  • JeffOllie (git)

Current System

Rough guide to how the current system works

Current Pain Points

  • No atomic commits
  • Not being able to work offline (cvs add needs a server, wtf.)
  • Adding sources can be "weird", can easily clobber existing sources
  • Can't handle big files well
  • CVS bogons/bonghits/grimlins/websuckage
  • Prohibitively expensive to reconstruct infrastructure outside our environment
  • Better handling of force-tag
  • Commits are SLOW!!!
  • Common dir, wtf.
  • Really really unreliable (especially with a lot of actions or continuous actions)
  • Prep work to get into package source control is done outside of source control. No opportunity to learn the tools


Requirements

  • Unix accounts or certificate based authentication
  • Access Control Lists of per-package per-branch granularity
  • Ideally this means per-directory ACL's
  • ACLs will allow view and commit access to select contributors.
  • Embargo branches should be on the same server as the normal branches. This is necessary to allow certain upstream developers to work in cooperation with Fedora maintainers.
  • We need to scale up to hundreds of branches per package in the long run.
  • Some package/branches would be read-only to most users.
  • Other package/branches need to be completely hidden from most users.
  • E-mail notification when changes occur. These notifications must be sent from the server, and it must be not possible for users to bypass.
  • Distributed SCM allows easy sub-collections of the distribution to be built and tested independently, then the bulk be easily merged back while minimizing effort.
  • Translations for core packages are right now implemented via cvs.fedora.redhat.com and tied to CVS. More longterm they might also benefit from a more modern version control system.
  • Be able to track patches separately from the upstream source so that source rpms can easily be created.
  • Be able to have a continuous development "branch"
  • Be able to create release "branches" for doing updates for existing Fedora releases. Release "branches" should inherit history of the repo up until the release happened.
  • Be able to re-create source rpm used to generate any shipped build at any time later, including same version of any helper scripts or metadata used.
  • Be able to checkout only a given package and not the entire package tree
  • Be able to be queried and pulled from anonymously (by the buildsystem, by the web, etc.
  • Be able to trigger scripts such as pre/post commit
  • be able to reliably disseminate commits as they happen to a selected group of people (per package; branch)
  • Be useful for offline development
  • Consistency across all modules for scripted actions like rebuilds
  • Easy between-branch merging for those who like to ship the same source rpm everywhere
  • Ideally, not rely on magic 'branch' files for the build & tag-fu to work
  • Be able to easily rebase/refresh a patch
  • be able to easily verify a repository consistency
  • be useful with generic protocols (e.g. http, rsync)
  • be script-able (for local customization, for integration with rpmbuild, ...)
  • be able to make (and verify) a signed commit/tag
  • be able to keep track of details about patches (author, committer, some special marks (e.g. "signed-of-by", "reviewed-by", ...)
  • be able to generate statistics about patches (diffstat)
  • be able to generate change logs
  • Be able to recursive grep sources for identifiable bug patterns
  • Integration with bugzilla and friends
  • Push button "pull latest upstream source"
  • Easy to assemble system outside of our infrastructure
  • Visible branches
  • Better handling of dead patches
  • Enforce 'make prep' like pre-checks
  • No possibility of commits without notifications
  • Integration with automated testflows
  • Integration with Bodhi (linkbacks, etc...)

3rd party Resources and Opinions

Version Control System Comparison - covers just about everything except git and bzr now covers everything

Quick Reference Guide to Free Software Decentralized Revision Control Systems

OpenSolaris comparison of Git, Mercurial and Bazaar-NG (at version 0.7)

Supplements the previous, well documented comparison with Performance enhancements from bzr 0.8 => 0.9.

Something that Ubuntu is thinking about

Xorg is maintaining a rough wishlist of what would they like to see changed in git.

Similar list from Mozilla for Mercurial