chiark / gitweb /
tg import: fix + make more robust
authorKirill Smelkov <kirr@landau.phys.spbu.ru>
Thu, 18 Sep 2008 16:29:30 +0000 (20:29 +0400)
committerPetr Baudis <pasky@suse.cz>
Mon, 22 Sep 2008 15:40:35 +0000 (17:40 +0200)
a5bf892d0900cbf9949f628c3e05db599341a02c (tg import: Check out new files
as we go) broke tg-import. This is how it fails after that change:

    $ tg import Z~~..Z
    tg: ---- Importing e3e8c1382fe4cedca31e955910914ae0033455eb to t/Z
    tg: Automatically marking dependency on master
    tg: Creating t/Z base from master...
    Switched to a new branch "t/Z"
    tg: Topic branch t/Z set up. Please fill .topmsg now and make initial commit.
    tg: To abort: git rm -f .top* && git checkout master && tg delete t/Z
    fatal: pathspec '.topdeps' did not match any files

That's why, when we do git read-tree -u -m it _kills_ .topmsg and
.topdep both in index and in working tree!

Also, imagine that we are going to import patch C onto A

o---B---A
     \
      C

With read-tree we'll *override* any change in common files between A and
B, so I think read-tree is wrong here (it was ok if we are importing
on top of B).

What is right it seems, is to work on diff level -- to use cherry-pick.
And since cherry-pick does not kill our already-in-index .topmsg and
.topdeps we automatically fix the breakage.

Signed-off-by: Kirill Smelkov <kirr@landau.phys.spbu.ru>
tg-import.sh

index 68477f0..799efc9 100644 (file)
@@ -61,7 +61,7 @@ process_commit()
        branch_name=$(get_branch_name "$commit")
        info "---- Importing $commit to $branch_prefix$branch_name"
        tg create "$branch_prefix""$branch_name"
-       git read-tree -u -m "$commit"
+       git cherry-pick --no-commit "$commit"
        get_commit_msg "$commit" > .topmsg
        git add -f .topmsg .topdeps
        git commit -C "$commit"