Thread (11 messages) flat view 11 messages, 2 authors, 2016-06-15

Re: [PATCHv4 2/2] pull --rebase: Avoid spurious conflicts and reapplying unnecessary patches

From: Santi Béjar <hidden>
Date: 2016-06-15 22:49:18

On Thu, Aug 12, 2010 at 3:34 PM, Santi Béjar [off-list ref] wrote:
On Thu, Aug 12, 2010 at 7:56 AM, Elijah Newren [off-list ref] wrote:
[...]
quoted
Signed-off-by: Elijah Newren <redacted>
---
 git-pull.sh     |   34 ++++++++++++++++++++++------------
 t/t5520-pull.sh |    4 ++--
 2 files changed, 24 insertions(+), 14 deletions(-)
diff --git a/git-pull.sh b/git-pull.sh
index a09a44e..54da07b 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -206,18 +206,6 @@ test true = "$rebase" && {
               git diff-index --ignore-submodules --cached --quiet HEAD -- ||
               die "refusing to pull with rebase: your working tree is not up-to-date"
       fi
-       oldremoteref= &&
-       . git-parse-remote &&
-       remoteref="$(get_remote_merge_branch "$@" 2>/dev/null)" &&
-       oldremoteref="$(git rev-parse -q --verify "$remoteref")" &&
-       for reflog in $(git rev-list -g $remoteref 2>/dev/null)
-       do
-               if test "$reflog" = "$(git merge-base $reflog $curr_branch)"
-               then
-                       oldremoteref="$reflog"
-                       break
-               fi
-       done
 }
 orig_head=$(git rev-parse -q --verify HEAD)
 git fetch $verbosity $progress $dry_run --update-head-ok "$@" || exit 1
@@ -273,6 +261,28 @@ then
       exit
 fi

+if test true = "$rebase"
+then
+       oldremoteref= &&
+       . git-parse-remote &&
+       remoteref="$(get_remote_merge_branch "$@" 2>/dev/null)" &&
+       oldremoteref="$(git rev-parse -q --verify "$remoteref")" &&
+       for reflog in $(git rev-list -g $remoteref 2>/dev/null)
+       do
+               if test "$reflog" = "$(git merge-base $reflog $curr_branch)"
+               then
+                       oldremoteref="$reflog"
+                       break
+               fi
+       done
+
+       o=$(git show-branch --merge-base $curr_branch $merge_head $oldremoteref)
+       if test "$oldremoteref" = "$o"
+       then
+               unset oldremoteref
+       fi
+fi
+
You've moved all the lines after the call to "git fetch". It changes
the behavior when the reflog is not enabled, as the old value of
remoteref is lost.
Something like this?

Fix the non-rebased upstream case by only setting $old_remote_ref
with commits not ancestors of $remoteref or $merge_head. This should
have no affect on the rebased upstream case.
diff --git c/git-pull.sh w/git-pull.sh
index a09a44e..c1617d5 100755
--- c/git-pull.sh
+++ w/git-pull.sh
@@ -214,7 +214,10 @@ test true = "$rebase" && {
        do
                if test "$reflog" = "$(git merge-base $reflog $curr_branch)"
                then
-                       oldremoteref="$reflog"
+                       if test "$reflog" != $(git merge-base $reflog
$remoteref)
+                       then
+                               oldremoteref="$reflog"
+                       fi
                        break
                fi
        done
@@ -273,6 +276,14 @@ then
        exit
 fi

+if test true = "$rebase"
+then
+       if test "$oldremoteref" = $(git merge-base $oldremoteref $merge_head)
+       then
+               unset oldremoteref
+       fi
+fi
+
 merge_name=$(git fmt-merge-msg $log_arg <"$GIT_DIR/FETCH_HEAD") || exit
 case "$rebase" in
 true)
(also attached because of whitespace damage)

HTH,
Santi
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help