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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Aug 12, 2010 at 3:34 PM, Santi Béjar <santi@xxxxxxxxxxx> wrote:
> On Thu, Aug 12, 2010 at 7:56 AM, Elijah Newren <newren@xxxxxxxxx> wrote:

[...]

>>
>> Signed-off-by: Elijah Newren <newren@xxxxxxxxx>
>> ---
>>  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
--
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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]