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 ee68d07..60f6e85 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 901f600..48b4e2d 100644 --- a/stgit/config.py +++ b/stgit/config.py @@ -29,7 +29,8 @@ class GitConfig: 'stgit.autoresolved': 'no', 'stgit.smtpserver': 'localhost:25', 'stgit.smtpdelay': '5', - 'stgit.pullcmd': 'git-pull', + 'stgit.pullcmd': 'git-fetch', + 'stgit.pull-does-rebase': 'yes', 'stgit.merger': 'diff3 -L current -L ancestor -L patched -m -E ' \ '"%(branch1)s" "%(ancestor)s" "%(branch2)s" > "%(output)s"', 'stgit.autoimerge': 'no', diff --git a/stgit/git.py b/stgit/git.py index 038aaac..e30b959 100644 --- a/stgit/git.py +++ b/stgit/git.py @@ -808,18 +808,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