Re: [PATCH 0/4] Pulling refs files
From: Daniel Barkalow <hidden>
Date: 2016-06-15 22:41:57
On Tue, 17 May 2005, Petr Baudis wrote:
Dear diary, on Sun, May 15, 2005 at 05:23:18AM CEST, I got a letter where Daniel Barkalow [off-list ref] told me that...quoted
On Sat, 14 May 2005, Petr Baudis wrote:quoted
So what about just something like git-wormhole-pull remote:refs/head/master wormhole://localhost/ That is, you could just specify remote:path_relative_to_url instead of SHA1 id as the commit.Do you have any sensible alternatives to "remote:refs/<something>" in mind? I suppose that "remote:HEAD" would also work. How are you thinking of having the value get written locally?Anything that gets eventually wound up in the info/ directory. (The name of the ignore file saved in info/ignore is the current hit.)
Hmm... maybe the right thing is to make the implementation-provided transfer code handle arbitrary things in GIT_DIR, but have code for updating reference files atomically and using a reference file to start from use "refs/"? Certainly, there's nothing special about reference files in transit. Certainly the things in the info/ directory shouldn't be treated a head that you're going to pull, so that has to be different above the protocol level anyway.
Well, it'd be again nice to have some generic mechanism for this so that the user could theoretically push over rsync too or something (although that'll be even more racy, it is fine for single-user repository).
Hmm; I'm not sure what would be good for interfacing with rsync.
I think the remote file to write the value inside should be porcelain business.
Certainly it's porcelain business what remote file to write; but I think it has to be core business doing the lock, test, and update. I think it would be inconvenient to go back to the porcelain layer in the middle of the operation, particularly since it would have to go back to the core, which is what has the connection to the remote host.
What you should always check though is that before the pull (and after the locking) the value in that file is the same as the "push base". This way you make sure that you are still following a single branch and in case of multiuser repositories that you were fully merged before pushing.
So the remote receiver should get an instruction: change X from OLD to NEW and pull NEW. It should: - lock the file against further updates - check that the current value is the provided OLD - pull the necessary objects - write NEW to the file - report success On failure of any step, it should unlock the file without changing it. -Daniel *This .sig left intentionally blank*