This project is a fork of the topgit/tsort.git project. If you have that one already cloned locally, you can use
git clone --reference /path/to/your/topgit/tsort.git/incarnation mirror_URL
to save bandwidth during cloning.
 
descriptionmanage patches in a sideline, based on topgit/tsort
ownerodabrunz@gmx.net
last changeMon, 6 Sep 2010 05:18:20 +0000 (6 07:18 +0200)
content tags
add:
readme

Sideline is about improvements to TopGit that make "sideline development" possible. TopGit already makes it relatively easy to continuously integrate changes from mainline and other branches into patch development branches. This makes sure that patches are always applicable to mainline. Sideline is trying to remove (some of) the pains when the patch development branches are at least partially evolving or experimental and dependencies need to be changed, and when infrastructure changes are made, especially on the patch development branches. Infrastructure changes are changes that touch the code in many places, but which are often semantically mostly independent of other changes. Examples for these kinds of changes are:

Infrastructure changes usually take some time to mature, especially when they are mainly useful together with other features under development. The complete set of changes may even constitute an alternative to the current mainline version, which may or may not turn out to be a better alternative, or it may end up in a separate subsystem, or be discarded with some lessons learned. For these reasons, these change sets are usually not applied to mainline directly. These changes are developed alongside the mainline, or in a sideline. The difference to a fork is that "normal" mainline features, fixes and infrastructure changes in mainline are still continuously integrated into the sideline. (Even other branches can be integrated.) That means that the whole set of changes of the sideline remains available as patches against the current state of mainline, and they can at any time be tested and used with the current mainline version. Therefore no split in the developer and user communities is necessary, and a fork is avoided.

There are two main problems with sideline development. One is that it must be possible to easily change patch dependencies. The other problem is that continuously merging new changes from mainline to the sideline becomes difficult when at least one of them has infrastructure changes that the other one does not have.

Support for changing patch dependencies in TopGit is still evolving, and work is done in the tsort repository (the parent repository for this one). The sideline repository adds a patch that is a different approach to relatively cheaply add dependencies to a TopGit branch, while making it possible to bring in a previously removed dependency (which current TopGit cannot do).

Changing patch dependencies is especially important for sidelines, because sidelines tend to be experimental (otherwise they could have been developed in a normal branch against mainline, instead of in a TopGit-managed patch set that is used to prepare patches that need to go through the patch review process), and basically everything can change. As experience with the code grows, patches may need to be dropped, re-added or rewritten. (Typically there are several areas to explore: finding an adequate solution to the problem, finding out which parts of the solution need to be written, and which parts can be covered with existing code, how can the solution be made competetive, etc. Depending on the experience with the problem and the existing code, and also based on how well upcoming features by others can be anticipated, the initial designs may or may not need to be changed.) Another factor is the assessment by others, which may not be predictable before the sideline has matured to a certain degree (e.g. prototype). For example, mainline maintainers may want to cherry-pick some features up in the dependency hierarchy earlier, while features on a lower level may need to mature more before they can be used in mainline, and this may change patch dependencies.

Developers still need to be able to create (and commit) code quickly and to try it out, because that is often the easiest way to collect the experience that leads to better designs. Results from previous approaches should be reproducable, and design decisions are likely to change and variants saved in the SCM may need to be re-used later on. So on the design level, it must be possible to easily (and cheaply) change dependencies later on, after many commits have already been made.

The merge problem arises when infrastructure changes are made in the mainline, the sideline or in both. (Infrastructure changes are common in sidelines, because they are the main reason why sidelines are not merged into the mainline early on: they need to prove their merits, as nobody wants to rely on infrastructure that does not meet everyone's requirements.) Infrastructure changes change code in many places, remove lines of code in many places and may even rearrange code by moving many pieces of code to other places. When new mainline changes are merged in on top of such infrastructure changes, the infrastructure changes are likely to overlap with the new mainline changes, and conflicts are detected for all of these cases. (git rerere does not help here, as the changes are new to git rerere as well, and no previously encountered conflict matches.)

Here is a summary of issues and how to address them:

shortlog
2010-09-06 Per CederqvistDo basic error checking in "tg depend add"mastermobt/annihilatet/base-usaget/checkoutt/import-git-test-frameworkt/refactor-summaryt/summary-deps-as-functiont/uncommit
2010-09-06 Per CederqvistRefactor tg summary
2010-08-24 Uwe Kleine... Fix pretty_tree to work in a subdirectoryt/baset/depend-usaget/ignore-emacs-autosavet/no-export-topmsg-topdeps
2010-08-24 Per CederqvistGeneralize subcommand selection in "tg depend"
2010-08-24 Per CederqvistAdd "tg base" that prints the base version.
2010-08-24 Per CederqvistIgnore Emacs auto-save files
2010-08-24 Uwe Kleine... Order .gitignore alphabetically
2010-08-24 Per CederqvistDon't implement the usage message of tg depend more...
2010-07-25 Per CederqvistAdded the --deps option to "tg summary".
2010-07-25 Per CederqvistImplemented "tg summary --sort".
2010-04-10 Uwe Kleine... tg patch: treat all files as ascii
2010-04-10 Uwe Kleine... tg mail: document config setting to prevent unintended...
2010-04-10 Carsten HeyDon't call pre-commit hook if tg is not installed
2010-03-15 Thomas Schwingetg-delete: Handle the case where the branch has been...
2010-03-04 Thomas Schwingetg-mail: Properly quote argument to --in-reply-to
2010-03-04 Thomas Schwingetg-push: Filter out plain SHA1s from being pushed.
...
heads
13 years ago t/depend-add-using-export
13 years ago t/integrate-test-framework
13 years ago t/check-target
13 years ago t/import-git-test-framework
13 years ago t/ready-for-integration
13 years ago t/all-my-work
13 years ago t/graphviz-indicate-current
13 years ago t/summary-sort-order
13 years ago t/summary-deps-as-function
13 years ago t/base-usage
13 years ago t/depend-rm
13 years ago t/depend-add-using-set
13 years ago t/depend-set
13 years ago t/depend-add-error-checking
13 years ago t/refactor-summary
13 years ago t/depend-swap
...