git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Rebasing stgit stacks

From
Yann Dirson <ydirson@altern.org>
Date
Jan 15, 2007, 20:24 UTC
Message-ID
<20070115202412.GE9761@nan92-1-81-57-214-146.fbx.proxad.net>
In-Reply-To
<8b65902a0701150526j5a954529xf45b2d0348a77573@mail.gmail.com>
On Mon, Jan 15, 2007 at 02:26:36PM +0100, Guilhem Bonnefille wrote:
Show 5 quoted lines
> >What you should have done is moving your stack base from your old
> >origin branch to remotes/trunk - something that StGIT does not support
> >yet from command-line, but I've done this manually in the past
> >(migrating an StGIT stack after re-running a full git-cvsimport after
> >the original cvs branch got corrupted).

I have started work on implementing "stg pull --to <newbase>", but I'm facing some issues.

 "stg pull", after popping all patches, currently calls "git pull",
 which indeed has 2 roles:
- running "git fetch" on the parent branch
- updating the head of the stack (which matches the base since
  no patch is applied), by relying on git-pull to fast-forward the
  stack head
The latter is, unless I miss something:
- overkill when what we want is just to move the head to another place
- problematic when the parent branch is one that would be tracker with
"+" in the remote pull line (eg. "next", "pu", or an stgit stack).  In
that case, although "git fetch" refuses to update the parent head
because it would not be a fast-forward, git-pull then attempt to do a
merge, which completely breaks expectations.

What my implementation of "pull --to" does is just moving the head with the following code added to git.py:

def move_branch(tree_id):
    """Move HEAD to another commit
    """
    __set_head(tree_id)
    switch(tree_id)
    if os.path.isfile(os.path.join(basedir.get(), 'MERGE_HEAD')):
        os.remove(os.path.join(basedir.get(), 'MERGE_HEAD'))

That only partly works - that is, it works if I add the expected "+" in the remote refspec line (or if I add an explicit refspec on command-line). There is surely a way for "stg clone" to detect the parent is an stgit stack, and we can possibly have the clone operation setup things right from the start. I remember someone suggesting that such branches advertise their status so git-clone itself would add this - not sure this is planned for 1.5.0, though.

Even when this fully works, I'm reluctant to leave things that way, because would be easy to forget the --to, and get a broken stack, with "stg diff" being confused enough to happily show this:

|bar$ stg diff; echo $?
|* Unmerged path file
|0

I would be of the opinion to stop calling "git pull" entirely, and use "git fetch and the git.move_branch show above. Unless I hear about better ideas, my next patch set will be along those lines.

Best regards,
-- 
Yann.
Previous: Guilhem BonnefilleNext: Catalin Marinas
Message 5 of 36 in “Howto use StGit and git-svn at same time”
  1. Guilhem BonnefilleJan 9, 2007
  2. Guilhem BonnefilleJan 9, 2007
  3. Yann DirsonJan 9, 2007
  4. Guilhem BonnefilleJan 15, 2007
  5. Rebasing stgit stacksYann Dirson, Jan 15, 2007
  6. Catalin MarinasJan 15, 2007
  7. Yann DirsonJan 15, 2007
  8. Catalin MarinasJan 16, 2007
  9. Yann DirsonJan 16, 2007
  10. Jakub NarebskiJan 16, 2007
  11. Karl HasselströmJan 17, 2007
  12. David KågedalJan 17, 2007
  13. Yann DirsonJan 17, 2007
  14. Yann DirsonJan 17, 2007
  15. Catalin MarinasJan 18, 2007
  16. Yann DirsonJan 18, 2007
  17. Jakub NarebskiJan 19, 2007
  18. Yann DirsonJan 20, 2007
  19. Jakub NarebskiJan 20, 2007
  20. Yann DirsonJan 20, 2007
  21. Catalin MarinasJan 22, 2007
  22. Catalin MarinasJan 18, 2007
  23. Yann DirsonJan 18, 2007
  24. Jakub NarebskiJan 19, 2007
  25. Catalin MarinasJan 22, 2007
  26. Yann DirsonJan 22, 2007
  27. Catalin MarinasJan 22, 2007
  28. Yann DirsonJan 23, 2007
  29. Catalin MarinasJan 23, 2007
  30. Yann DirsonJan 24, 2007
  31. Catalin MarinasJan 24, 2007
  32. Yann DirsonJan 24, 2007
  33. Theodore TsoJan 28, 2007
  34. Yann DirsonJan 28, 2007
  35. Catalin MarinasJan 28, 2007
  36. Yann DirsonJan 17, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.