All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: bitbake-devel <bitbake-devel@lists.openembedded.org>
Cc: "Ashfield, Bruce" <Bruce.Ashfield@windriver.com>,
	"Hart, Darren" <darren.hart@intel.com>
Subject: [PATCH] fetch2/git: Add workaround for clone using alternates problem
Date: Tue, 31 Jan 2012 14:18:56 +0000	[thread overview]
Message-ID: <1328019536.13744.28.camel@ted> (raw)

To quote my report of this to the git mailing list:
"""
    
    I have a problem with git clone commands using alternates failing by
    mixing up different repositories. I have a situation where I could end
    up with both:
    
    /srv/mirrors/repo
    /srv/mirrors/repo.git
    
    as bare clones.
    
    I then try cloning "repo" with alternates with the command:
    
    $ git clone -s -n /srv/mirrors/repo /tmp/foo
    Cloning into /tmp/foo...
    done.
    
    $ cat /tmp/foo/.git/objects/info/alternates
    /srv/mirrors/repo.git/objects
    
    Note how I'm now referencing repo.git, not repo. This doesn't work as
    expected giving some very bizarre results when actually using the
    repository.
    
    I appreciate this is a rather bizarre corner case but its one that is
    breaking the build system I work with. Ideally people would use a
    consistent URL for the same repository but we have an example where they
    haven't and this really shouldn't break like this.
    
    Looking at the code, the cause seems to be
    
    clone.c:get_repo_path():
            static char *suffix[] = { "/.git", ".git", "" };
    
    since its looking in order for:
     repo/.git (fails)
     repo.git (suceeds, incorrect)
     repo (never looked at)
    
    I'm not sure what would break if that order were to change, swapping the
    last two options.
    
    I can "force" the issue by running:
    
    git clone -s -n /srv/mirrors/repo/ /tmp/foo
    
    but this results in the slightly odd looking:
    
    $ cat /tmp/foo/.git/objects/info/alternates
    
    /srv/mirrors/repo//objects
    
    which does at least work.
"""
    
This patch adds the trailing slash to ensure the correct repository is
referenced at the expense of some ugliness in the alternates file.
    
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>

diff --git a/lib/bb/fetch2/git.py b/lib/bb/fetch2/git.py
index d833714..fb0260a 100644
--- a/lib/bb/fetch2/git.py
+++ b/lib/bb/fetch2/git.py
@@ -220,7 +220,7 @@ class Git(FetchMethod):
         if os.path.exists(destdir):
             bb.utils.prunedir(destdir)
 
-        runfetchcmd("git clone -s -n %s %s" % (ud.clonedir, destdir), d)
+        runfetchcmd("git clone -s -n %s/ %s" % (ud.clonedir, destdir), d)
         if not ud.nocheckout:
             os.chdir(destdir)
             if subdir != "":




             reply	other threads:[~2012-01-31 14:26 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-31 14:18 Richard Purdie [this message]
2012-01-31 14:29 ` [PATCH] fetch2/git: Add workaround for clone using alternates problem Bruce Ashfield

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1328019536.13744.28.camel@ted \
    --to=richard.purdie@linuxfoundation.org \
    --cc=Bruce.Ashfield@windriver.com \
    --cc=bitbake-devel@lists.openembedded.org \
    --cc=darren.hart@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.