stg pull/rebase
- From
Karl Hasselström <kha@treskal.com>
- Date
- Jun 7, 2008, 17:22 UTC
- Message-ID
- <20080607172202.GA5179@diana.vm.bytemark.co.uk>
As I said, I've been thinking a bit about stg pull and stg rebase recently (though I haven't written any code; I don't want to be juggling too many balls at once).
Currently, there's stg rebase which only does rebasing, and stg pull which does either rebase or merge depending on a config option. And on top of that there's config stuff like stgit.pullcmd that is invoked in some cases but not others.
What I think I'd like is the following:
* Just one command, stg pull. stg rebase is removed.
* When pull is invoked, the following happens:
1. The branch we pull from may be updated, depending on the
configuration. (e.g. git fetch or git svn fetch) 2. Depending on the configuration (overridable by the
--fast-forward, --rebase, and --merge options), one of these
three things happen: 1. We pop all patches, fast-forward to the new base, and push
them back. If it's not a fast-forward, we error out. 2. We pop all patches, reset to the new base, and push them
back. 3. We pop all patches, merge with the other branch, then push
the patches back. Fast-forward is the default if no configuration or command-line
flag is given.I've personally never had a need for the merge case, but I recall you arguing to keep it, Catalin?
The benefits of this organisation are
* Configuration of how to update the remote prior to pulling and
ff/rebase/merge configuration are orthogonal. * The default action is to fast-forward, which is probably what most
users want -- merge is very likely to do the wrong thing, and
rebase can lose changes. * The remote updating is entirely separated from the actual pushing
and popping of patches, since it runs to completion before we do
anything else. This means that we can pop, change the base and
push in a single transaction.--
Karl Hasselström, kha@treskal.com
www.treskal.com/kalle