public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot-Users] Revised custodian git writeup
@ 2008-01-22  1:44 gvb.uboot
  2008-01-22  7:52 ` Markus Klotzbücher
  2008-01-22  8:55 ` Wolfgang Denk
  0 siblings, 2 replies; 25+ messages in thread
From: gvb.uboot @ 2008-01-22  1:44 UTC (permalink / raw)
  To: u-boot

<http://www.denx.de/wiki/view/UBoot/CustodianGitTrees#Tips_for_maintaining_custodian_t>

I've rewritten the "Tips for maintaining custodian trees" section to 
reflect Wolfgang's request that the "master" branch be used for patches 
for him to pull.

Conceptually, this is very different from my previous recommendation / 
methodology writeup.  In practice, however, it is a trivial change.  The 
fundamental difference is to create a separate branch ("uboot") to track 
the master repo and rebase the "master" branch against that, instead of 
vice versa.

Best regards,
gvb

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22  1:44 [U-Boot-Users] Revised custodian git writeup gvb.uboot
@ 2008-01-22  7:52 ` Markus Klotzbücher
  2008-01-22  8:55 ` Wolfgang Denk
  1 sibling, 0 replies; 25+ messages in thread
From: Markus Klotzbücher @ 2008-01-22  7:52 UTC (permalink / raw)
  To: u-boot

Hi Jerry,

"gvb.uboot" <gvb.uboot@gmail.com> writes:

> <http://www.denx.de/wiki/view/UBoot/CustodianGitTrees#Tips_for_maintaining_custodian_t>
>
> I've rewritten the "Tips for maintaining custodian trees" section to 
> reflect Wolfgang's request that the "master" branch be used for patches 
> for him to pull.
>
> Conceptually, this is very different from my previous recommendation / 
> methodology writeup.  In practice, however, it is a trivial change.  The 
> fundamental difference is to create a separate branch ("uboot") to track 
> the master repo and rebase the "master" branch against that, instead of 
> vice versa.

This is helpful, thanks for sharing!

Best regards

Markus Klotzbuecher

--
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22  1:44 [U-Boot-Users] Revised custodian git writeup gvb.uboot
  2008-01-22  7:52 ` Markus Klotzbücher
@ 2008-01-22  8:55 ` Wolfgang Denk
  2008-01-22  9:50   ` Haavard Skinnemoen
  2008-01-22 13:32   ` Jerry Van Baren
  1 sibling, 2 replies; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22  8:55 UTC (permalink / raw)
  To: u-boot

Hello,

in message <47954A7D.4070507@gmail.com> you wrote:
> 
> I've rewritten the "Tips for maintaining custodian trees" section to 
> reflect Wolfgang's request that the "master" branch be used for patches 
> for him to pull.
> 
> Conceptually, this is very different from my previous recommendation / 
> methodology writeup.  In practice, however, it is a trivial change.  The 
> fundamental difference is to create a separate branch ("uboot") to track 
> the master repo and rebase the "master" branch against that, instead of 
> vice versa.

Rebasing the master branch, i. e. the one I'll be pullung from?

Are you sure that is a good idea? Note that I (and probably others)
will be pulling from that branch, and not only once!

Quote from the git-rebase man page:

...
NOTES
       When you rebase a branch, you are changing its history in a
       way that will cause problems for anyone who already has a copy
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       of the branch in their repository and tries to pull updates
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       from you. You should understand the implications of using git
       ^^^^^^^^^
       rebase on a repository that you share.
...



Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
e-credibility: the non-guaranteeable likelihood that  the  electronic
data you're seeing is genuine rather than somebody's made-up crap.
- Karl Lehenbauer

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22  8:55 ` Wolfgang Denk
@ 2008-01-22  9:50   ` Haavard Skinnemoen
  2008-01-22 13:45     ` Wolfgang Denk
  2008-01-22 13:50     ` Jerry Van Baren
  2008-01-22 13:32   ` Jerry Van Baren
  1 sibling, 2 replies; 25+ messages in thread
From: Haavard Skinnemoen @ 2008-01-22  9:50 UTC (permalink / raw)
  To: u-boot

On Tue, 22 Jan 2008 09:55:33 +0100
Wolfgang Denk <wd@denx.de> wrote:

> Rebasing the master branch, i. e. the one I'll be pullung from?
> 
> Are you sure that is a good idea? Note that I (and probably others)
> will be pulling from that branch, and not only once!

That depends on whether or not you want your commit history filled with
"merge with upstream/master" crap or not.

You should only pull when explicitly requested to do so. In that case,
if the branch was newly rebased, there will be a clean, linear history
from the tip of your master branch to the tip of the one being pulled.

If there are conflicting changes and the merge needs manual
intervention, you abort the merge and tell the one sending the pull
request that it didn't merge cleanly, please rebase.

>        When you rebase a branch, you are changing its history in a
>        way that will cause problems for anyone who already has a copy
>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>        of the branch in their repository and tries to pull updates
>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>        from you. You should understand the implications of using git
>        ^^^^^^^^^
>        rebase on a repository that you share.

And that is, IMO, exactly why you shouldn't be pulling from the master
branch in the first place. People who pull regularly to test stuff that
is in progress will run into this problem, and they are most likely to
pull the master branch because that's the default.

There are two different kinds of users involved here: You (and other
maintainers that are "upstream" from someone), and regular users who
want to test stuff. Upstream maintainers should receive a clean
history, i.e. from a branch that is frequently rebased. At the same
time, we should avoid exposing testers to the problems of dealing with
a branch that is rebased all the time.

So we need (at least) two different branches that are maintained in
different ways, and I think it's easier to tell you, Wolfgang and other
upstream maintainers, to pull from a non-master branch than to tell
everyone else in the world.

Just my two cents.

Haavard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22  8:55 ` Wolfgang Denk
  2008-01-22  9:50   ` Haavard Skinnemoen
@ 2008-01-22 13:32   ` Jerry Van Baren
  2008-01-22 14:03     ` Wolfgang Denk
  2008-01-22 14:35     ` Jerry Van Baren
  1 sibling, 2 replies; 25+ messages in thread
From: Jerry Van Baren @ 2008-01-22 13:32 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk wrote:
> Hello,
> 
> in message <47954A7D.4070507@gmail.com> you wrote:
>> I've rewritten the "Tips for maintaining custodian trees" section to 
>> reflect Wolfgang's request that the "master" branch be used for patches 
>> for him to pull.
>>
>> Conceptually, this is very different from my previous recommendation / 
>> methodology writeup.  In practice, however, it is a trivial change.  The 
>> fundamental difference is to create a separate branch ("uboot") to track 
>> the master repo and rebase the "master" branch against that, instead of 
>> vice versa.
> 
> Rebasing the master branch, i. e. the one I'll be pullung from?
> 
> Are you sure that is a good idea? Note that I (and probably others)
> will be pulling from that branch, and not only once!
> 
> Quote from the git-rebase man page:
> 
> ...
> NOTES
>        When you rebase a branch, you are changing its history in a
>        way that will cause problems for anyone who already has a copy
>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>        of the branch in their repository and tries to pull updates
>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>        from you. You should understand the implications of using git
>        ^^^^^^^^^
>        rebase on a repository that you share.
> ...
> 
> Best regards,
> Wolfgang Denk

Well, that is what I understood you to be asking for, and it worked this 
past merge window.  That could have been luck, but I suspect not.

The conflicting requirements are:
1) Wolfgang wishes to pull from the subrepo "master" branch
2) Subrepository custodians must rebase to pull the latest changes and 
fix any merge conflicts so that Wolfgang's pulls don't have merge conflicts.

I don't believe the rebasing will cause problems because the rebasing is 
pulling from the u-boot.git master repository (or possibly 
u-boot-testing.git) which is rebuilding the subrepo "uboot" branch to 
match the u-boot.git master, and then rebasing the subrepo "master" 
based on the u-boot.git master.  This will make the subrepo "master" 
*match* the u-boot.git master *plus* append the new patches to be pulled.

I think the difference with our use vs. the general case that the 
warning applies to is that the custodians are making their "master" 
branch conform exactly to the u-boot.git master branch and then adding 
on the patches to be pulled.

Disclaimer: The following is my reasoning, *not* experience, and could 
be full of "stuff."

In the general (problematic) case, I think the problem is that someone 
snapshots a branch (clones / pulls), that branch gets rewritten in a way 
that doesn't match the snapshot, and then a follow-on pull will fail. 
The easiest solution in that case is to use the -f force flag, which 
will rewrite the local branch to match the rebased master.

The two differences, as I see it, are:
1) Wolfgang's u-boot.git is The Master, the custodian repos conform to 
that.  (If things get messed up, with a -f force, but that shouldn't 
happen I don't think.)
2) We are interested in feeding patches to u-boot.git, not with 
preserving the history of our custodian repos.

Illustration:

|<--- tracks u-boot.git, changes -->|<--- subrepo patches --->|
---o----o----o----o---o---o----o----o----o---o----o---o---o---o

Since Wolfgang pulls the new patches into u-boot.git and the subrepo 
"merge" branch tracks u-boot.git, he will get (should get | has gotten) 
the new patches with no problems.

The eye opening thing about git for me has been its changeset 
methodology (suh-weet, as jdl would say ;-) and its hash identification 
of the changesets so it can track what it has already applied and Do The 
Right Thing[tm].

Best regards,
gvb

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22  9:50   ` Haavard Skinnemoen
@ 2008-01-22 13:45     ` Wolfgang Denk
  2008-01-22 14:20       ` Haavard Skinnemoen
  2008-01-22 13:50     ` Jerry Van Baren
  1 sibling, 1 reply; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22 13:45 UTC (permalink / raw)
  To: u-boot

In message <20080122105016.313d8f88@dhcp-252-066.norway.atmel.com> you wrote:
>
> > Are you sure that is a good idea? Note that I (and probably others)
> > will be pulling from that branch, and not only once!
> 
> That depends on whether or not you want your commit history filled with
> "merge with upstream/master" crap or not.

...which in turn depends on whether  or  not  you  consider  a  merge
commit as crap or not. IMHO it's sometimes valuable information about
the history of a project, but YMMV.


My point is a different one, and it seems I never explicitly stated it
before:

My idea of a custodian repository is that it  is  more  than  just  a
working  tool  for  collecting  patches and preparing these for merge
into  mainline.  My  idea  is  instea  that  these  are  pretty  much
independent  incarnations  of  U-Boot source trees which users (note:
users, not only developers) with  specific  needs  or  interests  can
refer to.

For example, in my set of mind somebody interested in the latest 85xx
code would clone the 85xx custodian  repository,  expecting  that  he
finds  there  the  most  current  code for this family of processors.
Probably he will never sync himself  against  mainline,  but  instead
continue update (pull) from the 85xx custodian repository.

That means, that my idea is that it is the custodian's responsibility
to  provide  a  permanently  accessable,  consistent  view   of   his
repository  to  users.  When  he  collects  patches,  he will - after
sufficient review and testing - decide that these are good enough  to
go  into  his  repository. And at certain points we will pull all the
stuff that has been collected there into mainline.

> You should only pull when explicitly requested to do so. In that case,

Actually I fetch from all custodian repos quite frequently. But I do
only pull (merge into mainline) when I'm explicitely told.

But note that my idea  is  that  other  users  may  have  cloned  the
custodian  repository,  and  continue  to  pull  from  it.  For their
convenience (and my own) I want to have the current code collected in
the master branch, and I think we agree that the master  branch  must
not be rebased.

> If there are conflicting changes and the merge needs manual
> intervention, you abort the merge and tell the one sending the pull
> request that it didn't merge cleanly, please rebase.

Right - but this does not depend on how the custodian repos are set up
or which branch I'm pulling from.

> >        way that will cause problems for anyone who already has a copy
> >                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >        of the branch in their repository and tries to pull updates
> >        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >        from you. You should understand the implications of using git
> >        ^^^^^^^^^
> >        rebase on a repository that you share.
> 
> And that is, IMO, exactly why you shouldn't be pulling from the master
> branch in the first place. People who pull regularly to test stuff that
> is in progress will run into this problem, and they are most likely to
> pull the master branch because that's the default.

People pulling the master branch have (IMHO) the right  to  expect  a
consisten  history.  It is the custodians responsibility not to merge
stuff into the master branch that causes conflicts.

> There are two different kinds of users involved here: You (and other
> maintainers that are "upstream" from someone), and regular users who
> want to test stuff. Upstream maintainers should receive a clean

I don't think that we are different types of users - maybe  from  the
kind  of  work  we  do,  but  I  don't  see  why we should access the
custodian's repository differently. Actually I think  it's  a  pretty
good idea if others test the very same code I will be pulling later.

> history, i.e. from a branch that is frequently rebased. At the same

I think only "small" topic branches should be rebased - this  is  the
part of the custodian's work that is needed to clean up the stuff and
to  make it ready for mainline merge. The he prepares a branch for me
and ofr other users to pull from.

> time, we should avoid exposing testers to the problems of dealing with
> a branch that is rebased all the time.

ACK.

> So we need (at least) two different branches that are maintained in
> different ways, and I think it's easier to tell you, Wolfgang and other
> upstream maintainers, to pull from a non-master branch than to tell
> everyone else in the world.

I still fail to see why separate branches would be  needed.  I  think
using  the  same  one  makes more sense, as it allows me to pull from
tested code.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
God may be subtle, but He isn't plain mean.         - Albert Einstein

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22  9:50   ` Haavard Skinnemoen
  2008-01-22 13:45     ` Wolfgang Denk
@ 2008-01-22 13:50     ` Jerry Van Baren
  2008-01-22 14:10       ` Wolfgang Denk
  1 sibling, 1 reply; 25+ messages in thread
From: Jerry Van Baren @ 2008-01-22 13:50 UTC (permalink / raw)
  To: u-boot

Haavard Skinnemoen wrote:
> On Tue, 22 Jan 2008 09:55:33 +0100
> Wolfgang Denk <wd@denx.de> wrote:
> 
>> Rebasing the master branch, i. e. the one I'll be pullung from?
>>
>> Are you sure that is a good idea? Note that I (and probably others)
>> will be pulling from that branch, and not only once!
> 
> That depends on whether or not you want your commit history filled with
> "merge with upstream/master" crap or not.
> 
> You should only pull when explicitly requested to do so. In that case,
> if the branch was newly rebased, there will be a clean, linear history
> from the tip of your master branch to the tip of the one being pulled.
> 
> If there are conflicting changes and the merge needs manual
> intervention, you abort the merge and tell the one sending the pull
> request that it didn't merge cleanly, please rebase.
> 
>>        When you rebase a branch, you are changing its history in a
>>        way that will cause problems for anyone who already has a copy
>>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>        of the branch in their repository and tries to pull updates
>>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>        from you. You should understand the implications of using git
>>        ^^^^^^^^^
>>        rebase on a repository that you share.
> 
> And that is, IMO, exactly why you shouldn't be pulling from the master
> branch in the first place. People who pull regularly to test stuff that
> is in progress will run into this problem, and they are most likely to
> pull the master branch because that's the default.
> 
> There are two different kinds of users involved here: You (and other
> maintainers that are "upstream" from someone), and regular users who
> want to test stuff. Upstream maintainers should receive a clean
> history, i.e. from a branch that is frequently rebased. At the same
> time, we should avoid exposing testers to the problems of dealing with
> a branch that is rebased all the time.

I don't see this as a big deal because my methodology (and the proper 
one, IMHO) is to create a branch in my local repo, pull the current 
state of the target repo into the branch, and then either merge or 
cherrypick the "foreign" subrepo changes into my working branch in my 
repo.  At that point, I discard the foreign repo branch because it has 
served its purpose.  Because I discard the foreign repo branch, I don't 
care of the foreign repo gets rebased and its history is rewritten, I've 
already discarded that history.

If more things change in the foreign repo, I do the same thing over, 
starting with creating a new branch.

I'm sure that is how Wolfgang pulls subrepos to - not directly, but into 
a testing branch and then, if it is OK, into the main u-boot.git repo.

Here are my Cliff Notes(R) for a real example of this interaction with 
u-boot.git and between myself and Kumar, pulling his libfdt updates into 
my u-boot-fdt.git repo:
<http://www.denx.de/wiki/view/UBoot/UBootFdtInfo#All_Your_Base_are_Belong_to_Us>

This ultimately was merged by Wolfgang into u-boot.git with no problems 
(yet ;-).

> So we need (at least) two different branches that are maintained in
> different ways, and I think it's easier to tell you, Wolfgang and other
> upstream maintainers, to pull from a non-master branch than to tell
> everyone else in the world.
> 
> Just my two cents.
> 
> Haavard

+ my 2c,
gvb

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 13:32   ` Jerry Van Baren
@ 2008-01-22 14:03     ` Wolfgang Denk
  2008-01-22 14:26       ` Markus Klotzbücher
  2008-01-22 14:38       ` Haavard Skinnemoen
  2008-01-22 14:35     ` Jerry Van Baren
  1 sibling, 2 replies; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22 14:03 UTC (permalink / raw)
  To: u-boot

Dear Jerry,

in message <4795F081.5050204@ge.com> you wrote:
>
> The conflicting requirements are:
> 1) Wolfgang wishes to pull from the subrepo "master" branch

...and others will do that, too, at unknown points of time.

> 2) Subrepository custodians must rebase to pull the latest changes and 
> fix any merge conflicts so that Wolfgang's pulls don't have merge conflicts.

...must rebase their working branch(es), but there is no need that
I'll be pulling from exactly this/these branches.

As explained before, my idea is that the custodians will merge  their
code  into the master branch (a) for others to test it and (b) for me
to pull from. 

> I don't believe the rebasing will cause problems because the rebasing is 
> pulling from the u-boot.git master repository (or possibly 
> u-boot-testing.git) which is rebuilding the subrepo "uboot" branch to 
> match the u-boot.git master, and then rebasing the subrepo "master" 
> based on the u-boot.git master.  This will make the subrepo "master" 
> *match* the u-boot.git master *plus* append the new patches to be pulled.

The idea of rebasing the master branch is something that find
frightening.

> I think the difference with our use vs. the general case that the 
> warning applies to is that the custodians are making their "master" 
> branch conform exactly to the u-boot.git master branch and then adding 
> on the patches to be pulled.

I'm ot sure if I want to have such a requirement.

> Disclaimer: The following is my reasoning, *not* experience, and could 
> be full of "stuff."
> 
> In the general (problematic) case, I think the problem is that someone 
> snapshots a branch (clones / pulls), that branch gets rewritten in a way 
> that doesn't match the snapshot, and then a follow-on pull will fail. 

This is why I think that master should never be rebased. "master" is
(IMO) supposed to always provide a consistent history.

> The two differences, as I see it, are:
> 1) Wolfgang's u-boot.git is The Master, the custodian repos conform to 
> that.  (If things get messed up, with a -f force, but that shouldn't 
> happen I don't think.)
> 2) We are interested in feeding patches to u-boot.git, not with 
> preserving the history of our custodian repos.

Wrong. I *am* interested in preserving the history of  the  custodian
repos.  Somebody mostly interested in ARM processors shall be able to
use the ARM custodian's repo for all his daily work exactly the  same
way as he could use the main repo.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The only way you could make a happy  marriage  is  by  cuttin'  their
heads  off  as  soon  as  they say `I do', yes? You can't make happi-
ness...                           - Terry Pratchett, _Witches Abroad_

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 13:50     ` Jerry Van Baren
@ 2008-01-22 14:10       ` Wolfgang Denk
  0 siblings, 0 replies; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22 14:10 UTC (permalink / raw)
  To: u-boot

In message <4795F495.70101@ge.com> you wrote:
>
> I'm sure that is how Wolfgang pulls subrepos to - not directly, but into 
> a testing branch and then, if it is OK, into the main u-boot.git repo.

Not exactly - insteadof or ratherin addition to brnaches I also use
several copies of repositories which I can throw away if needed.

In one such copy I follow all custodian repos using  remote  tracking
branches.  This  is  also  used  to  pull from such a remote tracking
branch if I'm ordered to pull from a custodian's repo. If this causes
problems, I'll shout on the ML and either clean up or even throw away
the whole repo. If it works, I'll pull  this  repo  into  the  mailin
repo.

The reason for using additional copies of repos  instead  of  branche
scomes  from  the fact that (1) I used to use cogito for a long time,
which handled branches differently, and (2) I have seen a  copule  of
situations (with earlier versions of git and cogito) that corrupted a
repository  such  that  I was not able to repair it. So I try to make
sure I can always throw away everything...


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Pig: An animal (Porcus omnivorous) closely allied to the  human  race
by  the splendor and vivacity of its appetite, which, however, is in-
ferior in scope, for it balks at pig.                - Ambrose Bierce

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 13:45     ` Wolfgang Denk
@ 2008-01-22 14:20       ` Haavard Skinnemoen
  2008-01-22 14:42         ` Mike Frysinger
  2008-01-22 16:34         ` Wolfgang Denk
  0 siblings, 2 replies; 25+ messages in thread
From: Haavard Skinnemoen @ 2008-01-22 14:20 UTC (permalink / raw)
  To: u-boot

On Tue, 22 Jan 2008 14:45:48 +0100
Wolfgang Denk <wd@denx.de> wrote:

> In message <20080122105016.313d8f88@dhcp-252-066.norway.atmel.com> you wrote:
> >
> > > Are you sure that is a good idea? Note that I (and probably others)
> > > will be pulling from that branch, and not only once!
> > 
> > That depends on whether or not you want your commit history filled with
> > "merge with upstream/master" crap or not.
> 
> ...which in turn depends on whether  or  not  you  consider  a  merge
> commit as crap or not. IMHO it's sometimes valuable information about
> the history of a project, but YMMV.

So you _do_ want that crap in the commit history ;-)

Other people (Linus, for example) do not. I guess I'll just have to use
different workflows for my u-boot and Linux work then...but I'm not
quite done arguing yet ;-)

> My point is a different one, and it seems I never explicitly stated it
> before:
> 
> My idea of a custodian repository is that it  is  more  than  just  a
> working  tool  for  collecting  patches and preparing these for merge
> into  mainline.  My  idea  is  instea  that  these  are  pretty  much
> independent  incarnations  of  U-Boot source trees which users (note:
> users, not only developers) with  specific  needs  or  interests  can
> refer to.
> 
> For example, in my set of mind somebody interested in the latest 85xx
> code would clone the 85xx custodian  repository,  expecting  that  he
> finds  there  the  most  current  code for this family of processors.
> Probably he will never sync himself  against  mainline,  but  instead
> continue update (pull) from the 85xx custodian repository.
> 
> That means, that my idea is that it is the custodian's responsibility
> to  provide  a  permanently  accessable,  consistent  view   of   his
> repository  to  users.  When  he  collects  patches,  he will - after
> sufficient review and testing - decide that these are good enough  to
> go  into  his  repository. And at certain points we will pull all the
> stuff that has been collected there into mainline.

But the stuff that has been collected may be in completely different
states of development. Some patches may have pending review comments
(which showed up after they were committed to the repository.) Some
patches may need more testing (which they are much more likely to get
after they have been committed to the repository.)

When the merge window comes up, the custodian should submit a merge
request for all the patches that are considered complete and fully
tested, and this usually involves cherry-picking patches into a freshly
created branch, making the history non-linear.

Also, if a bug shows up during testing, it should be folded into the
original patch before it's merged upstream, or it will break "git
bisect". This is just not possible if you only want to pull from a
linear master branch.

> > You should only pull when explicitly requested to do so. In that case,
> 
> Actually I fetch from all custodian repos quite frequently. But I do
> only pull (merge into mainline) when I'm explicitely told.

How about you do those out-of-band pulls from the master branch (which
is not to be rebased and may contain stuff that requires more testing)
and only pull into mainline from the branch specified by the custodian?

> But note that my idea  is  that  other  users  may  have  cloned  the
> custodian  repository,  and  continue  to  pull  from  it.  For their
> convenience (and my own) I want to have the current code collected in
> the master branch, and I think we agree that the master  branch  must
> not be rebased.

I have no problem with that. I just think that custodians should be
allowed to specify a different branch than "master" when sending a pull
request.

> > If there are conflicting changes and the merge needs manual
> > intervention, you abort the merge and tell the one sending the pull
> > request that it didn't merge cleanly, please rebase.
> 
> Right - but this does not depend on how the custodian repos are set up
> or which branch I'm pulling from.

If you only ever want to pull from the master branch, and the master
branch can't be rebased, how are we supposed to rebase?

> > >        way that will cause problems for anyone who already has a copy
> > >                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > >        of the branch in their repository and tries to pull updates
> > >        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> > >        from you. You should understand the implications of using git
> > >        ^^^^^^^^^
> > >        rebase on a repository that you share.
> > 
> > And that is, IMO, exactly why you shouldn't be pulling from the master
> > branch in the first place. People who pull regularly to test stuff that
> > is in progress will run into this problem, and they are most likely to
> > pull the master branch because that's the default.
> 
> People pulling the master branch have (IMHO) the right  to  expect  a
> consisten  history.  It is the custodians responsibility not to merge
> stuff into the master branch that causes conflicts.

Agreed.

> > There are two different kinds of users involved here: You (and other
> > maintainers that are "upstream" from someone), and regular users who
> > want to test stuff. Upstream maintainers should receive a clean
> 
> I don't think that we are different types of users - maybe  from  the
> kind  of  work  we  do,  but  I  don't  see  why we should access the
> custodian's repository differently. Actually I think  it's  a  pretty
> good idea if others test the very same code I will be pulling later.

Sure, but some patches may require more testing than others.

> > history, i.e. from a branch that is frequently rebased. At the same
> 
> I think only "small" topic branches should be rebased - this  is  the
> part of the custodian's work that is needed to clean up the stuff and
> to  make it ready for mainline merge. The he prepares a branch for me
> and ofr other users to pull from.

I think your argument is inconsistent. How is "preparing a branch for
you to pull" any different from rebasing?

> > So we need (at least) two different branches that are maintained in
> > different ways, and I think it's easier to tell you, Wolfgang and other
> > upstream maintainers, to pull from a non-master branch than to tell
> > everyone else in the world.
> 
> I still fail to see why separate branches would be  needed.  I  think
> using  the  same  one  makes more sense, as it allows me to pull from
> tested code.

I think you'll receive more well-tested code if you allow custodians to
commit patches to "master" earlier. But this necessarily means either
being allowed to rebase the "master" branch or using a different branch
for merging (which only contains code that has spent a fair amount of
time in the master branch.)

IOW, one branch is for stuff that is ready to merge, the other is for
the same _plus_ stuff that needs testing. I think using "master" for
the latter will give the to-be-tested code much more exposure before it
hits mainline, and that's IMO a good thing.

Haavard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 14:03     ` Wolfgang Denk
@ 2008-01-22 14:26       ` Markus Klotzbücher
  2008-01-22 16:36         ` Wolfgang Denk
  2008-01-22 14:38       ` Haavard Skinnemoen
  1 sibling, 1 reply; 25+ messages in thread
From: Markus Klotzbücher @ 2008-01-22 14:26 UTC (permalink / raw)
  To: u-boot

Dear Wolfgang,

Wolfgang Denk <wd@denx.de> writes:

> in message <4795F081.5050204@ge.com> you wrote:

>> I think the difference with our use vs. the general case that the 
>> warning applies to is that the custodians are making their "master" 
>> branch conform exactly to the u-boot.git master branch and then adding 
>> on the patches to be pulled.
>
> I'm ot sure if I want to have such a requirement.

Not doing this makes it hard to use git-request-pull to generate these
cute summaries in case you repeatedly update->merge-a-patch.

Best regards

     Markus

--
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80  Email: office at denx.de

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 13:32   ` Jerry Van Baren
  2008-01-22 14:03     ` Wolfgang Denk
@ 2008-01-22 14:35     ` Jerry Van Baren
  1 sibling, 0 replies; 25+ messages in thread
From: Jerry Van Baren @ 2008-01-22 14:35 UTC (permalink / raw)
  To: u-boot

Jerry Van Baren wrote:
> Wolfgang Denk wrote:
>> Hello,
>>
>> in message <47954A7D.4070507@gmail.com> you wrote:
>>> I've rewritten the "Tips for maintaining custodian trees" section to 
>>> reflect Wolfgang's request that the "master" branch be used for patches 
>>> for him to pull.
>>>
>>> Conceptually, this is very different from my previous recommendation / 
>>> methodology writeup.  In practice, however, it is a trivial change.  The 
>>> fundamental difference is to create a separate branch ("uboot") to track 
>>> the master repo and rebase the "master" branch against that, instead of 
>>> vice versa.
>> Rebasing the master branch, i. e. the one I'll be pullung from?
>>
>> Are you sure that is a good idea? Note that I (and probably others)
>> will be pulling from that branch, and not only once!
>>
>> Quote from the git-rebase man page:
>>
>> ...
>> NOTES
>>        When you rebase a branch, you are changing its history in a
>>        way that will cause problems for anyone who already has a copy
>>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>        of the branch in their repository and tries to pull updates
>>        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>        from you. You should understand the implications of using git
>>        ^^^^^^^^^
>>        rebase on a repository that you share.
>> ...
>>
>> Best regards,
>> Wolfgang Denk
> 
> Well, that is what I understood you to be asking for, and it worked this 
> past merge window.  That could have been luck, but I suspect not.
> 
> The conflicting requirements are:
> 1) Wolfgang wishes to pull from the subrepo "master" branch
> 2) Subrepository custodians must rebase to pull the latest changes and 
> fix any merge conflicts so that Wolfgang's pulls don't have merge conflicts.
> 
> I don't believe the rebasing will cause problems because the rebasing is 
> pulling from the u-boot.git master repository (or possibly 
> u-boot-testing.git) which is rebuilding the subrepo "uboot" branch to 
> match the u-boot.git master, and then rebasing the subrepo "master" 
> based on the u-boot.git master.  This will make the subrepo "master" 
> *match* the u-boot.git master *plus* append the new patches to be pulled.
> 
> I think the difference with our use vs. the general case that the 
> warning applies to is that the custodians are making their "master" 
> branch conform exactly to the u-boot.git master branch and then adding 
> on the patches to be pulled.

Adding to this thought, rebasing a custodian repo rewrites its history 
*to match the master u-boot.git repo* (and then add to it).  Based on my 
limited knowledge and experience, I think that is a *good* thing.

If we don't "rewrite" our custodian histories to match the master 
u-boot.git repo history, very quickly it will be impossible to compare 
the custodian repo to the master because the patches will be in 
different order.

We are your slaves,
gvb

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 14:03     ` Wolfgang Denk
  2008-01-22 14:26       ` Markus Klotzbücher
@ 2008-01-22 14:38       ` Haavard Skinnemoen
  1 sibling, 0 replies; 25+ messages in thread
From: Haavard Skinnemoen @ 2008-01-22 14:38 UTC (permalink / raw)
  To: u-boot

On Tue, 22 Jan 2008 15:03:45 +0100
Wolfgang Denk <wd@denx.de> wrote:

> As explained before, my idea is that the custodians will merge  their
> code  into the master branch (a) for others to test it and (b) for me
> to pull from. 

And as I've tried to explain, I think those two purposes are
conflicting since having a single branch for everything means either
(a) only code that has already been tested goes into the master branch,
or (b) you get to pull untested code.

Haavard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 14:20       ` Haavard Skinnemoen
@ 2008-01-22 14:42         ` Mike Frysinger
  2008-01-22 16:34         ` Wolfgang Denk
  1 sibling, 0 replies; 25+ messages in thread
From: Mike Frysinger @ 2008-01-22 14:42 UTC (permalink / raw)
  To: u-boot

On Tuesday 22 January 2008, Haavard Skinnemoen wrote:
> I think you'll receive more well-tested code if you allow custodians to
> commit patches to "master" earlier. But this necessarily means either
> being allowed to rebase the "master" branch or using a different branch
> for merging (which only contains code that has spent a fair amount of
> time in the master branch.)
>
> IOW, one branch is for stuff that is ready to merge, the other is for
> the same _plus_ stuff that needs testing. I think using "master" for
> the latter will give the to-be-tested code much more exposure before it
> hits mainline, and that's IMO a good thing.

while i havent gotten into the game just yet, Haavard's scheme makes more 
sense to me and seems to address Wolfgang's desire for usable processor 
trees.  the master branch is never rebased and contains all the latest and 
greatest (and stuff not ready for mainline).  when a custodian wants Wolfgang 
to pull something, they prepare a non-master branch with cleaned up patches 
and all that and asks Wolfgang to pull on that branch.  otherwise there's no 
way to get users to test out patches that should be ok but not ready just yet 
for mainline while at the sametime giving Wolfgang something sane to pull 
from.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20080122/b067f90c/attachment.pgp 

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 14:20       ` Haavard Skinnemoen
  2008-01-22 14:42         ` Mike Frysinger
@ 2008-01-22 16:34         ` Wolfgang Denk
  2008-01-22 18:23           ` Joakim Tjernlund
  2008-01-22 18:39           ` Haavard Skinnemoen
  1 sibling, 2 replies; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22 16:34 UTC (permalink / raw)
  To: u-boot

In message <20080122152035.22f1dffd@dhcp-252-066.norway.atmel.com> you wrote:
>
> Other people (Linus, for example) do not. I guess I'll just have to use
> different workflows for my u-boot and Linux work then...but I'm not
> quite done arguing yet ;-)

I appreciate your comments, really. I don't claim to be  perfect,  on
contrary  -  git is still new to me and I'm trying to find my way. If
it turns out that my ideas are  wong,  or  that  following  my  style
imposes  a  high  and  avoidable  burden to many others I will try to
adapt.

> But the stuff that has been collected may be in completely different
> states of development. Some patches may have pending review comments
> (which showed up after they were committed to the repository.) Some
> patches may need more testing (which they are much more likely to get
> after they have been committed to the repository.)
> 
> When the merge window comes up, the custodian should submit a merge
> request for all the patches that are considered complete and fully
> tested, and this usually involves cherry-picking patches into a freshly
> created branch, making the history non-linear.

I agree, except that my idea would be not to use  a  freshly  created
branch, but master.

> Also, if a bug shows up during testing, it should be folded into the
> original patch before it's merged upstream, or it will break "git
> bisect". This is just not possible if you only want to pull from a
> linear master branch.

When the custodian's repo continues to use  the  master  branch,  and
checks in a commit to fix the bug there, git-bisect should still work
fine.  The difference is that there will be not a single commit for a
"perfect", bug-free patch, but a buggy one plus a fix for the bug.

> How about you do those out-of-band pulls from the master branch (which
> is not to be rebased and may contain stuff that requires more testing)
> and only pull into mainline from the branch specified by the custodian?

I can do this if really needed, but  I  see  trouble  ahead.  I  know
myself.  I  will  see  a  pull  request for repo XXX and pull without
specifying a branch. Only when I will reply to the message after  I'm
done  to  ACK  it  I  will  notice that somewhere near the end of the
message there is a note saying "please pull from  branch  YYY".  This
already happened, so I know what I'm talking about ;-)

> I have no problem with that. I just think that custodians should be
> allowed to specify a different branch than "master" when sending a pull
> request.

If really necessary I will have to adjust to this, but I'd rather
avoid it.

> If you only ever want to pull from the master branch, and the master
> branch can't be rebased, how are we supposed to rebase?

Consider merging into your master branch as the  first  step  of  the
pull  request  - this is the point where you give up control over the
patch. Assume I would pull the very same moment. How  do  you  rebase
after I have pulled from your branch?

> > I don't think that we are different types of users - maybe  from  the
> > kind  of  work  we  do,  but  I  don't  see  why we should access the
> > custodian's repository differently. Actually I think  it's  a  pretty
> > good idea if others test the very same code I will be pulling later.
> 
> Sure, but some patches may require more testing than others.

Agreed. Hold them in testing branches as long  as  testingis  needed.
When they are ready to be merged into mainline, they can go into your
master branch, too. And from there I willpick them up.

> > I think only "small" topic branches should be rebased - this  is  the
> > part of the custodian's work that is needed to clean up the stuff and
> > to  make it ready for mainline merge. The he prepares a branch for me
> > and ofr other users to pull from.
> 
> I think your argument is inconsistent. How is "preparing a branch for
> you to pull" any different from rebasing?

It means rebasing of your working branches so that  they  are  up  to
date  and  don't cause conflicts before merging them into your master
branch.

> I think you'll receive more well-tested code if you allow custodians to
> commit patches to "master" earlier. But this necessarily means either
> being allowed to rebase the "master" branch or using a different branch
> for merging (which only contains code that has spent a fair amount of
> time in the master branch.)

To me, your master branch is your "stable" code. Code that needs more
testing should use a different branch name. Especially  if  you  have
different pots on the fire at the same time.

> IOW, one branch is for stuff that is ready to merge, the other is for
> the same _plus_ stuff that needs testing. I think using "master" for

You may want several independet "testing"  branches,  not  only  one.
master  seems not the best choice to me. I think we should use master
== stable.

> the latter will give the to-be-tested code much more exposure before it
> hits mainline, and that's IMO a good thing.

I understand your position, too. As mentioned above,  I  don't  claim
that my suggestion is perfect or optimal. I developed my own style of
working, others developed theirs. This discussion helps to figure out
how to make co-operation easier. Thanks!

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I often quote myself; it adds spice to my conversation.  - G. B. Shaw

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 14:26       ` Markus Klotzbücher
@ 2008-01-22 16:36         ` Wolfgang Denk
  2008-01-22 22:47           ` Jerry Van Baren
  0 siblings, 1 reply; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22 16:36 UTC (permalink / raw)
  To: u-boot

In message <87myqyx7fp.fsf@denx.de> you wrote:
> 
> Not doing this makes it hard to use git-request-pull to generate these
> cute summaries in case you repeatedly update->merge-a-patch.

You're suppoed to merge it only when you're done with it - see my
previous message: consider merging into your master branch as the
first step of my pulling from your tree.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
The biggest difference between time and space is that you can't reuse
time.                                                 - Merrick Furst

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 16:34         ` Wolfgang Denk
@ 2008-01-22 18:23           ` Joakim Tjernlund
  2008-01-22 18:39           ` Haavard Skinnemoen
  1 sibling, 0 replies; 25+ messages in thread
From: Joakim Tjernlund @ 2008-01-22 18:23 UTC (permalink / raw)
  To: u-boot

> -----Ursprungligt meddelande-----
> Fr?n: u-boot-users-bounces at lists.sourceforge.net [mailto:u-boot-users-bounces at lists.sourceforge.net]
> F?r Wolfgang Denk
> Skickat: den 22 januari 2008 17:35
> Till: Haavard Skinnemoen
> Kopia: U-Boot Users
> ?mne: Re: [U-Boot-Users] Revised custodian git writeup
> 
> In message <20080122152035.22f1dffd@dhcp-252-066.norway.atmel.com> you wrote:
> >
> > Other people (Linus, for example) do not. I guess I'll just have to use
> > different workflows for my u-boot and Linux work then...but I'm not
> > quite done arguing yet ;-)
> 
> I appreciate your comments, really. I don't claim to be  perfect,  on
> contrary  -  git is still new to me and I'm trying to find my way. If
> it turns out that my ideas are  wong,  or  that  following  my  style
> imposes  a  high  and  avoidable  burden to many others I will try to
> adapt.
[SNIP]

This discussion is interesting, but I really would like to see some
new code in u-boot's master branch :)

  Jocke

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 16:34         ` Wolfgang Denk
  2008-01-22 18:23           ` Joakim Tjernlund
@ 2008-01-22 18:39           ` Haavard Skinnemoen
  1 sibling, 0 replies; 25+ messages in thread
From: Haavard Skinnemoen @ 2008-01-22 18:39 UTC (permalink / raw)
  To: u-boot

On Tue, 22 Jan 2008 17:34:49 +0100
Wolfgang Denk <wd@denx.de> wrote:

> In message <20080122152035.22f1dffd@dhcp-252-066.norway.atmel.com>
> you wrote:
> >
> > Other people (Linus, for example) do not. I guess I'll just have to
> > use different workflows for my u-boot and Linux work then...but I'm
> > not quite done arguing yet ;-)
> 
> I appreciate your comments, really. I don't claim to be  perfect,  on
> contrary  -  git is still new to me and I'm trying to find my way. If
> it turns out that my ideas are  wong,  or  that  following  my  style
> imposes  a  high  and  avoidable  burden to many others I will try to
> adapt.

Good. I think I understand your position better now, and I think we
actually agree on the fundamental goals.

> I can do this if really needed, but  I  see  trouble  ahead.  I  know
> myself.  I  will  see  a  pull  request for repo XXX and pull without
> specifying a branch. Only when I will reply to the message after
> I'm done  to  ACK  it  I  will  notice that somewhere near the end of
> the message there is a note saying "please pull from  branch  YYY".
> This already happened, so I know what I'm talking about ;-)

Just triple-click on the line containing the repository URL followed by
the branch name and paste it into your terminal after "git pull".

IIRC, this is why Linus insists that people always put the repository
URL and the branch on the same line in pull requests, and why
git-request-pull does this automatically.

> > If you only ever want to pull from the master branch, and the master
> > branch can't be rebased, how are we supposed to rebase?
> 
> Consider merging into your master branch as the  first  step  of  the
> pull  request  - this is the point where you give up control over the
> patch. Assume I would pull the very same moment. How  do  you  rebase
> after I have pulled from your branch?

Right. This is the way I usually do it, except that I create a fresh
branch from the latest upstream master, and that I consider giving up
control over the patches the moment I send the pull request, not
necessarily when I push.

But these are just details. Your way seems workable too, now that I
understand it fully. Thanks for explaining.

> > > I don't think that we are different types of users - maybe  from
> > > the kind  of  work  we  do,  but  I  don't  see  why we should
> > > access the custodian's repository differently. Actually I think
> > > it's  a  pretty good idea if others test the very same code I
> > > will be pulling later.
> > 
> > Sure, but some patches may require more testing than others.
> 
> Agreed. Hold them in testing branches as long  as  testingis  needed.
> When they are ready to be merged into mainline, they can go into your
> master branch, too. And from there I willpick them up.

Ok. The only issue I have with this approach is that people may be less
likely to test them when they're not in "master". But I guess
announcing things clearly might help -- perhaps by creating a new
"testing" branch when submitting a patch series for review and mention
this in the introductory email.

> > I think you'll receive more well-tested code if you allow
> > custodians to commit patches to "master" earlier. But this
> > necessarily means either being allowed to rebase the "master"
> > branch or using a different branch for merging (which only contains
> > code that has spent a fair amount of time in the master branch.)
> 
> To me, your master branch is your "stable" code. Code that needs more
> testing should use a different branch name. Especially  if  you  have
> different pots on the fire at the same time.
> 
> > IOW, one branch is for stuff that is ready to merge, the other is
> > for the same _plus_ stuff that needs testing. I think using
> > "master" for
> 
> You may want several independet "testing"  branches,  not  only  one.
> master  seems not the best choice to me. I think we should use master
> == stable.

Good point.

> > the latter will give the to-be-tested code much more exposure
> > before it hits mainline, and that's IMO a good thing.
> 
> I understand your position, too. As mentioned above,  I  don't  claim
> that my suggestion is perfect or optimal. I developed my own style of
> working, others developed theirs. This discussion helps to figure out
> how to make co-operation easier. Thanks!

Yes, I think I understand now how I can make this work with only a
couple of minor adjustments to my workflow. Thanks!

Haavard

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 16:36         ` Wolfgang Denk
@ 2008-01-22 22:47           ` Jerry Van Baren
  2008-01-22 23:32             ` Wolfgang Denk
  0 siblings, 1 reply; 25+ messages in thread
From: Jerry Van Baren @ 2008-01-22 22:47 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk wrote:
> In message <87myqyx7fp.fsf@denx.de> you wrote:
>> Not doing this makes it hard to use git-request-pull to generate these
>> cute summaries in case you repeatedly update->merge-a-patch.
> 
> You're suppoed to merge it only when you're done with it - see my
> previous message: consider merging into your master branch as the
> first step of my pulling from your tree.
> 
> Best regards,
> Wolfgang Denk

...but this is a contradiction again.  Quoting from different WD emails:

> As explained before, my idea is that the custodians will merge  their
> code  into the master branch (a) for others to test it and (b) for me
> to pull from. 

> You're suppoed to merge it only when you're done with it - see my
> previous message: consider merging into your master branch as the
> first step of my pulling from your tree.

> To me, your master branch is your "stable" code. Code that needs more
> testing should use a different branch name. Especially  if  you  have
> different pots on the fire at the same time.

1) Master branch is for others to actively base from
2) Master branch is updated just before a pull request
3) No merge conflicts with the u-boot.git repo when Wolfgang pulls it

These appear to be contradictory goals.  #1 and #2 could be argued to 
not be contradictory, but I'm not buying into that theory.  The point of 
people pulling and testing is to find problem, which should be fixed 
*before* a pull request.  If the master branch has broken code in it, 
the broken patch will have to be replaced with a fixed patch (rewriting 
history - oh-oh) or the fix will have to be added as another patch (ugly 
and potentially breaking git-bisect).

I'm not sure what happens (how git handles it) if patches are applied in 
different orders.  What I'm thinking about is if custodians #1 and #2 
both issue a pull request.  Wolfgang pulls #1 and then #2.  What happens 
to #2 when he does a merge with the master u-boot.git?  Does git insert 
custodian #1 patches ahead of his existing (#2) patches, or do the 
patches end up in a different order in the repos?

Then there is the merge conflict, which will be a result of the order 
that Wolfgang pulls from the custodian repos.  How does a custodian 
resolve a merge conflict without changing his branch's history?

In my mind, custodian repos should be (must be?) faithful slaves of the 
master u-boot.git repo - always the current u-boot.git + "value added" 
(to the best of the custodian's ability to keep up with Wolfgang ;-). 
The custodian always keeps the "value added" patches at the tip of the 
tree so that they are clearly identified.

Third party developers can clone u-boot.git, create a branch and pull 
the custodian's "value added" branch (master or otherwise), and merge or 
cherry-pick the "value added" patches.  While we have not poked into the 
dark corners of this technique, Kim, Kumar, myself, and Wolfgang 
(unwittingly for Wolfgang) have done this and it has Just Worked[tm].

-------

FWIIW, my repo seems to have worked fine in this merge window.  I 
actually have two u-boot-fdt repos: a "mirror" copy I synchronize 
against git://www.denx.de/git/u-boot-fdt.git nightly and a working repo 
(with local branches).  This allows me to watch what is officially 
advertised, allows me to recover if I shit my working repo.

1) I rebased my working repo against u-boot.git, pushed my "master" 
branch to denx.de, then issued a pull request.
  * My "to pull" patches were at the tip of the tree

2) Wolfgang pulled my changes into u-boot.git

3) I did the rebase of my working repo using a "uboot" branch to pull 
the lastest u-boot.git changes and then rebasing my working repo's 
"mster" branch.  I did that just now, so it has all of everybody's changes.

4) I pushed my working repo's master branch back to denx.de - my 
custodian repo now matches the master u-boot.git repo (not verified 
bit-for-bit, but it appears to be done right).

5) I pulled git://www.denx.de/git/u-boot-fdt.git into my "mirror" copy.

All of this Just Worked[tm] with no errors.  While it could be argued 
that I rewrote history with my rebasing, I believe this is a good thing 
- all of our repos should match (at least on the master branches) and 
IMHO all of our histories should match at the point that the merge 
window closes.  Emperically, git handled this "history rewriting" with 
no (apparent) errors.

-------

I've added a link "Intro to Distributed Version Control (Illustrated)" 
to the Custodian page:
<http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/>

This is somewhat helpful, but doesn't talk about what happens to the 
custodian repositories after the patches are pulled into the master 
repository.

Best regards,
gvb
(going home to soak my brain in ethanol)

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 22:47           ` Jerry Van Baren
@ 2008-01-22 23:32             ` Wolfgang Denk
  2008-01-23  3:15               ` gvb.uboot
  2008-01-23 12:04               ` Martin Krause
  0 siblings, 2 replies; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-22 23:32 UTC (permalink / raw)
  To: u-boot

In message <4796726E.9030501@ge.com> you wrote:
>
> 1) Master branch is for others to actively base from

others = mostly users aka non-developers

> 2) Master branch is updated just before a pull request

not necessarily only then, but updates should contain code that is
considered to be "good" from the custodian's point of view

> 3) No merge conflicts with the u-boot.git repo when Wolfgang pulls it

Ideally, yes.

> These appear to be contradictory goals.  #1 and #2 could be argued to 
> not be contradictory, but I'm not buying into that theory.  The point of 
> people pulling and testing is to find problem, which should be fixed 
> *before* a pull request.  If the master branch has broken code in it, 

Agreed. Please see previous messages.  My  idea  is  that  the  maste
rbranch  can  be  consider as kind of a "stable" branch - it is ahead
compared to the main repo in regards to the the  custodian's  special
topic,  but  considered stable. For testing, other branches should be
used (probably with an explicit "-testing" in their name).

> I'm not sure what happens (how git handles it) if patches are applied in 
> different orders.  What I'm thinking about is if custodians #1 and #2 

git has no notation of order or sequence. It is storing content only.
If you apply  N  independent,  non-overlapping  patches  in  arbitray
order,  the result will be the same. The individual commits will have
different ID's, but who cares?

> both issue a pull request.  Wolfgang pulls #1 and then #2.  What happens 
> to #2 when he does a merge with the master u-boot.git?  Does git insert 
> custodian #1 patches ahead of his existing (#2) patches, or do the 
> patches end up in a different order in the repos?

It doesn't matter as long as there are no conflicts.

> Then there is the merge conflict, which will be a result of the order 
> that Wolfgang pulls from the custodian repos.  How does a custodian 
> resolve a merge conflict without changing his branch's history?

That's a good point. I have to think about that one...

> (going home to soak my brain in ethanol)

The brain or the liver?

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Deliver yesterday, code today, think tomorrow."

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 23:32             ` Wolfgang Denk
@ 2008-01-23  3:15               ` gvb.uboot
  2008-01-23 12:04               ` Martin Krause
  1 sibling, 0 replies; 25+ messages in thread
From: gvb.uboot @ 2008-01-23  3:15 UTC (permalink / raw)
  To: u-boot

Wolfgang Denk wrote:
> In message <4796726E.9030501@ge.com> you wrote:

[snip]

>> I'm not sure what happens (how git handles it) if patches are applied in 
>> different orders.  What I'm thinking about is if custodians #1 and #2 
> 
> git has no notation of order or sequence. It is storing content only.
> If you apply  N  independent,  non-overlapping  patches  in  arbitray
> order,  the result will be the same. The individual commits will have
> different ID's, but who cares?
> 
>> both issue a pull request.  Wolfgang pulls #1 and then #2.  What happens 
>> to #2 when he does a merge with the master u-boot.git?  Does git insert 
>> custodian #1 patches ahead of his existing (#2) patches, or do the 
>> patches end up in a different order in the repos?
> 
> It doesn't matter as long as there are no conflicts.

I haven't played with git to see what it does with patches in different 
orders, but I'm not happy if my history doesn't match your history, it 
makes it tremendously harder to do comparisons of a custodian vs. the 
master repo.  If the two are the same, not a big deal.  If I need to 
figure out why they are different... OUCH.

>> Then there is the merge conflict, which will be a result of the order 
>> that Wolfgang pulls from the custodian repos.  How does a custodian 
>> resolve a merge conflict without changing his branch's history?
> 
> That's a good point. I have to think about that one...

OK, I probably should confess that that was mostly a strawman.

>> (going home to soak my brain in ethanol)
> 
> The brain or the liver?

The brain, the liver is unfortunate collateral damage.  Wish I could 
change history on that!  ;-)

> Best regards,
> 
> Wolfgang Denk

Best regards,
gvb

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-22 23:32             ` Wolfgang Denk
  2008-01-23  3:15               ` gvb.uboot
@ 2008-01-23 12:04               ` Martin Krause
  2008-01-23 12:47                 ` Wolfgang Denk
  1 sibling, 1 reply; 25+ messages in thread
From: Martin Krause @ 2008-01-23 12:04 UTC (permalink / raw)
  To: u-boot

u-boot-users-bounces at lists.sourceforge.net wrote on :
> > I'm not sure what happens (how git handles it) if patches are
> > applied in different orders.  What I'm thinking about is if
> > custodians #1 and #2 
> 
> git has no notation of order or sequence. It is storing content only.
> If you apply  N  independent,  non-overlapping  patches  in  arbitray
> order,  the result will be the same. The individual commits will have
> different ID's, but who cares?

Huh? Normally the commit IDs are the most important thing I care about
when working with other git repositories. If I try to compare my
git repositroy with another one (mostly the u-boot master branch at
denx) then the commit ID is the only way (I know) to make sure that
my respository contains the exactly same patches than the other
repository. If the topmost patch (or any other) in my respository has
the same commit ID as a patch in the other repository i know for sure,
that my and the other repository are exactly the same (from the
beginnig till the compared patch). If the commit IDs in my repository
have no correspondent in the other repository (because the order of
the patches is different), I know nothing. Even if I find a patch 
with the same commit message, I don't know for sure if the patches 
are the same. Maybe in the other repository is the original patch and
in my repository is an updated version (with the same commit message).
I don't know. 

As far as I understand the git philosophy, using SHA1 signatures as
commit IDs was one of the most important things on git. IMO the goal
behind that was to be able to refere to one particular state in a
git repository by one single commit ID. If I have two git repositories
with de facto the same content, but with different commit IDs, what's
the worth of the SHA1 commit ID?

I often use for example the (partial) commit ID in the U-Boot boot
message to identify from wich particular source state a U-Boot was
built. This only works, if the order of patches is the same in all
git repositories resulting in the same commit IDs. Otherwise I need
to know from wich git repository the U-Boot was built, to identify
the source state it was built from. And then I can't compare this
repository to another (e. g. the denx master), because the same
patches could have different commit IDs. 

I tried this already some time ago (merging my u-boot-tq-group
master branch, instead of rebasing) and get totally lost in a
screwed up history. But maybe I did something wrong.

Best Regards,
Martin Krause

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-23 12:04               ` Martin Krause
@ 2008-01-23 12:47                 ` Wolfgang Denk
  2008-01-23 17:27                   ` Martin Krause
  0 siblings, 1 reply; 25+ messages in thread
From: Wolfgang Denk @ 2008-01-23 12:47 UTC (permalink / raw)
  To: u-boot

In message <47F3F98010FF784EBEE6526EAAB078D10635DDB0@tq-mailsrv.tq-net.de> you wrote:
>
> Huh? Normally the commit IDs are the most important thing I care about
> when working with other git repositories. If I try to compare my
> git repositroy with another one (mostly the u-boot master branch at
> denx) then the commit ID is the only way (I know) to make sure that
> my respository contains the exactly same patches than the other
> repository. If the topmost patch (or any other) in my respository has

But this does not work.

Assume you and me start with absolutely identical copies of the same
git repository - say we copied a disk.

Now we both check in the very same patch from the mailing list using
for example git-am. You will see that we get two different commit IDs.

Even if you try to do this twice to identical copies of the git repo
you will get different IDs:

-> rm -fr foo
-> tar zxf foo.tgz ; cd foo ; echo x >xxx ; git-add xxx; git-commit -m test
Created commit 8c934ae: test
 1 files changed, 1 insertions(+), 1 deletions(-)
-> cd ..
-> rm -fr foo
-> tar zxf foo.tgz ; cd foo ; echo x >xxx ; git-add xxx; git-commit -m test
Created commit b5ae18e: test
 1 files changed, 1 insertions(+), 1 deletions(-)
-> cd ..
-> rm -fr foo
-> tar zxf foo.tgz ; cd foo ; echo x >xxx ; git-add xxx; git-commit -m test
Created commit 56eb723: test
 1 files changed, 1 insertions(+), 1 deletions(-)

You see? Three identical commits, three different commit IDs.

> As far as I understand the git philosophy, using SHA1 signatures as
> commit IDs was one of the most important things on git. IMO the goal

Yes, of course. And the SHA1's of the *objects*  are  of  course  the
same.  But the commit IDs may be different - they include for example
the commiter's name and time etc., so they  will  be  different  even
when  you  do  the  very same action again in the very same copy of a
repository. See above.

Note that git is tracking content, not history.

> behind that was to be able to refere to one particular state in a
> git repository by one single commit ID. If I have two git repositories
> with de facto the same content, but with different commit IDs, what's
> the worth of the SHA1 commit ID?

You can still compare the commits. Just not the commit IDs.

> I often use for example the (partial) commit ID in the U-Boot boot
> message to identify from wich particular source state a U-Boot was

This is OK, as long as you are referring to some repository for which
you have a guarantee that the history will not be rewritten.

> built. This only works, if the order of patches is the same in all
> git repositories resulting in the same commit IDs. Otherwise I need

No, this has nothing to do with that.

> to know from wich git repository the U-Boot was built, to identify

Yes, of course you need to know that. As soon as you  are  working  n
your own tree it may have commits that are present nowhere else. Only
as  long  as you are referring to a known common history you can make
references to another repo.

> the source state it was built from. And then I can't compare this
> repository to another (e. g. the denx master), because the same
> patches could have different commit IDs. 

But they will result in the very same  content  (objcts  in  the  git
repo), and git is tracking the content, not the commit ID.

> I tried this already some time ago (merging my u-boot-tq-group
> master branch, instead of rebasing) and get totally lost in a
> screwed up history. But maybe I did something wrong.

Most probably (or this was with older versions of the tools - as
mentioned before, I screwed up more than one repo before ;-)

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
e-credibility: the non-guaranteeable likelihood that  the  electronic
data you're seeing is genuine rather than somebody's made-up crap.
- Karl Lehenbauer

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-23 12:47                 ` Wolfgang Denk
@ 2008-01-23 17:27                   ` Martin Krause
  2008-01-23 17:30                     ` Haavard Skinnemoen
  0 siblings, 1 reply; 25+ messages in thread
From: Martin Krause @ 2008-01-23 17:27 UTC (permalink / raw)
  To: u-boot

wd at denx.de wrote on Wednesday, January 23, 2008 1:48 PM:
> In message
> <47F3F98010FF784EBEE6526EAAB078D10635DDB0@tq-mailsrv.tq-net.de> you
> wrote:  
> > 
> > Huh? Normally the commit IDs are the most important thing I care
> > about when working with other git repositories. If I try to compare
> > my 
> > git repositroy with another one (mostly the u-boot master branch at
> > denx) then the commit ID is the only way (I know) to make sure that
> > my respository contains the exactly same patches than the other
> > repository. If the topmost patch (or any other) in my respository
> > has 
> 
> But this does not work.
> 
> Assume you and me start with absolutely identical copies of the same
> git repository - say we copied a disk.
> 
> Now we both check in the very same patch from the mailing list using
> for example git-am. You will see that we get two different commit IDs.

Agreed

> Even if you try to do this twice to identical copies of the git repo
> you will get different IDs:

Agreed

> You see? Three identical commits, three different commit IDs.

But if I rebase my repository with yours, my patch will go away (or at
least stay on top of my repository as an empty commit, I'm not sure
about that) and our repositories are identical again (= identical 
history). But if I merge my repository with yours they are not 
identical afterwards. Content yes, history no. And worse, I have
no chance to ever get history identical again (without rebasing).

> > As far as I understand the git philosophy, using SHA1 signatures as
> > commit IDs was one of the most important things on git. IMO the goal
> 
> Yes, of course. And the SHA1's of the *objects*  are  of  course  the
> same.  But the commit IDs may be different - they include for example
> the commiter's name and time etc., so they  will  be  different  even
> when  you  do  the  very same action again in the very same copy of a
> repository. See above.
> 
> Note that git is tracking content, not history.

As far as I know every commit has an parent. And this parent (its ID)
is part of the commit. So history is been tracked as a list of 
successive commits. Another order of the commits leads to another
history and to another commit IDs.

Excerpt from the git README:

Furthermore, since the SHA1 signature of a commit refers to the
SHA1 signatures of the tree it is associated with and the signatures
of the parent, a single named commit specifies uniquely a whole set
of history, with full contents.  You can't later fake any step of the
way once you have the name of a commit.

> > behind that was to be able to refere to one particular state in a
> > git repository by one single commit ID. If I have two git
> > repositories with de facto the same content, but with different
> > commit IDs, what's the worth of the SHA1 commit ID?
> 
> You can still compare the commits. Just not the commit IDs.

How can I do that?

> > I often use for example the (partial) commit ID in the U-Boot boot
> > message to identify from wich particular source state a U-Boot was
> 
> This is OK, as long as you are referring to some repository for which
> you have a guarantee that the history will not be rewritten.

No, it does not matter, if the history was rewritten. If I find a 
repository which contains this commit ID, I can be sure that I could 
restore the exact soucre code the U-Boot was built from (this does not
work for sure, because the commit ID in the U-Boot boot message is
only a partial commit ID, but it will work if I would have the
complete commit ID). The chance, that a repository with a rewritten
history will contain this commit ID is lower, admitted. 

> > built. This only works, if the order of patches is the same in all
> > git repositories resulting in the same commit IDs. Otherwise I need
> 
> No, this has nothing to do with that.
> 
> > to know from wich git repository the U-Boot was built, to identify
> 
> Yes, of course you need to know that. As soon as you  are  working  n
> your own tree it may have commits that are present nowhere else. Only
> as  long  as you are referring to a known common history you can make
> references to another repo.

If I rebase my tree with the public tree my commits will always stay 
on top of the "known common history". The differences between my and 
the public repository are easily recognizeable (e. g. with qgit). If I 
merge my tree with the public tree I get a mixture of history. I don't
know a way, how I could get the differences then (but this does not
necceseraly mean, that there is no way).

> > the source state it was built from. And then I can't compare this
> > repository to another (e. g. the denx master), because the same
> > patches could have different commit IDs.
> 
> But they will result in the very same  content  (objcts  in  the  git
> repo), and git is tracking the content, not the commit ID.

I disagree, see above.

> > I tried this already some time ago (merging my u-boot-tq-group
> > master branch, instead of rebasing) and get totally lost in a
> > screwed up history. But maybe I did something wrong.
> 
> Most probably (or this was with older versions of the tools - as
> mentioned before, I screwed up more than one repo before ;-)

I'm using git 1.5.3.rc6.

Best regards,
Martin Krause

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [U-Boot-Users] Revised custodian git writeup
  2008-01-23 17:27                   ` Martin Krause
@ 2008-01-23 17:30                     ` Haavard Skinnemoen
  0 siblings, 0 replies; 25+ messages in thread
From: Haavard Skinnemoen @ 2008-01-23 17:30 UTC (permalink / raw)
  To: u-boot

On Wed, 23 Jan 2008 18:27:11 +0100
"Martin Krause" <Martin.Krause@tqs.de> wrote:

> > > behind that was to be able to refere to one particular state in a
> > > git repository by one single commit ID. If I have two git
> > > repositories with de facto the same content, but with different
> > > commit IDs, what's the worth of the SHA1 commit ID?  
> > 
> > You can still compare the commits. Just not the commit IDs.  
> 
> How can I do that?

Use the SHA1 of the top-level tree instead of the commit. Or just use
git diff.

Haavard

^ permalink raw reply	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2008-01-23 17:30 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-22  1:44 [U-Boot-Users] Revised custodian git writeup gvb.uboot
2008-01-22  7:52 ` Markus Klotzbücher
2008-01-22  8:55 ` Wolfgang Denk
2008-01-22  9:50   ` Haavard Skinnemoen
2008-01-22 13:45     ` Wolfgang Denk
2008-01-22 14:20       ` Haavard Skinnemoen
2008-01-22 14:42         ` Mike Frysinger
2008-01-22 16:34         ` Wolfgang Denk
2008-01-22 18:23           ` Joakim Tjernlund
2008-01-22 18:39           ` Haavard Skinnemoen
2008-01-22 13:50     ` Jerry Van Baren
2008-01-22 14:10       ` Wolfgang Denk
2008-01-22 13:32   ` Jerry Van Baren
2008-01-22 14:03     ` Wolfgang Denk
2008-01-22 14:26       ` Markus Klotzbücher
2008-01-22 16:36         ` Wolfgang Denk
2008-01-22 22:47           ` Jerry Van Baren
2008-01-22 23:32             ` Wolfgang Denk
2008-01-23  3:15               ` gvb.uboot
2008-01-23 12:04               ` Martin Krause
2008-01-23 12:47                 ` Wolfgang Denk
2008-01-23 17:27                   ` Martin Krause
2008-01-23 17:30                     ` Haavard Skinnemoen
2008-01-22 14:38       ` Haavard Skinnemoen
2008-01-22 14:35     ` Jerry Van Baren

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox