Commit Graph

41 Commits

Author SHA1 Message Date
Mark Wooding
f327dbced2 Shell utilities: Guard against expr' magic tokens.
Some words, e.g., `match', are special to expr(1), and cause strange
parsing effects.  Track down all uses of expr and mangle the arguments
so that this isn't a problem.

Signed-off-by: Mark Wooding <mdw@distorted.org.uk>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-13 16:45:48 -07:00
Junio C Hamano
c72112e6e1 git-clone: fix handling of upsteram whose HEAD does not point at master.
When cloning from a remote repository that has master, main, and
origin branches _and_ with the HEAD pointing at main branch, we
did quite confused things during clone.  So this cleans things
up.  The behaviour is a bit different between separate remotes/
layout and the mixed branches layout.

The newer layout with $GIT_DIR/refs/remotes/$origin/, things are
simpler and more transparent:

 - remote branches are copied to refs/remotes/$origin/.

 - HEAD points at the branch with the same name as the remote
   HEAD points at, and starts at where the remote HEAD points at.

 - $GIT_DIR/remotes/$origin file is set up to fetch all remote
   branches, and merge the branch HEAD pointed at at the time of
   the cloning.

Everything-in-refs/heads layout was the more confused one, but
cleaned up like this:

 - remote branches are copied to refs/heads, but the branch
   "$origin" is not copied, instead a copy of the branch the
   remote HEAD points at is created there.

 - HEAD points at the branch with the same name as the remote
   HEAD points at, and starts at where the remote HEAD points at.

 - $GIT_DIR/remotes/$origin file is set up to fetch all remote
   branches except "$origin", and merge the branch HEAD pointed
   at at the time of the cloning.

With this, the remote has master, main and origin, and its HEAD
points at main, you could:

	git clone $URL --origin upstream

to use refs/heads/upstream as the tracking branch for remote
"main", and your primary working branch will also be "main".
"master" and "origin" are used to track the corresponding remote
branches and with this setup they do not have any special meaning.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-04-02 22:22:27 -07:00
Yasushi SHOJI
ef5b4eabb6 git-clone: exit early if repo isn't specified
git-clone without a repo isn't useful at all.  print message and get
out asap.

This patch also move the variable 'local' to where other variables are
initialized.

Signed-off-by: Yasushi SHOJI <yashi@atmark-techno.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-30 15:31:21 -08:00
Yasushi SHOJI
98a4fef3f2 Make git-clone to take long double-dashed origin option (--origin)
git-clone currently take option '-o' to specify origin.  this patch
makes git-clone to take double-dashed option '--origin' and other
abbreviations in addtion to the current single-dashed option.

[jc: with minor fixups]

Signed-off-by: Yasushi SHOJI <yashi@atmark-techno.com>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-30 15:31:03 -08:00
Junio C Hamano
4c2e98d6ce git-clone: typofix.
The traditional one created refs/origin by mistake, not
refs/heads/origin.  Also it mistakenly failed to prevent
$origin from being listed twice in remotes/origin file.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-22 00:50:32 -08:00
Junio C Hamano
5ceb05f82e clone: record the remote primary branch with remotes/$origin/HEAD
This matches c51d13692d commit to
record the primary branch of the remote with a symbolic ref
remotes/$origin/HEAD.  The user can later change it to point at
different branch to change the meaning of "$origin" shorthand.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-21 02:02:46 -08:00
Junio C Hamano
47874d6d9a revamp git-clone (take #2).
This builds on top of the previous one.

 * --use-separate-remote uses .git/refs/remotes/$origin/
   directory to keep track of the upstream branches.

 * The $origin above defaults to "origin" as usual, but the
   existing "-o $origin" option can be used to override it.

I am not yet convinced if we should make "$origin" the synonym to
"refs/remotes/$origin/$name" where $name is the primary branch
name of $origin upstream, nor if so how we should decide which
upstream branch is the primary one, but that is more or less
orthogonal to what the clone does here.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-21 00:14:13 -08:00
Junio C Hamano
dfeff66ed9 revamp git-clone.
This does two things.

 * A new flag --reference can be used to name a local repository
   that is to be used as an alternate.  This is in response to
   an inquiry by James Cloos in the message on the list
   <m3r74ykue7.fsf@lugabout.cloos.reno.nv.us>.

 * A new flag --use-separate-remote stops contaminating local
   branch namespace by upstream branch names.  The upstream
   branch heads are copied in .git/refs/remotes/ instead of
   .git/refs/heads/ and .git/remotes/origin file is set up to
   reflect this as well.  It requires to have fetch/pull update
   to understand .git/refs/remotes by Eric Wong to further
   update the repository cloned this way.

For the former change, git-fetch-pack is taught a new flag --all
to fetch from all the remote heads.  Nobody uses the git-clone-pack
with this change, so we could deprecate the command, but removal
of the command will be left to a separate round.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-03-20 00:21:10 -08:00
Junio C Hamano
816c02ce8e Merge fixes early for next maint series. 2006-02-23 22:27:03 -08:00
Junio C Hamano
7bd1527d2d Merge branches 'jc/fix-co-candy', 'jc/fix-rename-leak' and 'ar/fix-win' into maint
* jc/fix-co-candy:
  checkout - eye candy.

* jc/fix-rename-leak:
  diffcore-rename: plug memory leak.

* ar/fix-win:
  fix t5600-clone-fail-cleanup.sh on windows
2006-02-23 22:25:32 -08:00
Alex Riesen
edd3ebfe27 fix t5600-clone-fail-cleanup.sh on windows
In windows you cannot remove current or opened directory,
an opened file, a running program, a loaded library, etc...

[jc: signoffs?  With a minor quoting fix.]

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-23 03:47:15 -08:00
Junio C Hamano
744633cbf2 checkout - eye candy.
This implements "eye candy" similar to the pack-object/unpack-object
to entertain users while a large tree is being checked out after
a clone or a pull.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-22 19:04:06 -08:00
Junio C Hamano
6643688867 Merge part of jc/portable branch 2006-02-21 00:52:18 -08:00
Johannes Schindelin
8e1618f961 Fix cpio call
To some cpio's, -a and -m options are mutually exclusive. Use only -m.

Signed-off-by: Johannes E. Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-17 16:30:57 -08:00
Carl Worth
41ff7a1076 Trap exit to clean up created directory if clone fails.
Signed-off-by: Carl Worth <cworth@cworth.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-17 16:16:49 -08:00
Fernando J. Pereda
6c5c62f340 Print an error if cloning a http repo and NO_CURL is set
If Git is compiled with NO_CURL=YesPlease and one tries to
clone a http repository, git-clone tries to call the curl
binary. This trivial patch prints an error instead in such
situation.

Signed-off-by: Fernando J. Pereda <ferdy@gentoo.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-02-15 19:14:01 -08:00
Junio C Hamano
e6489a1bdf clone: do not accept more than one -o option.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-24 23:17:06 -08:00
Junio C Hamano
4fb66a62ee clone: do not create remotes/origin nor origin branch in a bare repository.
It is simply pointless, since no merges will ever happen in such
a repository.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-24 23:17:06 -08:00
Junio C Hamano
87e80c4b5f git-clone: PG13 --naked option to --bare.
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-24 23:17:06 -08:00
Uwe Zeisberger
e7555785f4 Fix generation of "humanish" part of source repo
If repo has the form <host>:<path> and <path> doesn't contain a slash, the
cloned repository is named "<host>:<path>", instead of "<path>" only.

Signed-off-by: Uwe Zeisberger <zeisberg@informatik.uni-freiburg.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-19 23:24:34 -08:00
Junio C Hamano
8a1a120c55 clone: --naked option.
The new option --naked is to help creating a naked repository
for public consumption.

	$ git clone -l -s --naked \
	  /pub/scm/.../torvalds/linux-2.6.git subproj-2.6.git

is equivalent to this sequence:

	$ git clone -l -s -n /pub/scm/.../torvalds/linux-2.6.git temp
	$ mv temp/.git subproj-2.6.git
	$ rmdir temp

Signed-off-by: Junio C Hamano <junkio@cox.net>
2006-01-14 16:00:32 -08:00
Junio C Hamano
056211053b git-clone: do not special case dumb http.
Underlying http-fetch is supposed to be capable of handling
packed repositories just fine, so no need to special case it in
the wrapper script.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-23 15:30:07 -08:00
Johannes Schindelin
e6c310fd0d git-clone: Support changing the origin branch with -o
Earlier, git-clone stored upstream's master in the branch named 'origin',
possibly overwriting an existing such branch.

Now you can change it by calling git-clone with '-o <other_name>'.

[jc: added ref format check, subdirectory safety, documentation
 and usage string.]

Signed-off-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-22 16:35:37 -08:00
freku045@student.liu.se
806f36d4d7 Trivial usage string clean-up
Signed-off-by: Fredrik Kuivinen <freku045@student.liu.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-14 02:53:43 -08:00
Junio C Hamano
0a8b4def9a git-clone: tell the user a bit more about clone-pack failure.
When clone-pack has trouble with the remote, it dies unfriendly
"EOF" error message.  We cannot tell the reason why it failed
from the local end; it could be that the repository did not
exist, or configured not to serve over git-daemon, or a network
failure.  At least, saying clone-pack failed makes it a bit more
meaningful.

I am not convinced yet that removing the newly created directory
is the right thing to do, so this commit leaves the new
directory behind.

Reported by Sam Ravnborg.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-12-13 15:58:00 -08:00
Pavel Roskin
2c4ed386e8 git-clone --shared should imply --local
The "--shared" option to git-clone is silently ignored if "--local" is
not specified.  The manual doesn't mention such dependency.  Make
"--shared" imply "--local".

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-28 23:55:12 -08:00
Josef Weidendorfer
b0c698a6e4 Bugfix: stop if directory already exists
Fix a typo: We do not want to run the directory as command,
and want to terminate if the directory exists
Additionally, update the usage message

Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-14 00:50:17 -08:00
Andreas Ericsson
7f10f7c4e4 git-clone: Allow cloning into directories other than child of current dir.
This patch adds -p to mkdir and an explicit check to see if the target
directory exists (since mkdir -p doesn't throw an error if it does).

Signed-off-by: Andreas Ericsson <ae@op5.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-11 01:34:27 -08:00
Andreas Ericsson
0879aa2870 git-clone: Keep remote names when cloning unless explicitly told not to.
With this patch the following commands all clone into the local directory
"repo". If repo exists, it will still barf.

	git-clone git://host.xz/repo.git
	git-clone /path/to/repo/.git
	git-clone host.xz:repo.git

I ended up doing the same source-to-target sed'ing for all our company
projects, so it was easier to add it directly to git-clone.

Signed-off-by: Andreas Ericsson <ae@op5.se>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-11 01:34:26 -08:00
Pavel Roskin
0e9ab02da7 git-clone: quote destination directory name
git-clone doesn't quote the full path to the destination directory,
which causes it to fail if the path contains spaces or other characters
interpreted by the shell.

[jc: obviously I was not careful enough.  Pavel, thanks for catching.]

Signed-off-by: Pavel Roskin <proski@gnu.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-11 01:15:00 -08:00
Josef Weidendorfer
66c9ec2555 Let git-clone/git-fetch follow HTTP redirections
Otherwise, git-clone silently failed to clone a remote
repository where redirections (ie. a response with a
"Location" header line) are used.

This includes the fixes from Nick Hengeveld.

Signed-off-by: Josef Weidendorfer <Josef.Weidendorfer@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-10 15:57:56 -08:00
Junio C Hamano
95d117b605 Set up remotes/origin to track all remote branches.
This implements the idea Daniel Barkalow came up with, to match
the remotes/origin created by clone by default to the workflow I
use myself in my guinea pig repository, to have me eat my own
dog food.

We probably would want to use either .git/refs/local/heads/*
(idea by Linus) or .git/refs/heads/origin/* instead to reduce
the local ref namespace pollution.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-06 18:17:14 -08:00
Junio C Hamano
3d95bf074e git-clone: fix local clone
If we let cpio to create the leading directories implicitly,
it ends up having funny perm bits (GNU cpio 2.5 and 2.6, at least).
This leaves .git/object/?? directories readable only by the owner.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-05 11:44:35 -08:00
Junio C Hamano
e125c1a717 git-clone: do not forget to create origin branch.
The newly cloned repository by default had .git/remotes/origin
set up to track the remote master to origin, but forgot to
create the origin branch ourselves.  Also it hardcoded the
assumption that the remote HEAD points at "master", which may
not always be true.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-11-01 22:19:36 -08:00
Junio C Hamano
cdb3950801 Forward port the "funny ref avoidance" in clone and fetch from maint branch.
Somehow I forgot to forward port these fixes.  "git clone" from a
repository prepared with the latest update-server-info would fail
without this patch.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-10-17 21:47:06 -07:00
Junio C Hamano
036a72d8fa git-clone: check out "master" by default.
And with -n flag you can tell it not to.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-26 18:04:17 -07:00
Junio C Hamano
229a7ed7ab Solaris: give a bit more built-in defaults.
Taking the make command line Peter Eriksen uses, give defaults
to SHELL_PATH, TAR, CURLDIR, NO_STRCASESTR, and INSTALL.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-24 11:26:22 -07:00
Junio C Hamano
89d844d084 Do not give alarming error message from rsync in fetch and clone.
When we check the optional objects/info/alternates file at the remote
repository, we forgot to really squelch error message from rsync.

Not having that file is not a crime.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-20 15:07:54 -07:00
Junio C Hamano
4447badcd2 Teach rsync transport about alternates.
For local operations and downloading and uploading via git aware protocols,
use of $GIT_OBJECT_DIRECTORY/info/alternates is recommended on the server
side for big projects that are derived from another one (like Linux kernel).

However, dumb protocols and rsync transport needs to resolve this on the
client end, which we did not bother doing until this week.

I noticed we use "rsync -z" but most of our payload is already compressed,
which was not quite right.  This commit also fixes it.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-17 11:56:41 -07:00
Junio C Hamano
365527adbf Fix CDPATH problem.
CDPATH has two problems:

 * It takes scripts to unexpected places (somebody had
   CDPATH=..:../..:$HOME and the "cd" in git-clone.sh:get_repo_base
   took him to $HOME/.git when he said "clone foo bar" to clone a
   repository in "foo" which had "foo/.git").  CDPATH mechanism does
   not implicitly give "." at the beginning of CDPATH, which is
   the most irritating part.

 * The extra echo when it does its thing confuses scripts further.

Most of our scripts that use "cd" includes git-sh-setup so the problem
is primarily fixed there.  git-clone starts without a repository, and
it needs its own fix.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-12 22:52:51 -07:00
Junio C Hamano
215a7ad1ef Big tool rename.
As promised, this is the "big tool rename" patch.  The primary differences
since 0.99.6 are:

  (1) git-*-script are no more.  The commands installed do not
      have any such suffix so users do not have to remember if
      something is implemented as a shell script or not.

  (2) Many command names with 'cache' in them are renamed with
      'index' if that is what they mean.

There are backward compatibility symblic links so that you and
Porcelains can keep using the old names, but the backward
compatibility support  is expected to be removed in the near
future.

Signed-off-by: Junio C Hamano <junkio@cox.net>
2005-09-07 17:45:20 -07:00