git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Yann Dirson <ydirson@altern.org>
To: Catalin Marinas <catalin.marinas@gmail.com>
Cc: git@vger.kernel.org, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
Subject: Rebasing stgit stacks
Date: Mon, 15 Jan 2007 21:24:12 +0100	[thread overview]
Message-ID: <20070115202412.GE9761@nan92-1-81-57-214-146.fbx.proxad.net> (raw)
In-Reply-To: <8b65902a0701150526j5a954529xf45b2d0348a77573@mail.gmail.com>

On Mon, Jan 15, 2007 at 02:26:36PM +0100, Guilhem Bonnefille wrote:
> >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.

  reply	other threads:[~2007-01-15 20:24 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-09 21:35 Howto use StGit and git-svn at same time Guilhem Bonnefille
2007-01-09 21:41 ` Guilhem Bonnefille
2007-01-09 22:41   ` Yann Dirson
2007-01-15 13:26     ` Guilhem Bonnefille
2007-01-15 20:24       ` Yann Dirson [this message]
2007-01-15 22:46         ` Rebasing stgit stacks Catalin Marinas
2007-01-15 23:39           ` Yann Dirson
2007-01-16 22:42             ` Catalin Marinas
2007-01-16 23:17               ` Yann Dirson
2007-01-16 23:30                 ` Jakub Narebski
2007-01-17  9:03                   ` Karl Hasselström
2007-01-17 11:07                     ` David Kågedal
2007-01-17 19:34                     ` Yann Dirson
2007-01-17 20:53                   ` Yann Dirson
2007-01-18 12:06                     ` Catalin Marinas
2007-01-18 19:42                       ` Yann Dirson
2007-01-19  9:40                     ` Jakub Narebski
2007-01-20 13:17                       ` Yann Dirson
2007-01-20 19:16                         ` Jakub Narebski
2007-01-20 20:07                           ` Yann Dirson
2007-01-22 23:12                           ` Catalin Marinas
2007-01-18  9:05                 ` Catalin Marinas
2007-01-18 20:52                   ` Yann Dirson
2007-01-19  9:47                     ` Jakub Narebski
2007-01-22 17:54                       ` Catalin Marinas
2007-01-22 19:47                         ` Yann Dirson
2007-01-22 22:58                           ` Catalin Marinas
2007-01-23  7:49                             ` Yann Dirson
2007-01-23 22:03                               ` Catalin Marinas
2007-01-24  0:05                                 ` Yann Dirson
2007-01-24 12:37                                   ` Catalin Marinas
2007-01-24 20:03                                     ` Yann Dirson
2007-01-28  4:33                             ` Theodore Tso
2007-01-28 10:25                               ` Yann Dirson
2007-01-28 23:21                               ` Catalin Marinas
2007-01-17 21:30             ` Yann Dirson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070115202412.GE9761@nan92-1-81-57-214-146.fbx.proxad.net \
    --to=ydirson@altern.org \
    --cc=catalin.marinas@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=guilhem.bonnefille@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).