git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCHv2] clone: support cloning full bundles
@ 2008-02-25 10:12 Santi Béjar
  2008-02-25 19:30 ` Junio C Hamano
  2008-02-27 22:44 ` Junio C Hamano
  0 siblings, 2 replies; 15+ messages in thread
From: Santi Béjar @ 2008-02-25 10:12 UTC (permalink / raw)
  To: git; +Cc: Santi Béjar

Signed-off-by: Santi Béjar <sbejar@gmail.com>
---

Hi *,

  while waiting for the C port of git-clone I've updated my patch to
support bundles in "git clone".

Santi

 git-clone.sh           |   17 +++++++++++++----
 t/t5701-clone-local.sh |   11 +++++++++++
 2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/git-clone.sh b/git-clone.sh
index 0d686c3..2efb947 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
 	then
 		local=yes
 	fi
+elif [ -f "$repo" ] ; then
+	case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
 fi
 
 dir="$2"
 # Try using "humanish" part of source repo if user didn't specify one
 [ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
+[ -f "$dir" ] && dir=$(expr "$repo" : '.*/\([^/]*\)\.[^/]*')
 [ -e "$dir" ] && die "destination directory '$dir' already exists."
 [ yes = "$bare" ] && unset GIT_WORK_TREE
 [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
@@ -364,11 +367,17 @@ yes)
 		fi
 		;;
 	*)
-		case "$upload_pack" in
-		'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
-		*) git-fetch-pack --all -k $quiet "$upload_pack" $depth $no_progress "$repo" ;;
-		esac >"$GIT_DIR/CLONE_HEAD" ||
+		if [ -f "$repo" ] ; then
+			git bundle unbundle "$repo" > "$GIT_DIR/CLONE_HEAD" ||
+			die "unbundle from '$repo' failed."
+		else
+			case "$upload_pack" in
+			'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
+			*) git-fetch-pack --all -k \
+				$quiet "$upload_pack" $depth $no_progress "$repo" ;;
+			esac >"$GIT_DIR/CLONE_HEAD" ||
 			die "fetch-pack from '$repo' failed."
+		fi
 		;;
 	esac
 	;;
diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh
index 59a165a..8a8e65c 100755
--- a/t/t5701-clone-local.sh
+++ b/t/t5701-clone-local.sh
@@ -9,6 +9,7 @@ test_expect_success 'preparing origin repository' '
 	: >file && git add . && git commit -m1 &&
 	git clone --bare . a.git &&
 	git clone --bare . x &&
+	git bundle create b1.bundle --all HEAD &&
 	test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
 	test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
 '
@@ -71,4 +72,14 @@ test_expect_success 'local clone of repo with nonexistent ref in HEAD' '
 	git fetch &&
 	test ! -e .git/refs/remotes/origin/HEAD'
 
+test_expect_success 'bundle clone with suffix' '
+	cd "$D" &&
+	git clone b1.bundle
+'
+
+test_expect_success 'bundle clone' '
+	cd "$D" &&
+	git clone b1.bundle bdl1
+'
+
 test_done
-- 
1.5.4.3.293.gac81

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-25 10:12 Santi Béjar
@ 2008-02-25 19:30 ` Junio C Hamano
  2008-02-25 20:29   ` Santi Béjar
  2008-02-27 22:44 ` Junio C Hamano
  1 sibling, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2008-02-25 19:30 UTC (permalink / raw)
  To: Santi Béjar; +Cc: git

Santi Béjar <sbejar@gmail.com> writes:

> Signed-off-by: Santi Béjar <sbejar@gmail.com>
> ---
>
> Hi *,
>
>   while waiting for the C port of git-clone I've updated my patch to
> support bundles in "git clone".

I do not recall the v1 round of this patch, but it does not look
too bad.

I was hoping, however, if we can replace "git fetch-pack" there
with "git-fetch" so that you do not have to have the if
conditional based on "$repo"'s type.  Isn't "git fetch" capable
of fetching from a bundle already?

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-25 19:30 ` Junio C Hamano
@ 2008-02-25 20:29   ` Santi Béjar
  2008-02-25 21:00     ` Junio C Hamano
  0 siblings, 1 reply; 15+ messages in thread
From: Santi Béjar @ 2008-02-25 20:29 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Mon, Feb 25, 2008 at 8:30 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Santi Béjar <sbejar@gmail.com> writes:
>
>  > Signed-off-by: Santi Béjar <sbejar@gmail.com>
>  > ---
>  >
>  > Hi *,
>  >
>  >   while waiting for the C port of git-clone I've updated my patch to
>  > support bundles in "git clone".
>
>  I do not recall the v1 round of this patch, but it does not look
>  too bad.

Well, it was during the freeze, you probably had more important things to do :-)

http://article.gmane.org/gmane.comp.version-control.git/68035

>
>  I was hoping, however, if we can replace "git fetch-pack" there
>  with "git-fetch" so that you do not have to have the if
>  conditional based on "$repo"'s type.  Isn't "git fetch" capable
>  of fetching from a bundle already?
>

"git fetch" is capable to fetch bundles, but to use "git fetch"
instead of "git fetch-pack"
you need to reorganize other things (not the same output, to download
all the refs you need to write a config with refs/heads/*:..., "git
fetch" does not have a --no-progress), so I opted for
a minimal path (and not break the most used path :-).

I sent another patch to convert every transport to "git fetch" in:

http://article.gmane.org/gmane.comp.version-control.git/65669

but it had some problems (ups now I see I didn't answer to Johannes
Schindelin's reply, sorry, or I cannot find it). At the end as
git-clone was going to be ported to C...

Santi

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-25 20:29   ` Santi Béjar
@ 2008-02-25 21:00     ` Junio C Hamano
  0 siblings, 0 replies; 15+ messages in thread
From: Junio C Hamano @ 2008-02-25 21:00 UTC (permalink / raw)
  To: Santi Béjar; +Cc: git

"Santi Béjar" <sbejar@gmail.com> writes:

> ...
> you need to reorganize other things (not the same output, to download
> all the refs you need to write a config with refs/heads/*:..., "git
> fetch" does not have a --no-progress), so I opted for
> a minimal path (and not break the most used path :-).

That sounds like a sensible explanation.  As the external
interface won't change even if we later do so, let's take this
version for 1.5.5.

Thanks.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-25 10:12 Santi Béjar
  2008-02-25 19:30 ` Junio C Hamano
@ 2008-02-27 22:44 ` Junio C Hamano
  2008-02-27 23:04   ` Santi Béjar
  1 sibling, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2008-02-27 22:44 UTC (permalink / raw)
  To: Santi Béjar; +Cc: git

Santi Béjar <sbejar@gmail.com> writes:

> Signed-off-by: Santi Béjar <sbejar@gmail.com>
> diff --git a/git-clone.sh b/git-clone.sh
> index 0d686c3..2efb947 100755
> --- a/git-clone.sh
> +++ b/git-clone.sh
> @@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
>  	then
>  		local=yes
>  	fi
> +elif [ -f "$repo" ] ; then
> +	case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
>  fi
>  
>  dir="$2"
>  # Try using "humanish" part of source repo if user didn't specify one
>  [ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
> +[ -f "$dir" ] && dir=$(expr "$repo" : '.*/\([^/]*\)\.[^/]*')
>  [ -e "$dir" ] && die "destination directory '$dir' already exists."
>  [ yes = "$bare" ] && unset GIT_WORK_TREE
>  [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&

What is this [ -f "$dir" ] line doing?  The purpose of these
lines is:

 - The user (might have) said "clone to $2";

 - If the user didn't, then set dir to humanish part;

 - If that exists, we barf.

I do not see any valid reason for an additional logic in this
sequence when adding a new clone _source_ type.

The check to see if "$dir" _exists_ is even worse.  If the user
said "clone _to_ this", then we would not have invented $dir
based on the $repo (which is what the user said "clone _from_")
but used whatever name the user has given us.  The existing
check to barf "Hey, that explicit location you told me to clone
to is WRONG!!!" should not be broken.

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-27 22:44 ` Junio C Hamano
@ 2008-02-27 23:04   ` Santi Béjar
  2008-02-27 23:16     ` Santi Béjar
  0 siblings, 1 reply; 15+ messages in thread
From: Santi Béjar @ 2008-02-27 23:04 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Wed, Feb 27, 2008 at 11:44 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Santi Béjar <sbejar@gmail.com> writes:
>
>  > Signed-off-by: Santi Béjar <sbejar@gmail.com>
>
> > diff --git a/git-clone.sh b/git-clone.sh
>  > index 0d686c3..2efb947 100755
>  > --- a/git-clone.sh
>  > +++ b/git-clone.sh
>  > @@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
>  >       then
>  >               local=yes
>  >       fi
>  > +elif [ -f "$repo" ] ; then
>  > +     case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
>  >  fi
>  >
>  >  dir="$2"
>  >  # Try using "humanish" part of source repo if user didn't specify one
>  >  [ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
>  > +[ -f "$dir" ] && dir=$(expr "$repo" : '.*/\([^/]*\)\.[^/]*')
>  >  [ -e "$dir" ] && die "destination directory '$dir' already exists."
>  >  [ yes = "$bare" ] && unset GIT_WORK_TREE
>  >  [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
>
>  What is this [ -f "$dir" ] line doing?  The purpose of these
>  lines is:
>
>   - The user (might have) said "clone to $2";
>
>   - If the user didn't, then set dir to humanish part;
>
>   - If that exists, we barf.
>
>  I do not see any valid reason for an additional logic in this
>  sequence when adding a new clone _source_ type.
>
>  The check to see if "$dir" _exists_ is even worse.  If the user
>  said "clone _to_ this", then we would not have invented $dir
>  based on the $repo (which is what the user said "clone _from_")
>  but used whatever name the user has given us.  The existing
>  check to barf "Hey, that explicit location you told me to clone
>  to is WRONG!!!" should not be broken.
>

Oops, I did not thought about that possibility. The check was to be
able to clone a bundle that was in the local directory. So:

$ git clone git.bundle

clones git.bundle to the directory git. Maybe we can add an && in the
previous line, or we can say simply that to clone a bundle in the same
directory you have to specify explicitly where to clone.

In another patch we could add an "official" extension to the bundles
(the same way as with the repositories "*.git") as project.bdl or
project.bundle and just remove this extension.

Santi

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-27 23:04   ` Santi Béjar
@ 2008-02-27 23:16     ` Santi Béjar
  2008-02-27 23:48       ` Daniel Barkalow
  2008-02-28  0:19       ` Junio C Hamano
  0 siblings, 2 replies; 15+ messages in thread
From: Santi Béjar @ 2008-02-27 23:16 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Thu, Feb 28, 2008 at 12:04 AM, Santi Béjar <sbejar@gmail.com> wrote:
>
> On Wed, Feb 27, 2008 at 11:44 PM, Junio C Hamano <gitster@pobox.com> wrote:
>  > Santi Béjar <sbejar@gmail.com> writes:
>  >
>  >  > Signed-off-by: Santi Béjar <sbejar@gmail.com>
>  >
>  > > diff --git a/git-clone.sh b/git-clone.sh
>  >  > index 0d686c3..2efb947 100755
>  >  > --- a/git-clone.sh
>  >  > +++ b/git-clone.sh
>  >  > @@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
>  >  >       then
>  >  >               local=yes
>  >  >       fi
>  >  > +elif [ -f "$repo" ] ; then
>  >  > +     case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
>  >  >  fi
>  >  >
>  >  >  dir="$2"
>  >  >  # Try using "humanish" part of source repo if user didn't specify one
>  >  >  [ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
>  >  > +[ -f "$dir" ] && dir=$(expr "$repo" : '.*/\([^/]*\)\.[^/]*')
>  >  >  [ -e "$dir" ] && die "destination directory '$dir' already exists."
>  >  >  [ yes = "$bare" ] && unset GIT_WORK_TREE
>  >  >  [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
>  >
>  >  What is this [ -f "$dir" ] line doing?  The purpose of these
>  >  lines is:
>  >
>  >   - The user (might have) said "clone to $2";
>  >
>  >   - If the user didn't, then set dir to humanish part;
>  >
>  >   - If that exists, we barf.
>  >
>  >  I do not see any valid reason for an additional logic in this
>  >  sequence when adding a new clone _source_ type.
>  >
>  >  The check to see if "$dir" _exists_ is even worse.  If the user
>  >  said "clone _to_ this", then we would not have invented $dir
>  >  based on the $repo (which is what the user said "clone _from_")
>  >  but used whatever name the user has given us.  The existing
>  >  check to barf "Hey, that explicit location you told me to clone
>  >  to is WRONG!!!" should not be broken.
>  >
>
>  Oops, I did not thought about that possibility. The check was to be
>  able to clone a bundle that was in the local directory. So:
>
>  $ git clone git.bundle
>
>  clones git.bundle to the directory git. Maybe we can add an && in the
>  previous line

and check for [ -f "$repo" ] insted of [ -f "$dir" ]

>  , or we can say simply that to clone a bundle in the same
>  directory you have to specify explicitly where to clone.
>
>  In another patch we could add an "official" extension to the bundles
>  (the same way as with the repositories "*.git") as project.bdl or
>  project.bundle and just remove this extension.

My preference are in order:

1) define an official extension + the && [ -f "$repo" ]
2) the && [ -f "$repo"]
3) just remove this line

but not that strong.

Santi

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-27 23:16     ` Santi Béjar
@ 2008-02-27 23:48       ` Daniel Barkalow
  2008-02-28  0:19       ` Junio C Hamano
  1 sibling, 0 replies; 15+ messages in thread
From: Daniel Barkalow @ 2008-02-27 23:48 UTC (permalink / raw)
  To: Santi Béjar; +Cc: Junio C Hamano, git

[-- Attachment #1: Type: TEXT/PLAIN, Size: 3030 bytes --]

On Thu, 28 Feb 2008, Santi Béjar wrote:

> On Thu, Feb 28, 2008 at 12:04 AM, Santi Béjar <sbejar@gmail.com> wrote:
> >
> > On Wed, Feb 27, 2008 at 11:44 PM, Junio C Hamano <gitster@pobox.com> wrote:
> >  > Santi Béjar <sbejar@gmail.com> writes:
> >  >
> >  >  > Signed-off-by: Santi Béjar <sbejar@gmail.com>
> >  >
> >  > > diff --git a/git-clone.sh b/git-clone.sh
> >  >  > index 0d686c3..2efb947 100755
> >  >  > --- a/git-clone.sh
> >  >  > +++ b/git-clone.sh
> >  >  > @@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
> >  >  >       then
> >  >  >               local=yes
> >  >  >       fi
> >  >  > +elif [ -f "$repo" ] ; then
> >  >  > +     case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
> >  >  >  fi
> >  >  >
> >  >  >  dir="$2"
> >  >  >  # Try using "humanish" part of source repo if user didn't specify one
> >  >  >  [ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
> >  >  > +[ -f "$dir" ] && dir=$(expr "$repo" : '.*/\([^/]*\)\.[^/]*')
> >  >  >  [ -e "$dir" ] && die "destination directory '$dir' already exists."
> >  >  >  [ yes = "$bare" ] && unset GIT_WORK_TREE
> >  >  >  [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
> >  >
> >  >  What is this [ -f "$dir" ] line doing?  The purpose of these
> >  >  lines is:
> >  >
> >  >   - The user (might have) said "clone to $2";
> >  >
> >  >   - If the user didn't, then set dir to humanish part;
> >  >
> >  >   - If that exists, we barf.
> >  >
> >  >  I do not see any valid reason for an additional logic in this
> >  >  sequence when adding a new clone _source_ type.
> >  >
> >  >  The check to see if "$dir" _exists_ is even worse.  If the user
> >  >  said "clone _to_ this", then we would not have invented $dir
> >  >  based on the $repo (which is what the user said "clone _from_")
> >  >  but used whatever name the user has given us.  The existing
> >  >  check to barf "Hey, that explicit location you told me to clone
> >  >  to is WRONG!!!" should not be broken.
> >  >
> >
> >  Oops, I did not thought about that possibility. The check was to be
> >  able to clone a bundle that was in the local directory. So:
> >
> >  $ git clone git.bundle
> >
> >  clones git.bundle to the directory git. Maybe we can add an && in the
> >  previous line
> 
> and check for [ -f "$repo" ] insted of [ -f "$dir" ]
> 
> >  , or we can say simply that to clone a bundle in the same
> >  directory you have to specify explicitly where to clone.
> >
> >  In another patch we could add an "official" extension to the bundles
> >  (the same way as with the repositories "*.git") as project.bdl or
> >  project.bundle and just remove this extension.
> 
> My preference are in order:
> 
> 1) define an official extension + the && [ -f "$repo" ]
> 2) the && [ -f "$repo"]
> 3) just remove this line
> 
> but not that strong.

The transport.c determination of a bundle is if it's a local path that 
names a file, so [ -f "$repo" ] is the corresponding test.

	-Daniel
*This .sig left intentionally blank*

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-27 23:16     ` Santi Béjar
  2008-02-27 23:48       ` Daniel Barkalow
@ 2008-02-28  0:19       ` Junio C Hamano
  2008-02-28  0:26         ` Johannes Schindelin
  1 sibling, 1 reply; 15+ messages in thread
From: Junio C Hamano @ 2008-02-28  0:19 UTC (permalink / raw)
  To: Santi Béjar; +Cc: git

"Santi Béjar" <sbejar@gmail.com> writes:

> My preference are in order:
>
> 1) define an official extension + the && [ -f "$repo" ]
> 2) the && [ -f "$repo"]
> 3) just remove this line

Sure.  (1) sounds sane and if you make the extension ".git",
then I do not think you need anything more ;-).  Jokes aside,
calling it .bundle or .bndl would be sane.

Opinions?

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-28  0:19       ` Junio C Hamano
@ 2008-02-28  0:26         ` Johannes Schindelin
  2008-02-28  0:32           ` Santi Béjar
  2008-02-29  4:27           ` Mark Levedahl
  0 siblings, 2 replies; 15+ messages in thread
From: Johannes Schindelin @ 2008-02-28  0:26 UTC (permalink / raw)
  To: Junio C Hamano, Mark Levedahl; +Cc: Santi Béjar, git

[-- Attachment #1: Type: TEXT/PLAIN, Size: 620 bytes --]

Hi,

On Wed, 27 Feb 2008, Junio C Hamano wrote:

> "Santi Béjar" <sbejar@gmail.com> writes:
> 
> > My preference are in order:
> >
> > 1) define an official extension + the && [ -f "$repo" ]
> > 2) the && [ -f "$repo"]
> > 3) just remove this line
> 
> Sure.  (1) sounds sane and if you make the extension ".git",
> then I do not think you need anything more ;-).  Jokes aside,
> calling it .bundle or .bndl would be sane.
> 
> Opinions?

I like .bundle, obviously (I used it in every single example I gave).

Ciao,
Dscho

P.S.: only recently, I found out how useful bundles really are.  Thanks, 
Mark, for persisting!

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-28  0:26         ` Johannes Schindelin
@ 2008-02-28  0:32           ` Santi Béjar
  2008-02-29  4:27           ` Mark Levedahl
  1 sibling, 0 replies; 15+ messages in thread
From: Santi Béjar @ 2008-02-28  0:32 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, Mark Levedahl, git

On Thu, Feb 28, 2008 at 1:26 AM, Johannes Schindelin
<Johannes.Schindelin@gmx.de> wrote:
>  On Wed, 27 Feb 2008, Junio C Hamano wrote:
>
[...]

>  > calling it .bundle or .bndl would be sane.
>  >
>  > Opinions?
>
>  I like .bundle, obviously (I used it in every single example I gave).

+1

Santi

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCHv3] clone: support cloning full bundles
@ 2008-02-28  2:22 Santi Béjar
  2008-02-28 17:57 ` Junio C Hamano
  2008-02-29 19:16 ` [PATCHv2] " Santi Béjar
  0 siblings, 2 replies; 15+ messages in thread
From: Santi Béjar @ 2008-02-28  2:22 UTC (permalink / raw)
  To: git; +Cc: Santi Béjar

The "humanish" part of a bundle is made removing the ".bundle" suffix.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
---
Hi,

  Just in case .bundle is the definitive suffix.

  Changes since v2:

  . fixed the && [ -f "$repo" ] test
  . make "offically" the .bundle suffix
  . test that "git fetch" works after the cloning
  . additional tests

Santi

 git-clone.sh           |   19 ++++++++++++++-----
 t/t5701-clone-local.sh |   45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 5 deletions(-)

diff --git a/git-clone.sh b/git-clone.sh
index 0d686c3..0580b5a 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
 	then
 		local=yes
 	fi
+elif [ -f "$repo" ] ; then
+	case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
 fi
 
 dir="$2"
 # Try using "humanish" part of source repo if user didn't specify one
-[ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
+[ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g') &&
+[ -f "$repo" ] && dir=$(echo "$repo" | sed -e 's|/*\.bundle$||' -e 's|.*/||g')
 [ -e "$dir" ] && die "destination directory '$dir' already exists."
 [ yes = "$bare" ] && unset GIT_WORK_TREE
 [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
@@ -364,11 +367,17 @@ yes)
 		fi
 		;;
 	*)
-		case "$upload_pack" in
-		'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
-		*) git-fetch-pack --all -k $quiet "$upload_pack" $depth $no_progress "$repo" ;;
-		esac >"$GIT_DIR/CLONE_HEAD" ||
+		if [ -f "$repo" ] ; then
+			git bundle unbundle "$repo" > "$GIT_DIR/CLONE_HEAD" ||
+			die "unbundle from '$repo' failed."
+		else
+			case "$upload_pack" in
+			'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
+			*) git-fetch-pack --all -k \
+				$quiet "$upload_pack" $depth $no_progress "$repo" ;;
+			esac >"$GIT_DIR/CLONE_HEAD" ||
 			die "fetch-pack from '$repo' failed."
+		fi
 		;;
 	esac
 	;;
diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh
index 59a165a..ef2db00 100755
--- a/t/t5701-clone-local.sh
+++ b/t/t5701-clone-local.sh
@@ -11,6 +11,11 @@ test_expect_success 'preparing origin repository' '
 	git clone --bare . x &&
 	test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
 	test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
+	git bundle create b1.bundle --all HEAD &&
+	git bundle create b2.bundle --all &&
+	mkdir dir &&
+	cp b1.bundle dir/b3
+	cp b1.bundle b4
 '
 
 test_expect_success 'local clone without .git suffix' '
@@ -71,4 +76,44 @@ test_expect_success 'local clone of repo with nonexistent ref in HEAD' '
 	git fetch &&
 	test ! -e .git/refs/remotes/origin/HEAD'
 
+test_expect_success 'bundle clone without .bundle suffix' '
+	cd "$D" &&
+	git clone dir/b3 &&
+	cd b3 &&
+	git fetch
+'
+
+test_expect_success 'bundle clone with .bundle suffix' '
+	cd "$D" &&
+	git clone b1.bundle &&
+	cd b1 &&
+	git fetch
+'
+
+test_expect_success 'bundle clone from b4' '
+	cd "$D" &&
+	git clone b1.bundle bdl1 &&
+	cd bdl1 &&
+	git fetch
+'
+
+test_expect_success 'bundle clone from b4.bundle that does not exist' '
+	cd "$D" &&
+	if git clone b4.bundle bb
+	then
+		echo "Oops, should have failed"
+		false
+	else
+		echo happy
+	fi
+'
+
+test_expect_success 'bundle clone with nonexistent HEAD' '
+	cd "$D" &&
+	git clone b2.bundle b2 &&
+	cd b2 &&
+	git fetch
+	test ! -e .git/refs/heads/master
+'
+
 test_done
-- 
1.5.4.3.221.gf0f3f

^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCHv3] clone: support cloning full bundles
  2008-02-28  2:22 [PATCHv3] clone: support cloning full bundles Santi Béjar
@ 2008-02-28 17:57 ` Junio C Hamano
  2008-02-29 19:16 ` [PATCHv2] " Santi Béjar
  1 sibling, 0 replies; 15+ messages in thread
From: Junio C Hamano @ 2008-02-28 17:57 UTC (permalink / raw)
  To: Santi Béjar; +Cc: git

Santi Béjar <sbejar@gmail.com> writes:

> diff --git a/git-clone.sh b/git-clone.sh
> index 0d686c3..0580b5a 100755
> --- a/git-clone.sh
> +++ b/git-clone.sh
> @@ -210,11 +210,14 @@ if base=$(get_repo_base "$repo"); then
>  	then
>  		local=yes
>  	fi
> +elif [ -f "$repo" ] ; then
> +	case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
>  fi
>  
>  dir="$2"
>  # Try using "humanish" part of source repo if user didn't specify one
> -[ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
> +[ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g') &&
> +[ -f "$repo" ] && dir=$(echo "$repo" | sed -e 's|/*\.bundle$||' -e 's|.*/||g')
>  [ -e "$dir" ] && die "destination directory '$dir' already exists."
>  [ yes = "$bare" ] && unset GIT_WORK_TREE
>  [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&

This sequence was terse, to the point and very readable when the
logic was simpler, but now it is getting out of hand.  I think
it is a time for rewriting to something more verbose, like...

	# Decide the directory name of the new repository
        if test -n "$2"
        then
        	dir="$2"
	else
        	# Derive one from the repository name
                if test -f "$repo"
                then
                        # Cloning from a bundle
                        dir=... humanish ...
                else
                        dir=... humanish ...
                fi
        fi


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCHv2] clone: support cloning full bundles
  2008-02-28  0:26         ` Johannes Schindelin
  2008-02-28  0:32           ` Santi Béjar
@ 2008-02-29  4:27           ` Mark Levedahl
  1 sibling, 0 replies; 15+ messages in thread
From: Mark Levedahl @ 2008-02-29  4:27 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, Santi Béjar, git

Johannes Schindelin wrote:
> I like .bundle, obviously (I used it in every single example I gave).
>
> Ciao,
> Dscho
>
> P.S.: only recently, I found out how useful bundles really are.  Thanks, 
> Mark, for persisting!
>   
You're very welcome, and thank you for the implementation - bundles are 
a central part of my workflow.

Mark

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCHv2] clone: support cloning full bundles
  2008-02-28  2:22 [PATCHv3] clone: support cloning full bundles Santi Béjar
  2008-02-28 17:57 ` Junio C Hamano
@ 2008-02-29 19:16 ` Santi Béjar
  1 sibling, 0 replies; 15+ messages in thread
From: Santi Béjar @ 2008-02-29 19:16 UTC (permalink / raw)
  To: git; +Cc: Santi Béjar

The "humanish" part of a bundle is made removing the ".bundle" suffix.

Signed-off-by: Santi Béjar <sbejar@gmail.com>
---
Hi,

  changes since v3:

  * rewrite "humanish" part to be more readable
    as requested by Junio
  * Fix a typo in one test

  Santi

 git-clone.sh           |   36 +++++++++++++++++++++++++++++-------
 t/t5701-clone-local.sh |   45 +++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+), 7 deletions(-)

diff --git a/git-clone.sh b/git-clone.sh
index 0d686c3..9ae9646 100755
--- a/git-clone.sh
+++ b/git-clone.sh
@@ -210,11 +210,27 @@ if base=$(get_repo_base "$repo"); then
 	then
 		local=yes
 	fi
+elif [ -f "$repo" ] ; then
+	case "$repo" in /*);; *) repo="$PWD/$repo" ; esac
+fi
+
+# Decide the directory name of the new repository
+if test -n "$2"
+then
+	dir="$2"
+else
+	# Derive one from the repository name
+	# Try using "humanish" part of source repo if user didn't specify one
+	if test -f "$repo"
+	then
+		# Cloning from a bundle
+		dir=$(echo "$repo" | sed -e 's|/*\.bundle$||' -e 's|.*/||g')
+	else
+		dir=$(echo "$repo" |
+			sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
+	fi
 fi
 
-dir="$2"
-# Try using "humanish" part of source repo if user didn't specify one
-[ -z "$dir" ] && dir=$(echo "$repo" | sed -e 's|/$||' -e 's|:*/*\.git$||' -e 's|.*[/:]||g')
 [ -e "$dir" ] && die "destination directory '$dir' already exists."
 [ yes = "$bare" ] && unset GIT_WORK_TREE
 [ -n "$GIT_WORK_TREE" ] && [ -e "$GIT_WORK_TREE" ] &&
@@ -364,11 +380,17 @@ yes)
 		fi
 		;;
 	*)
-		case "$upload_pack" in
-		'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
-		*) git-fetch-pack --all -k $quiet "$upload_pack" $depth $no_progress "$repo" ;;
-		esac >"$GIT_DIR/CLONE_HEAD" ||
+		if [ -f "$repo" ] ; then
+			git bundle unbundle "$repo" > "$GIT_DIR/CLONE_HEAD" ||
+			die "unbundle from '$repo' failed."
+		else
+			case "$upload_pack" in
+			'') git-fetch-pack --all -k $quiet $depth $no_progress "$repo";;
+			*) git-fetch-pack --all -k \
+				$quiet "$upload_pack" $depth $no_progress "$repo" ;;
+			esac >"$GIT_DIR/CLONE_HEAD" ||
 			die "fetch-pack from '$repo' failed."
+		fi
 		;;
 	esac
 	;;
diff --git a/t/t5701-clone-local.sh b/t/t5701-clone-local.sh
index 59a165a..8dfaaa4 100755
--- a/t/t5701-clone-local.sh
+++ b/t/t5701-clone-local.sh
@@ -11,6 +11,11 @@ test_expect_success 'preparing origin repository' '
 	git clone --bare . x &&
 	test "$(GIT_CONFIG=a.git/config git config --bool core.bare)" = true &&
 	test "$(GIT_CONFIG=x/config git config --bool core.bare)" = true
+	git bundle create b1.bundle --all HEAD &&
+	git bundle create b2.bundle --all &&
+	mkdir dir &&
+	cp b1.bundle dir/b3
+	cp b1.bundle b4
 '
 
 test_expect_success 'local clone without .git suffix' '
@@ -71,4 +76,44 @@ test_expect_success 'local clone of repo with nonexistent ref in HEAD' '
 	git fetch &&
 	test ! -e .git/refs/remotes/origin/HEAD'
 
+test_expect_success 'bundle clone without .bundle suffix' '
+	cd "$D" &&
+	git clone dir/b3 &&
+	cd b3 &&
+	git fetch
+'
+
+test_expect_success 'bundle clone with .bundle suffix' '
+	cd "$D" &&
+	git clone b1.bundle &&
+	cd b1 &&
+	git fetch
+'
+
+test_expect_success 'bundle clone from b4' '
+	cd "$D" &&
+	git clone b4 bdl &&
+	cd bdl &&
+	git fetch
+'
+
+test_expect_success 'bundle clone from b4.bundle that does not exist' '
+	cd "$D" &&
+	if git clone b4.bundle bb
+	then
+		echo "Oops, should have failed"
+		false
+	else
+		echo happy
+	fi
+'
+
+test_expect_success 'bundle clone with nonexistent HEAD' '
+	cd "$D" &&
+	git clone b2.bundle b2 &&
+	cd b2 &&
+	git fetch
+	test ! -e .git/refs/heads/master
+'
+
 test_done
-- 
1.5.4.3.393.g5540


^ permalink raw reply related	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2008-02-29 19:17 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-02-28  2:22 [PATCHv3] clone: support cloning full bundles Santi Béjar
2008-02-28 17:57 ` Junio C Hamano
2008-02-29 19:16 ` [PATCHv2] " Santi Béjar
  -- strict thread matches above, loose matches on Subject: below --
2008-02-25 10:12 Santi Béjar
2008-02-25 19:30 ` Junio C Hamano
2008-02-25 20:29   ` Santi Béjar
2008-02-25 21:00     ` Junio C Hamano
2008-02-27 22:44 ` Junio C Hamano
2008-02-27 23:04   ` Santi Béjar
2008-02-27 23:16     ` Santi Béjar
2008-02-27 23:48       ` Daniel Barkalow
2008-02-28  0:19       ` Junio C Hamano
2008-02-28  0:26         ` Johannes Schindelin
2008-02-28  0:32           ` Santi Béjar
2008-02-29  4:27           ` Mark Levedahl

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).