From: Junio C Hamano <junkio@cox.net>
To: git@vger.kernel.org
Subject: [PATCH] Add cheap local clone '-s' flag to git-clone-script
Date: Sun, 14 Aug 2005 01:20:37 -0700 [thread overview]
Message-ID: <7v4q9tdj56.fsf@assigned-by-dhcp.cox.net> (raw)
Using the $GIT_OBJECT_DIRECTORY/info/alternates mechanism,
create a new repository that borrows objects from the original
repository when --shared flag is given in addition to --local.
It is worth pointing out that the "cloned" repository depends on
the original repository, so this should be used only when you
can reasonably trust that the original repository would not
disappear without your knowing.
Signed-off-by: Junio C Hamano <junkio@cox.net>
---
This depends on the "Alternate object pool mechanism" patch I
sent out earlier, with a change suggested by Pasky to use
"$GIT_OBJECT_DIRECTORY/info/alternates" as the file name
instead of "info/alt".
This approach has the same danger as symlinking .git/objects
directory to the original repository that cg-clone mentions
about its '-l' option, but it is safer and easier to use in
multi-user environment. Objects newly created in the cloned
repository go to the primary object pool of it, not the
object pool of the original repository.
git-clone-script | 45 ++++++++++++++++++++++++++++-----------------
1 files changed, 28 insertions(+), 17 deletions(-)
ffdb36832dd755e65b9adfb68fa6b4a137176bc5
diff --git a/git-clone-script b/git-clone-script
--- a/git-clone-script
+++ b/git-clone-script
@@ -6,7 +6,7 @@
# Clone a repository into a different directory that does not yet exist.
usage() {
- echo >&2 "* git clone [-l] [-q] [-u <upload-pack>] <repo> <dir>"
+ echo >&2 "* git clone [-l [-s]] [-q] [-u <upload-pack>] <repo> <dir>"
exit 1
}
@@ -16,11 +16,14 @@ get_repo_base() {
quiet=
use_local=no
+local_shared=no
upload_pack=
while
case "$#,$1" in
0,*) break ;;
*,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
+ *,-s|*,--s|*,--sh|*,--sha|*,--shar|*,--share|*,--shared)
+ local_shared=yes ;;
*,-q|*,--quiet) quiet=-q ;;
1,-u|1,--upload-pack) usage ;;
*,-u|*,--upload-pack)
@@ -57,22 +60,30 @@ yes,yes)
exit 1
}
- # See if we can hardlink and drop "l" if not.
- sample_file=$(cd "$repo" && \
- find objects -type f -print | sed -e 1q)
-
- # objects directory should not be empty since we are cloning!
- test -f "$repo/$sample_file" || exit
-
- l=
- if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null
- then
- l=l
- fi &&
- rm -f "$D/.git/objects/sample" &&
- cd "$repo" &&
- find objects -type f -print |
- cpio -puamd$l "$D/.git/" || exit 1
+ case "$local_shared" in
+ no)
+ # See if we can hardlink and drop "l" if not.
+ sample_file=$(cd "$repo" && \
+ find objects -type f -print | sed -e 1q)
+
+ # objects directory should not be empty since we are cloning!
+ test -f "$repo/$sample_file" || exit
+
+ l=
+ if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null
+ then
+ l=l
+ fi &&
+ rm -f "$D/.git/objects/sample" &&
+ cd "$repo" &&
+ find objects -type f -print |
+ cpio -puamd$l "$D/.git/" || exit 1
+ ;;
+ yes)
+ mkdir -p "$D/.git/objects/info"
+ echo "$repo/objects" >"$D/.git/objects/info/alternates"
+ ;;
+ esac
# Make a duplicate of refs and HEAD pointer
HEAD=
reply other threads:[~2005-08-14 8:20 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=7v4q9tdj56.fsf@assigned-by-dhcp.cox.net \
--to=junkio@cox.net \
--cc=git@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox