Re: Rebasing stgit stacks

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

 



On Mon, Jan 15, 2007 at 10:46:37PM +0000, Catalin Marinas wrote:
> >I have started work on implementing "stg pull --to <newbase>", but I'm
> >facing some issues.
> 
> I think the combination of 'pull' and '--to' is confusing (at least to
> me) if you think of there English meaning.

That's possible, I'm not a native english speater :)

The idea is that we pull our stack from one place (current base) to
another.  Another possiblity would have been "stg rebase", but I'm not
very keen on adding another command to do a very similar job.


> > "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
> 
> As Petr suggested at the OLS last year, I added the possibility to
> configure the 'git pull' command so that people use whatever script
> they like.

Right.  Maybe different workflows should have this option set to
different values in different repos ?  I'm merely trying to get the
best default :)

> >The latter is, unless I miss something:
> >
> >- overkill when what we want is just to move the head to another place
> 
> Doesn't git automatically detect that it can do a fast forward? A
> fetch is still necessary anyway.

Yes, it detects it when it is one.  The problem is merely that it
can break things (for stgit's purpose) when it isn't.

> I'm not sure how people intend to use StGIT. Some might have their own
> changes to the base of the stack (maybe caused by 'stg commit') and
> would want 'git pull' to do a proper merge and not just fast-forward.
> 
> I actually did the above when maintaining a public (well, ARM internal
> only currently) kernel branch for other people to pull from. Since
> StGIT is not public branch friendly,

Making StGIT public-branch friendly is indeed the primary goal for
this set of patches - it is much less important to me to be able to
base my stack on GIT's "pu" or "next".

The idea is that, once we have are able to rebase a stack anyway,
rebasing to the new tip of a branch that is an StGIT stack is in many
aspects only a particular case (modulo any unapplied patches).


> I was working on a set of patches (mainly picking from other
> branches and minor modifications) and just committing them when
> finishing. Further updates from kernel.org triggered full merges
> with the base.

But doing this means that you can end with a base that is not any more
on the parent branch, but on a local merge, right ?  I'm not sure it
is an easy thing to work with.


> >- 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.
> 
> Is there any way to configure git (via gitconfig) to behave
> differently? You can add some per-branch options with the parent to
> pull from but this would require separate .git/remotes/ files for each
> branch.

I'm not sure there is anything currently.  The solution which I
remember was proposed was that such a branch "advertises" its status
in some way, so that the creator of the remote.<name>.fetch config
entry can indeed insert the "+" itself automatically.

On the StGIT front, we could have "stg clone" look at
patches/<branch>/current or so, and then modify the
remote.<name>.fetch entry accordingly.  Or do you think of any
workflow that would break under this change ?


> The switch() function already calls __set_head()

Yup, noticed that when running the testsuite - I meant to run switch
then reset instead.


> >    if os.path.isfile(os.path.join(basedir.get(), 'MERGE_HEAD')):
> >        os.remove(os.path.join(basedir.get(), 'MERGE_HEAD'))
> 
> When is the MERGE_HEAD file generated? Is there any harm in leaving this 
> file?

This is a leftover from sources of inspiration that create_branch and
switch_branch were.  I'm not 100% sure of why we want to get rid of
it, but it looked like the situation was similar enough.

It is apparently generated by git-merge (and git-resolve), and
currently out of the scope of stgit anyway.  If we're moving our
stack, it is probable it will loose any sort of accurateness.

Maybe instead we would want to block stgit operations if we see it,
because there certainly have been (illegal ?) operations done outside
of StGIT.


> >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.
> 
> Or replace the 'git pull' in the config file with 'git fetch && git
> reset --hard MERGE_HEAD'? I might be wrong though as I almost never
> use git directly :-).

Hm.  Probably rather FETCH_HEAD.  Will have to look at that - but see
above.

FWIW, I now mostly have a patch to change from git-pull to git-fetch,
which finally passes the current testsuite.

Note that I did not think of using FETCH_HEAD, I was rather thinking
of using information about the parent branch (which I had worked on
recently), with the idea that this info probably belongs to
branch.<name>.merge - which would complement Pavel's 87c69539 about
branch.<name>.remote.

Even if we would not need it here, it would be good to have those 2
parameters set when we can infer them.  That reminds me that "stg
clone" does not appear to allow selecting a specific branch in the
parent repo (which explains why the .merge parameter is not so
crucially needed yet: we always clone the main branch).

Best regards,
-- 
Yann.
-
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]