Hello,

There was weird problem with android git mirror again
(https://android-build.linaro.org/jenkins/job/patrik-ryd_lt-panda/4/consoleFull):

error: revision tilt-linaro-android.38 in
git.linaro.org/people/andygreen/kernel-tilt not found Archiving
artifacts Finished: FAILURE

This was 100% reproducible, but that revision exists in the git
repository on git.linaro.org, and actually it's being mirrored, as 

git clone
git://us-east-1.ec2-git-mirror.linaro.org/git.linaro.org/people/andygreen/kernel-tilt

Worked pretty well. But "repo sync" gave the error above, which well,
pointed at some repo peculiarity.

There were similar issues already, with newly added git repos which
lacked master branch. Adding master branch seemed to solve the issue.
But kernel-tilt had master branch.

So, I for some time suspected that repo --mirror we use for mirroring
doesn't make faithful enough mirror of git forest, and this time
decided to dig out what is known about it. 

First of all, while there's no --verbose or --debug switch for the
repo, it's possible to make it dump git commands it executes by setting
"REPO_TRACE=1" in the environment. I verified that very same git
command, when run directly against git.linaro.org, works well, but
leads to repo error quoted above if run against mirror.

I then googled for known issues with repo --mirror, couldn't find much,
but there're few reports of obscure issues:

http://groups.google.com/group/repo-discuss/browse_thread/thread/b97524988360b029

This is even more interesting, with Google people confirming that repo
--mirror works within some bounds and limitations:

http://groups.google.com/group/repo-discuss/browse_thread/thread/401656c3ad0a4a0c

Finally, here's typical usage scenario for repo --mirror (which is
pretty underdocumented):

http://www.excentral.org/archives/2011/02/24/android-repo-mirroring

So, like "repo help init" says, mirror created with repo --mirror
should later be used with repo --reference, with both mirror and
checkout using it to be located on local filesystem. I couldn't find
referenced that repo --mirror is intended for use like we do - to serve
it using git-daemon.

My next step was trying to do real git mirror (git clone --mirror), and
already did it and prepared to move it into intended location, when I
did ls -l in the mirror directory:

drwxr-xr-x 7 git-mirror nogroup 4096 2011-06-02 00:11 kernel-tilt.git
drwxr-xr-x 7 git-mirror nogroup 4096 2011-06-01 12:30 kernel-tilt.git.git

Once I moved that ".git.git" repo away, original issue with repo sync
resolved. I have no idea that double-.git repo was created. Based on
the timestamp, it was created first, and later barely updated, with
mirror and just git clone using the proper repo, while repo sync on the
build slave managing to pick up wrong one. I wonder, if that (creation
of 2 repos) could be a result of some race condition.

And I wish this issue could be called resolved, but as quoted above,
there're (more) issues are known with git --mirror, so I decided to put
up this mail with the links, for the next time such issues may come.


-- 
Best Regards,
Paul

_______________________________________________
linaro-dev mailing list
linaro-dev@lists.linaro.org
http://lists.linaro.org/mailman/listinfo/linaro-dev

Reply via email to