Thread (1 message) 1 message, 1 author, 2016-06-15

stgit "push --merged" woes

From: Yann Dirson <hidden>
Date: 2016-06-15 22:42:57

On Wed, Feb 21, 2007 at 10:58:13PM +0000, Catalin Marinas wrote:
quoted
Oh, while I'm at it, "push -m" does not seem to work as expected.
After pulling from your tree, which contains my changes, and rebasing
to your head, "push -m" of the "Factorize..." patch results in a
conflict, while rebasing onto this particular commit and then pushing
my original patch gets the merge properly detected.  Sounds like a
candidate for a quick 0.12.2 if we cannot kill it before 0.12.1.
Unless you deleted the empty patch, you could do a push --undo and try
to reverse apply the diff (that's what push -m does) and see whether
it fails or not. There might be a bug in StGIT and not be able to cope
with new files while doing the merge check (this patch has a new test
script). If I have time tomorrow, I'll try to put this in the push
test-case.
Just had a similar case, trying to "push -m" my Documentation patches.
The patch creating Documentation/ fails with conflict on Makefile.

Trying to reverse-apply the diff does not work, since the Makefile has
been modified by another commit.  I verified that reverse-applying the
2 patches touching that file in my stack does work.

That seems to imply that added files are not the only ones causing
problems to the current "push -m".  They just exhibit the problem more
often.

"push -m" should probably try other techniques if that one fails.
Reverse-apply on top of every newly-pulled commit that touches the
problematic files would be a possibility, but that's expensive.
Trying a meta-diff[1] between the patch to be pushed and candidate
newly-pulled commits could be cheaper.

But both techniques would miss a case that current "push -m" seems to
handle: when a patch was applied and then reversed upstream.


[1] FWIW, my (naive) stg-mdiff script:

====================
#!/bin/bash
set -e

# stg-mdiff - display meta-diffs, ie. diffs of diffs

# Main use: show evolutions of a patch.
# eg. stg-mdiff foo@stable foo
#     stg-mdiff foo 012345567ABCD # sha1 for "foo" as integrated upstream

# Copyright (c) 2007 Yann Dirson [off-list ref]
# Subject to the GNU GPL, version 2.

usage()
{
    echo "Usage: $(basename $0) <patch1> <patch2>"
    exit 1
}

if [ "$#" != 2 ]; then
    usage
fi

colordiff -u <(stg show "$1") <(stg show "$2") | less -RFX
====================
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help