We introduce a new pull-does-rebase setting, as companion to pullcmd. This allows to use both pullcmd's that need a rebase (like git-fetch) and pullcmd's that do not (like git-pull). To be able to rebase, we rely on parent information being available for the stack. Signed-off-by: Yann Dirson <ydirson@xxxxxxxxxx> --- examples/gitconfig | 8 +++++++- stgit/config.py | 3 ++- stgit/git.py | 15 ++++++++++----- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/examples/gitconfig b/examples/gitconfig index 5e7b240..e3d9889 100644 --- a/examples/gitconfig +++ b/examples/gitconfig @@ -33,8 +33,14 @@ #pager = ~/share/stgit/contrib/diffcol.sh #pager = filterdiff --annotate | colordiff | less -FRX - # GIT pull command (should take the same arguments as git-pull) + # GIT pull command (should take the same arguments as + # git-fetch or git-pull). By default: + #pullcmd = git-fetch + #pull-does-rebase = yes + # Alternative (old behaviour), less intuitive but maybe useful + # for some workflows: #pullcmd = git-pull + #pull-does-rebase = no # The three-way merge tool. Note that the 'output' file contains the # same data as 'branch1'. This is useful for tools that do not take an diff --git a/stgit/config.py b/stgit/config.py index f5fbdab..0d4da06 100644 --- a/stgit/config.py +++ b/stgit/config.py @@ -65,7 +65,8 @@ def config_setup(): config.set('stgit', 'autoresolved', 'no') config.set('stgit', 'smtpserver', 'localhost:25') config.set('stgit', 'smtpdelay', '5') - config.set('stgit', 'pullcmd', 'git-pull') + config.set('stgit', 'pullcmd', 'git-fetch') + config.set('stgit', 'pull-does-rebase', 'yes') config.set('stgit', 'merger', 'diff3 -L current -L ancestor -L patched -m -E ' \ '"%(branch1)s" "%(ancestor)s" "%(branch2)s" > "%(output)s"') diff --git a/stgit/git.py b/stgit/git.py index 3c2c237..82b5bf5 100644 --- a/stgit/git.py +++ b/stgit/git.py @@ -806,18 +806,23 @@ def reset(files = None, tree_id = None, check_out = True): __set_head(tree_id) def pull(repository = 'origin', refspec = None): - """Pull changes from the remote repository. At the moment, just - use the 'git-pull' command + """Pull changes from the remote repository. Uses 'git-fetch' + and moves the stack base. """ - # 'git-pull' updates the HEAD + # we update the HEAD __clear_head_cache() args = [repository] if refspec: args.append(refspec) - if __run(config.get('stgit', 'pullcmd'), args) != 0: - raise GitException, 'Failed "git-pull %s"' % repository + command = config.get('stgit', 'pullcmd') + if __run(command, args) != 0: + raise GitException, 'Failed "%s %s"' % (command, repository) + + if (config.get('stgit', 'pull-does-rebase')): + # FIXME! + reset(tree_id = rev_parse(repository)) def repack(): """Repack all objects into a single pack - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html