D Programming Language source (dmd, phobos, etc.) has moved to github

Nick Sabalausky a at a.a
Tue Jan 25 16:36:41 PST 2011


"Robert Clipsham" <robert at octarineparrot.com> wrote in message 
news:ihnk80$fsf$1 at digitalmars.com...
> On 25/01/11 22:28, Nick Sabalausky wrote:
>> I don't understand why you think I'm claiming anything of the sort. I 
>> never
>> said anything like that. I keep saying over and over and over and over 
>> and
>> over and over and over....."changeset number **PLUS WHICH REPOSITORY (and
>> maybe branch, depending how the given system chooses to work)**"
>
> Person A has a repository with one branch, 'default' and has made two 
> commits. The current revision number is 1.
> Person B clones the repository and creates a branch, 'ver2', and makes two 
> commits. The revision number in his repository is now 3, it is still 1 in 
> person A's.
> Person A makes a commit, his revision 2. B switches back to the 'default' 
> branch, and makes another commit.  His revision 4. A pulls from the 
> default branch, now B's revision 4 == A's revision 3.
>
> It's very easy for the revision numbers to get out of sync like this.

Right, I already understood all of that. But consider the following scenario 
(And I realize that neither Hg nor Git work exactly like this, but until 
Lutger mentioned the extra details in "git describe --tags" it sounded like 
Git was much further away from this than Hg is):

Adam starts a repository:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp

It's Adam's project, so that could be considered the main "official" repo. 
Adam makes five commits in the default "default" branch. His current 
revision is:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp/default/4

Behind the scenes, that revision is associated with an SHA-1 hash of 
"df3a9...". This same revision, thus, could also be referred to as:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp/hashes/df3a9...

But usually that's only used behind-the-scenes. Adam never cares about it 
and neither do any of the other SuperApp contributors. But the DVCS often 
uses it internally. (Are the hashes normally assiciated with a specific 
branch? If so, then just consider it "SuperApp/default/hashes/df3a9..." 
instead of "SuperApp/hashes/df3a9...").

Now, along comes Bob who clones Adam's SuperApp repo. Bob's copy of the same 
revision is:

    dvcs://joes-fancy-dvcs-hosting.org/users/Bob/SuperApp/default/4

Naturally, he also has the same hash as Adam:

    dvcs://joes-fancy-dvcs-hosting.org/users/Bob/SuperApp/hashes/df3a9...

Then Adam and Bob start making commits, updates, pushes, pulls, etc, and 
their revision numbers get out-of-sync. Adam and Bob are talking on a 
newsgroup, and Adam mentions a super-cool improvement he just committed:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp/default/81

Adam doesn't know this, but that just happens to have the hash "78ac1..." 
and thus be AKA:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp/hashes/78ac1...

Bob wants Adam's new change, so he tells his DVCS to merge in:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp/default/81

No problem. Bob didn't ask his DVCS for "r81", he asked it for "Adam's r81". 
This revision now becomes Bob's:

    dvcs://joes-fancy-dvcs-hosting.org/users/Bob/SuperApp/default/117
    dvcs://joes-fancy-dvcs-hosting.org/users/Bob/SuperApp/hashes/78ac1...

Since Adam announced this on a NG, Carlos also saw it and grabbed the new 
change:

    dvcs://carlos-coder.co.uk/SuperApp/default/94
    dvcs://carlos-coder.co.uk/SuperApp/hashes/78ac1...

They all start to use it, but Bob discovers a critical problem with it. So 
Bob tells the NG to avoid:

    dvcs://joes-fancy-dvcs-hosting.org/users/Adam/SuperApp/default/81

Or, Bob might have referred to it with his own revision instead (Maybe 
Adam's account was temporarily down):

    dvcs://joes-fancy-dvcs-hosting.org/users/Bob/SuperApp/default/117

So Carlos tells his DVCS to revert that URI. To do this, Carlos's DVCS looks 
up Adam's or Bob's URI and finds the associated hash: "78ac1...". Then it 
looks at Carlos's own copy of the repo, sees the active branch is "default", 
and finds the revision in "default" associated with the hash "78ac1...", 
which is:

    dvcs://carlos-coder.co.uk/SuperApp/default/94

Which then gets reverted.





More information about the Digitalmars-d-announce mailing list