git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC] Build in clone

From
Johan Herland <johan@herland.net>
Date
Feb 26, 2008, 12:19 UTC
Message-ID
<200802261319.41862.johan@herland.net>
In-Reply-To
<alpine.LSU.1.00.0802261111460.17164@racer.site>
On Tuesday 26 February 2008, Johannes Schindelin wrote:
Show 16 quoted lines
> Hi,
> 
> On Tue, 26 Feb 2008, Johan Herland wrote:
> 
> > On Monday 25 February 2008, Daniel Barkalow wrote:
> > > This version is still a mess, but it passes all of the tests.
> > 
> > Not for me:
> > *** t5700-clone-reference.sh ***
> > *   ok 1: preparing first repository
> > *   ok 2: preparing second repository
> > * FAIL 3: cloning with reference (-l -s)
> >         git clone -l -s --reference B A C
> 
> Which machine?  What is your base (next or master)?  What does the verbose 
> output look like?

I'm at work now (with a different machine), and when I try to reproduce I get either 4 errors (with "make test") or 7 errors (with "sh ./t5700-clone-reference.sh"). See [1] for verbose output. This is with next (v1.5.4.3-342-g99e8cb6) + Daniel's patch on a 64-bit Gentoo Linux on top of Intel Core 2 Duo with 4GB RAM. My home box is similar (Quad instead of Duo). Without Daniel's patch, the entire test suite passes.

Show 12 quoted lines
> > diff --git a/builtin-clone.c b/builtin-clone.c
> > index 5aa75e1..7eed340 100644
> > --- a/builtin-clone.c
> > +++ b/builtin-clone.c
> > @@ -1,7 +1,7 @@
> >  /*
> >   * Builtin "git clone"
> >   *
> > - * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com>
> > + * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com>
> 
> This is almost certainly wrong.
Yes. But the intent is valid: His name should be in UTF-8; not i latin-1.
Show 18 quoted lines
> > @@ -79,7 +79,7 @@ static char *get_repo_path(const char *repo)
> >  
> >  	if (!stat(repo, &buf) && S_ISDIR(buf.st_mode))
> >  		return xstrdup(make_absolute_path(repo));
> > -	
> > +
> 
> Trailing whitespace.  Okay.
> 
> > @@ -347,6 +347,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
> >  	char *path, *dir, *head, *ref_temp;
> >  	struct ref *refs, *r, *remote_head, *head_points_at, *remote_master;
> >  	char branch_top[256], key[256], refname[256], value[256];
> > +	struct strbuf reflog_msg;
> > +
> > +	git_config(git_default_config);
> 
> Good catch.
Thanks.
Show 9 quoted lines
> > @@ -495,7 +501,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
> >  	if (!remote_head) {
> >  		/* If there isn't one, oh well. */
> >  	} else if (remote_master && !hashcmp(remote_master->old_sha1,
> > -				      remote_head->old_sha1)) {
> > +					     remote_head->old_sha1)) {
> 
> I am not so sure about this change.  It is unneeded, and distracts from 
> the rest.

Yes, if this were meant for inclusion, I'd agree. However, as I originally stated above the patch, this was pretty much a verbatim dump of my buffers with the immediate issues I found. It was meant as (hopefully useful) feedback to Daniel, and not for any kind of consumption by git proper.

Still, I should probably have taken the extra minute to filter out unneeded whitespace churn.

Have fun! :)
...Johan
[1] Verbose output from t5700-clone-reference.sh:
$ ./t5700-clone-reference.sh --verbose
* expecting success: test_create_repo A && cd A &&
echo first > file1 &&
git add file1 &&
git commit -m initial
Created initial commit 8c40535: initial
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file1
*   ok 1: preparing first repository
* expecting success: git clone A B && cd B &&
echo second > file2 &&
git add file2 &&
git commit -m addition &&
git repack -a -d &&
git prune
Initialize B/.git
Initialized empty Git repository in B/.git/
Okay
Get for /home/johanh/git-test/git/t/trash/A/.git
0x714f50
HEAD
refs/heads/master
work tree now /home/johanh/git-test/git/t/trash/B
Created commit 4f5d964: addition
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file2
Counting objects: 6, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 0 (delta 0)
*   ok 2: preparing second repository
* expecting success: git clone -l -s --reference B A C
Initialize C/.git
Initialized empty Git repository in C/.git/
Okay
Wrote /home/johanh/git-test/git/t/trash/B/.git/objects
 to C/.git/objects/info/alternates
4f5d96490c0371a2814efb3203ed699ef4814fda -> C/.git/refs/reference-tmp/4f5d96490c0371a2814efb3203ed699ef4814fda
error: refs/remotes/origin/HEAD does not point to a valid object!
error: Z;n�+ does not point to a valid object!
error: Z;n�+ does not point to a valid object!
error: �p does not point to a valid object!
error: Z;n�+ does not point to a valid object!
error: Z;n�+ does not point to a valid object!
error: Y;n�+ does not point to a valid object!
error: q does not point to a valid object!
./test-lib.sh: line 193: 32376 Segmentation fault      git clone -l -s --reference B A C
* FAIL 3: cloning with reference (-l -s)
        git clone -l -s --reference B A C
* expecting success: test `wc -l <C/.git/objects/info/alternates` = 2
* FAIL 4: existence of info/alternates
        test `wc -l <C/.git/objects/info/alternates` = 2
* expecting success: cd C &&
git pull ../B master
*   ok 5: pulling from reference
* expecting success: cd C &&
echo "0 objects, 0 kilobytes" > expected &&
git count-objects > current &&
diff expected current
*   ok 6: that reference gets used
* expecting success: git clone --reference B file://`pwd`/A D
Initialize D/.git
Initialized empty Git repository in D/.git/
Okay
Wrote /home/johanh/git-test/git/t/trash/B/.git/objects
 to D/.git/objects/info/alternates
4f5d96490c0371a2814efb3203ed699ef4814fda -> D/.git/refs/reference-tmp/4f5d96490c0371a2814efb3203ed699ef4814fda
error: refs/remotes/origin/HEAD does not point to a valid object!
�+ does not point to a valid object!
�+ does not point to a valid object!
error: �p does not point to a valid object!
�+ does not point to a valid object!
�+ does not point to a valid object!
error:  does not point to a valid object!
./test-lib.sh: line 193: 32440 Segmentation fault      git clone --reference B file://`pwd`/A D
* FAIL 7: cloning with reference (no -l -s)
        git clone --reference B file://`pwd`/A D
* expecting success: test `wc -l <D/.git/objects/info/alternates` = 1
*   ok 8: existence of info/alternates
* expecting success: cd D && git pull ../B master
*   ok 9: pulling from reference
* expecting success: cd D && echo "0 objects, 0 kilobytes" > expected &&
git count-objects > current &&
diff expected current
*   ok 10: that reference gets used
* expecting success: cd A &&
echo third > file3 &&
git add file3 &&
git commit -m update &&
git repack -a -d &&
git prune
Created commit 20c3827: update
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file3
Counting objects: 6, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), done.
Total 6 (delta 0), reused 0 (delta 0)
*   ok 11: updating origin
* expecting success: cd C &&
git pull origin
fatal: 'origin': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
* FAIL 12: pulling changes from origin
        cd C &&
        git pull origin
* expecting success: cd C &&
echo "2 objects" > expected &&
git count-objects | cut -d, -f1 > current &&
diff expected current
1c1
< 2 objects
---
> 0 objects
* FAIL 13: that alternate to origin gets used
        cd C &&
        echo "2 objects" > expected &&
        git count-objects | cut -d, -f1 > current &&
        diff expected current
* expecting success: cd D &&
git pull origin
fatal: 'origin': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
* FAIL 14: pulling changes from origin
        cd D &&
        git pull origin
* expecting success: cd D &&
echo "5 objects" > expected &&
git count-objects | cut -d, -f1 > current &&
diff expected current
1c1
< 5 objects
---
> 0 objects
* FAIL 15: check objects expected to exist locally
        cd D &&
        echo "5 objects" > expected &&
        git count-objects | cut -d, -f1 > current &&
        diff expected current
* failed 7 among 15 test(s)
-- 
Johan Herland, <johan@herland.net>
www.herland.net
Previous: Johannes SchindelinNext: Johan Herland
Message 4 of 47 in “[RFC] Build in clone”
  1. Daniel BarkalowFeb 25, 2008
  2. Johan HerlandFeb 26, 2008
  3. Johannes SchindelinFeb 26, 2008
  4. Johan HerlandFeb 26, 2008
  5. Johan HerlandFeb 26, 2008
  6. Johan HerlandFeb 26, 2008
  7. Fix premature free of ref_lists while writing temporary refs to fileJohan Herland, Feb 26, 2008
  8. Johannes SchindelinFeb 26, 2008
  9. Johan HerlandFeb 26, 2008
  10. Daniel BarkalowFeb 26, 2008
  11. Johan HerlandFeb 26, 2008
  12. Fix premature call to git_config() causing t1020-subdirectory to failJohan Herland, Feb 26, 2008
  13. Johannes SchindelinFeb 26, 2008
  14. Daniel BarkalowFeb 26, 2008
  15. Johannes SchindelinFeb 26, 2008
  16. Daniel BarkalowFeb 26, 2008
  17. Junio C HamanoFeb 27, 2008
  18. Daniel BarkalowFeb 27, 2008
  19. Junio C HamanoFeb 27, 2008
  20. Daniel BarkalowFeb 27, 2008
  21. Junio C HamanoFeb 27, 2008
  22. Daniel BarkalowFeb 27, 2008
  23. Daniel BarkalowFeb 26, 2008
  24. Kristian HøgsbergFeb 26, 2008
  25. builtin-clone: create remotes/origin/HEAD symref, if guessedJohannes Schindelin, Mar 2, 2008
  26. builtin-clone: create remotes/origin/HEAD symref, if guessedJohannes Schindelin, Mar 2, 2008
  27. builtin clone: support bundlesJohannes Schindelin, Mar 2, 2008
  28. Daniel BarkalowMar 2, 2008
  29. Santi BéjarMar 3, 2008
  30. Daniel BarkalowMar 2, 2008
  31. Johannes SchindelinMar 2, 2008
  32. Junio C HamanoMar 2, 2008
  33. Junio C HamanoMar 2, 2008
  34. Add test for cloning with "--reference" repo being a subset of source repoJohan Herland, Mar 3, 2008
  35. Daniel BarkalowMar 3, 2008
  36. Daniel BarkalowMar 3, 2008
  37. Johan HerlandMar 4, 2008
  38. 1/2 Add test illustrating issues with sha1_file_name() and switching reposJohan Herland, Mar 4, 2008
  39. 2/2 Overly simplistic fix for issue with sha1_file_name() and switching reposJohan Herland, Mar 4, 2008
  40. Daniel BarkalowMar 4, 2008
  41. Daniel BarkalowMar 5, 2008
  42. Johan HerlandMar 5, 2008
  43. Kristian HøgsbergMar 3, 2008
  44. Pierre HabouzitMar 3, 2008
  45. Johannes SchindelinMar 3, 2008
  46. Johannes SchindelinMar 3, 2008
  47. Johan HerlandMar 3, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.