Code

[PATCH] clone-pack and clone-script: documentation and add a missing parameter.
authorJunio C Hamano <junkio@cox.net>
Thu, 14 Jul 2005 03:25:54 +0000 (20:25 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 14 Jul 2005 03:42:26 +0000 (20:42 -0700)
While adding the documentation for these two commands, I noticed
that the name of the program on the other end (git-upload-pack)
is already almost configurable but git-clone-pack lacked command
line parameter parsing to actually use anything but default, so
I introduced --exec= like other remote commands while I was at it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Documentation/git-clone-pack.txt [new file with mode: 0644]
Documentation/git-clone-script.txt [new file with mode: 0644]
Documentation/git.txt
clone-pack.c
git-clone-script

diff --git a/Documentation/git-clone-pack.txt b/Documentation/git-clone-pack.txt
new file mode 100644 (file)
index 0000000..81c86e2
--- /dev/null
@@ -0,0 +1,60 @@
+git-clone-pack(1)
+=================
+v0.1, July 2005
+
+NAME
+----
+git-clone-pack - Clones a repository by receiving packed objects.
+
+
+SYNOPSIS
+--------
+'git-clone-pack' [-q] [--exec=<git-upload-pack>] [<host>:]<directory> [<heads>...]
+
+DESCRIPTION
+-----------
+Clones a repository into the current repository by invoking
+'git-upload-pack', possibly on the remote host via ssh, in
+the named repository, and invoking 'git-unpack-objects' locally
+to receive the pack.
+
+OPTIONS
+-------
+-q::
+       Pass '-q' flag to 'git-unpack-objects'; this makes the
+       cloning process less verbose.
+
+--exec=<git-upload-pack>::
+       Use this to specify the path to 'git-upload-pack' on the
+       remote side, if is not found on your $PATH.
+       Installations of sshd ignores the user's environment
+       setup scripts for login shells (e.g. .bash_profile) and
+       your privately installed GIT may not be found on the system
+       default $PATH.  Another workaround suggested is to set
+       up your $PATH in ".bashrc", but this flag is for people
+       who do not want to pay the overhead for non-interactive
+       shells by having a lean .bashrc file (they set most of
+       the things up in .bash_profile).
+
+[<host>:]<directory::
+       The (possibly remote) repository to clone from.
+
+<heads>...::
+       The heads to update.  This is relative to $GIT_DIR
+       (e.g. "HEAD", "refs/heads/master").  When unspecified,
+       all heads are updated to match the remote repository.
+
+
+Author
+------
+Written by Linus Torvalds <torvalds@osdl.org>
+
+Documentation
+--------------
+Documentation by Junio C Hamano.
+
+
+GIT
+---
+Part of the link:git.html[git] suite
+
diff --git a/Documentation/git-clone-script.txt b/Documentation/git-clone-script.txt
new file mode 100644 (file)
index 0000000..afb25bd
--- /dev/null
@@ -0,0 +1,60 @@
+git-clone-script(1)
+===================
+v0.1, July 2005
+
+NAME
+----
+git-clone-script - Clones a repository.
+
+
+SYNOPSIS
+--------
+'git clone' [-l] [-u <upload-pack>] [-q] <repository> <directory>
+
+DESCRIPTION
+-----------
+Clones a repository into a newly created directory.
+
+OPTIONS
+-------
+-l::
+       When the repository to clone from is on a local machine,
+       this flag bypasses normal "git aware" transport
+       mechanism and clones the repository by making a copy of
+       HEAD and everything under objects and refs directories.
+       The files under .git/objects/ directory are hardlinked
+       to save space when possible.
+
+-q::
+       Operate quietly.  This flag is passed to "rsync" and
+       "git-clone-pack" commands when given.
+
+-u <upload-pack>::
+       When given, and the repository to clone from is handled
+       by 'git-clone-pack', '--exec=<upload-pack>' is passed to
+       the command to specify non-default path for the command
+       run on the other end.
+
+<repository>::
+       The (possibly remote) repository to clone from.  It can
+       be an "rsync://host/dir" URL, an "http://host/dir" URL,
+       or [<host>:]/dir notation that is used by 'git-clone-pack'.
+       Currently http transport is not supported.
+
+<directory>::
+       The name of a new directory to be cloned into.  It is an
+       error to specify an existing directory.
+
+Author
+------
+Written by Linus Torvalds <torvalds@osdl.org>
+
+Documentation
+--------------
+Documentation by Junio C Hamano.
+
+
+GIT
+---
+Part of the link:git.html[git] suite
+
index 06205024b2628d13cf9ba8297d15428b94ca4c1d..cff5f795bca6620e498b853964e864325fbf4b2b 100644 (file)
@@ -127,6 +127,13 @@ link:git-apply-patch-script.html[git-apply-patch-script]::
 link:git-convert-cache.html[git-convert-cache]::
        Converts old-style GIT repository
 
+link:git-clone-script.html[git-clone-script]::
+       Clones a repository into the current repository (user interface)
+
+link:git-clone-pack.html[git-clone-pack]::
+       Clones a repository into the current repository (engine
+       for ssh and local transport)
+
 link:git-http-pull.html[git-http-pull]::
        Downloads a remote GIT repository via HTTP
 
index 252fb80efd55a4cc4fa679411c4570093500f4ad..064ec6964d45b365bdfdb48cbbc975e2c0864762 100644 (file)
@@ -4,7 +4,7 @@
 #include <sys/wait.h>
 
 static int quiet;
-static const char clone_pack_usage[] = "git-clone-pack [host:]directory [heads]*";
+static const char clone_pack_usage[] = "git-clone-pack [-q] [--exec=<git-upload-pack>] [<host>:]<directory> [<heads>]*";
 static const char *exec = "git-upload-pack";
 
 struct ref {
@@ -196,6 +196,10 @@ int main(int argc, char **argv)
                                quiet = 1;
                                continue;
                        }
+                       if (!strncmp("--exec=", arg, 7)) {
+                               exec = arg + 7;
+                               continue;
+                       }
                        usage(clone_pack_usage);
                }
                dest = arg;
index f92851ca4bd9fc662f8d0dda6c626ff4a6169f19..88e2c1f70686d35e6f2d9070931e40ff3ae7e1a5 100755 (executable)
@@ -6,7 +6,7 @@
 # Clone a repository into a different directory that does not yet exist.
 
 usage() {
-       echo >&2 "* git clone [-l] <repo> <dir>"
+       echo >&2 "* git clone [-l] [-q] [-u <upload-pack>] <repo> <dir>"
        exit 1
 }
 
@@ -16,11 +16,16 @@ get_repo_base() {
 
 quiet=
 use_local=no
+upload_pack=
 while
        case "$#,$1" in
        0,*) break ;;
         *,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
        *,-q|*,--quiet) quiet=-q ;;
+       1,-u|*,--upload-pack) usage ;;
+       *,-u|*,--upload-pack)
+               shift
+               upload_pack="--exec=$2" ;;
        *,-*) usage ;;
        *) break ;;
        esac
@@ -90,6 +95,9 @@ http://*)
        exit 1
        ;;
 *)
-       cd "$D" && git-clone-pack $quiet "$repo"
+       cd "$D" && case "$upload_pack" in
+       '') git-clone-pack $quiet "$repo" ;;
+       *) git-clone-pack $quiet "$upload_pack" "$repo" ;;
+       esac
        ;;
 esac