commit
						72e5890b68
					
				|  | @ -12,7 +12,22 @@ SYNOPSIS | ||||||
|  |  | ||||||
| DESCRIPTION | DESCRIPTION | ||||||
| ----------- | ----------- | ||||||
| Clones a repository into a newly created directory. | Clones a repository into a newly created directory.  All remote | ||||||
|  | branch heads are copied under `$GIT_DIR/refs/heads/`, except | ||||||
|  | that the remote `master` is also copied to `origin` branch. | ||||||
|  |  | ||||||
|  | In addition, `$GIT_DIR/remotes/origin` file is set up to have | ||||||
|  | this line: | ||||||
|  |  | ||||||
|  | 	Pull: master:origin | ||||||
|  |  | ||||||
|  | This is to help the typical workflow of working off of the | ||||||
|  | remote `master` branch.  Every time `git pull` without argument | ||||||
|  | is run, the progress on the remote `master` branch is tracked by | ||||||
|  | copying it into the local `origin` branch, and merged into the | ||||||
|  | branch you are currently working on.  Remote branches other than | ||||||
|  | `master` are also added there to be tracked. | ||||||
|  |  | ||||||
|  |  | ||||||
| OPTIONS | OPTIONS | ||||||
| ------- | ------- | ||||||
|  | @ -28,9 +43,10 @@ OPTIONS | ||||||
| --shared:: | --shared:: | ||||||
| -s:: | -s:: | ||||||
| 	When the repository to clone is on the local machine, | 	When the repository to clone is on the local machine, | ||||||
| 	instead of using hard links automatically setup | 	instead of using hard links, automatically setup | ||||||
| 	.git/objects/info/alternatives to share the objects | 	.git/objects/info/alternatives to share the objects | ||||||
| 	with the source repository | 	with the source repository.  The resulting repository | ||||||
|  | 	starts out without any object of its own. | ||||||
|  |  | ||||||
| --quiet:: | --quiet:: | ||||||
| -q:: | -q:: | ||||||
|  | @ -49,14 +65,13 @@ OPTIONS | ||||||
|  |  | ||||||
| <repository>:: | <repository>:: | ||||||
| 	The (possibly remote) repository to clone from.  It can | 	The (possibly remote) repository to clone from.  It can | ||||||
| 	be an "rsync://host/dir" URL, an "http://host/dir" URL, | 	be any URL git-fetch supports. | ||||||
| 	or [<host>:]/dir notation that is used by 'git-clone-pack'. |  | ||||||
| 	Currently http transport is not supported. |  | ||||||
|  |  | ||||||
| <directory>:: | <directory>:: | ||||||
| 	The name of a new directory to be cloned into.  It is an | 	The name of a new directory to be cloned into.  It is an | ||||||
| 	error to specify an existing directory. | 	error to specify an existing directory. | ||||||
|  |  | ||||||
|  |  | ||||||
| Author | Author | ||||||
| ------ | ------ | ||||||
| Written by Linus Torvalds <torvalds@osdl.org> | Written by Linus Torvalds <torvalds@osdl.org> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,89 @@ | ||||||
|  | git-http-push(1) | ||||||
|  | ================ | ||||||
|  |  | ||||||
|  | NAME | ||||||
|  | ---- | ||||||
|  | git-http-push - Push missing objects using HTTP/DAV. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | SYNOPSIS | ||||||
|  | -------- | ||||||
|  | 'git-http-push' [--complete] [--force] [--verbose] <url> <ref> [<ref>...] | ||||||
|  |  | ||||||
|  | DESCRIPTION | ||||||
|  | ----------- | ||||||
|  | Sends missing objects to remote repository, and updates the | ||||||
|  | remote branch. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | OPTIONS | ||||||
|  | ------- | ||||||
|  | --complete:: | ||||||
|  | 	Do not assume that the remote repository is complete in its | ||||||
|  | 	current state, and verify all objects in the entire local | ||||||
|  | 	ref's history exist in the remote repository. | ||||||
|  |  | ||||||
|  | --force:: | ||||||
|  | 	Usually, the command refuses to update a remote ref that | ||||||
|  | 	is not an ancestor of the local ref used to overwrite it. | ||||||
|  | 	This flag disables the check.  What this means is that | ||||||
|  | 	the remote repository can lose commits; use it with | ||||||
|  | 	care. | ||||||
|  |  | ||||||
|  | --verbose:: | ||||||
|  | 	Report the list of objects being walked locally and the | ||||||
|  | 	list of objects successfully sent to the remote repository. | ||||||
|  |  | ||||||
|  | <ref>...: | ||||||
|  | 	The remote refs to update. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Specifying the Refs | ||||||
|  | ------------------- | ||||||
|  |  | ||||||
|  | A '<ref>' specification can be either a single pattern, or a pair | ||||||
|  | of such patterns separated by a colon ":" (this means that a ref name | ||||||
|  | cannot have a colon in it).  A single pattern '<name>' is just a  | ||||||
|  | shorthand for '<name>:<name>'. | ||||||
|  |  | ||||||
|  | Each pattern pair consists of the source side (before the colon) | ||||||
|  | and the destination side (after the colon).  The ref to be | ||||||
|  | pushed is determined by finding a match that matches the source | ||||||
|  | side, and where it is pushed is determined by using the | ||||||
|  | destination side. | ||||||
|  |  | ||||||
|  |  - It is an error if <src> does not match exactly one of the | ||||||
|  |    local refs. | ||||||
|  |  | ||||||
|  |  - If <dst> does not match any remote ref, either | ||||||
|  |  | ||||||
|  |    * it has to start with "refs/"; <dst> is used as the | ||||||
|  |      destination literally in this case. | ||||||
|  |  | ||||||
|  |    * <src> == <dst> and the ref that matched the <src> must not | ||||||
|  |      exist in the set of remote refs; the ref matched <src> | ||||||
|  |      locally is used as the name of the destination. | ||||||
|  |  | ||||||
|  | Without '--force', the <src> ref is stored at the remote only if | ||||||
|  | <dst> does not exist, or <dst> is a proper subset (i.e. an | ||||||
|  | ancestor) of <src>.  This check, known as "fast forward check", | ||||||
|  | is performed in order to avoid accidentally overwriting the | ||||||
|  | remote ref and lose other peoples' commits from there. | ||||||
|  |  | ||||||
|  | With '--force', the fast forward check is disabled for all refs. | ||||||
|  |  | ||||||
|  | Optionally, a <ref> parameter can be prefixed with a plus '+' sign | ||||||
|  | to disable the fast-forward check only on that ref. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Author | ||||||
|  | ------ | ||||||
|  | Written by Nick Hengeveld <nickh@reactrix.com> | ||||||
|  |  | ||||||
|  | Documentation | ||||||
|  | -------------- | ||||||
|  | Documentation by Nick Hengeveld | ||||||
|  |  | ||||||
|  | GIT | ||||||
|  | --- | ||||||
|  | Part of the gitlink:git[7] suite | ||||||
|  | @ -34,6 +34,8 @@ include::merge-pull-opts.txt[] | ||||||
| 	least one <remote>.  Specifying more than one <remote> | 	least one <remote>.  Specifying more than one <remote> | ||||||
| 	obviously means you are trying an Octopus. | 	obviously means you are trying an Octopus. | ||||||
|  |  | ||||||
|  | include::merge-strategies.txt[] | ||||||
|  |  | ||||||
|  |  | ||||||
| SEE ALSO | SEE ALSO | ||||||
| -------- | -------- | ||||||
|  |  | ||||||
|  | @ -31,42 +31,8 @@ include::pull-fetch-param.txt[] | ||||||
|  |  | ||||||
| include::merge-pull-opts.txt[] | include::merge-pull-opts.txt[] | ||||||
|  |  | ||||||
|  | include::merge-strategies.txt[] | ||||||
|  |  | ||||||
| MERGE STRATEGIES |  | ||||||
| ---------------- |  | ||||||
|  |  | ||||||
| resolve:: |  | ||||||
| 	This can only resolve two heads (i.e. the current branch |  | ||||||
| 	and another branch you pulled from) using 3-way merge |  | ||||||
| 	algorithm.  It tries to carefully detect criss-cross |  | ||||||
| 	merge ambiguities and is considered generally safe and |  | ||||||
| 	fast.  This is the default merge strategy when pulling |  | ||||||
| 	one branch. |  | ||||||
|  |  | ||||||
| recursive:: |  | ||||||
| 	This can only resolve two heads using 3-way merge |  | ||||||
| 	algorithm.  When there are more than one common |  | ||||||
| 	ancestors that can be used for 3-way merge, it creates a |  | ||||||
| 	merged tree of the common ancestores and uses that as |  | ||||||
| 	the reference tree for the 3-way merge.  This has been |  | ||||||
| 	reported to result in fewer merge conflicts without |  | ||||||
| 	causing mis-merges by tests done on actual merge commits |  | ||||||
| 	taken from Linux 2.6 kernel development history. |  | ||||||
| 	Additionally this can detect and handle merges involving |  | ||||||
| 	renames. |  | ||||||
|  |  | ||||||
| octopus:: |  | ||||||
| 	This resolves more than two-head case, but refuses to do |  | ||||||
| 	complex merge that needs manual resolution.  It is |  | ||||||
| 	primarily meant to be used for bundling topic branch |  | ||||||
| 	heads together.  This is the default merge strategy when |  | ||||||
| 	pulling more than one branch. |  | ||||||
|  |  | ||||||
| ours:: |  | ||||||
| 	This resolves any number of heads, but the result of the |  | ||||||
| 	merge is always the current branch head.  It is meant to |  | ||||||
| 	be used to supersede old development history of side |  | ||||||
| 	branches. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| EXAMPLES | EXAMPLES | ||||||
|  |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
|  |  | ||||||
| T="$1" | T="$1" | ||||||
|  |  | ||||||
| for h in *.html howto/*.txt howto/*.html | for h in *.html *.txt howto/*.txt howto/*.html | ||||||
| do | do | ||||||
| 	diff -u -I'Last updated [0-9][0-9]-[A-Z][a-z][a-z]-' "$T/$h" "$h" || { | 	diff -u -I'Last updated [0-9][0-9]-[A-Z][a-z][a-z]-' "$T/$h" "$h" || { | ||||||
| 		echo >&2 "# install $h $T/$h" | 		echo >&2 "# install $h $T/$h" | ||||||
|  | @ -12,7 +12,7 @@ do | ||||||
| 	} | 	} | ||||||
| done | done | ||||||
| strip_leading=`echo "$T/" | sed -e 's|.|.|g'` | strip_leading=`echo "$T/" | sed -e 's|.|.|g'` | ||||||
| for th in "$T"/*.html "$T"/howto/*.txt "$T"/howto/*.html | for th in "$T"/*.html "$T"/*.txt "$T"/howto/*.txt "$T"/howto/*.html | ||||||
| do | do | ||||||
| 	h=`expr "$th" : "$strip_leading"'\(.*\)'` | 	h=`expr "$th" : "$strip_leading"'\(.*\)'` | ||||||
| 	case "$h" in | 	case "$h" in | ||||||
|  |  | ||||||
|  | @ -0,0 +1,35 @@ | ||||||
|  | MERGE STRATEGIES | ||||||
|  | ---------------- | ||||||
|  |  | ||||||
|  | resolve:: | ||||||
|  | 	This can only resolve two heads (i.e. the current branch | ||||||
|  | 	and another branch you pulled from) using 3-way merge | ||||||
|  | 	algorithm.  It tries to carefully detect criss-cross | ||||||
|  | 	merge ambiguities and is considered generally safe and | ||||||
|  | 	fast.  This is the default merge strategy when pulling | ||||||
|  | 	one branch. | ||||||
|  |  | ||||||
|  | recursive:: | ||||||
|  | 	This can only resolve two heads using 3-way merge | ||||||
|  | 	algorithm.  When there are more than one common | ||||||
|  | 	ancestors that can be used for 3-way merge, it creates a | ||||||
|  | 	merged tree of the common ancestores and uses that as | ||||||
|  | 	the reference tree for the 3-way merge.  This has been | ||||||
|  | 	reported to result in fewer merge conflicts without | ||||||
|  | 	causing mis-merges by tests done on actual merge commits | ||||||
|  | 	taken from Linux 2.6 kernel development history. | ||||||
|  | 	Additionally this can detect and handle merges involving | ||||||
|  | 	renames. | ||||||
|  |  | ||||||
|  | octopus:: | ||||||
|  | 	This resolves more than two-head case, but refuses to do | ||||||
|  | 	complex merge that needs manual resolution.  It is | ||||||
|  | 	primarily meant to be used for bundling topic branch | ||||||
|  | 	heads together.  This is the default merge strategy when | ||||||
|  | 	pulling more than one branch. | ||||||
|  |  | ||||||
|  | ours:: | ||||||
|  | 	This resolves any number of heads, but the result of the | ||||||
|  | 	merge is always the current branch head.  It is meant to | ||||||
|  | 	be used to supersede old development history of side | ||||||
|  | 	branches. | ||||||
|  | @ -82,14 +82,19 @@ must know this is the expected usage pattern for a branch. | ||||||
| [NOTE] | [NOTE] | ||||||
| You never do your own development on branches that appear | You never do your own development on branches that appear | ||||||
| on the right hand side of a <refspec> colon on `Pull:` lines; | on the right hand side of a <refspec> colon on `Pull:` lines; | ||||||
| they are to be updated by `git-fetch`.  The corollary is that | they are to be updated by `git-fetch`.  If you intend to do | ||||||
| a local branch should be introduced and named on a <refspec> | development derived from a remote branch `B`, have a `Pull:` | ||||||
| right-hand-side if you intend to do development derived from | line to track it (i.e. `Pull: B:remote-B`), and have a separate | ||||||
| that branch. | branch `my-B` to do your development on top of it.  The latter | ||||||
| This leads to the common `Pull: master:origin` mapping of a | is created by `git branch my-B remote-B` (or its equivalent `git | ||||||
| remote `master` branch to a local `origin` branch, which | checkout -b my-B remote-B`).  Run `git fetch` to keep track of | ||||||
| is then merged to a local development branch, again typically | the progress of the remote side, and when you see something new | ||||||
| named `master`. | on the remote branch, merge it into your development branch with | ||||||
|  | `git pull . remote-B`, while you are on `my-B` branch. | ||||||
|  | The common `Pull: master:origin` mapping of a remote `master` | ||||||
|  | branch to a local `origin` branch, which is then merged to a | ||||||
|  | ocal development branch, again typically named `master`, is made | ||||||
|  | when you run `git clone` for you to follow this pattern. | ||||||
| + | + | ||||||
| [NOTE] | [NOTE] | ||||||
| There is a difference between listing multiple <refspec> | There is a difference between listing multiple <refspec> | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								INSTALL
								
								
								
								
							
							
						
						
									
										3
									
								
								INSTALL
								
								
								
								
							|  | @ -46,6 +46,9 @@ Issues of note: | ||||||
| 	  transfer, you are probabaly OK if you do not have | 	  transfer, you are probabaly OK if you do not have | ||||||
| 	  them. | 	  them. | ||||||
|  |  | ||||||
|  | 	- expat library; git-http-push uses it for remote lock | ||||||
|  | 	  management over DAV.  Similar to "curl" above, this is optional. | ||||||
|  |  | ||||||
| 	- "GNU diff" to generate patches.  Of course, you don't _have_ to | 	- "GNU diff" to generate patches.  Of course, you don't _have_ to | ||||||
| 	  generate patches if you don't want to, but let's face it, you'll | 	  generate patches if you don't want to, but let's face it, you'll | ||||||
| 	  be wanting to. Or why did you get git in the first place? | 	  be wanting to. Or why did you get git in the first place? | ||||||
|  |  | ||||||
							
								
								
									
										54
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										54
									
								
								Makefile
								
								
								
								
							|  | @ -6,12 +6,16 @@ | ||||||
| # Define NO_OPENSSL environment variable if you do not have OpenSSL. You will | # Define NO_OPENSSL environment variable if you do not have OpenSSL. You will | ||||||
| # miss out git-rev-list --merge-order. This also implies MOZILLA_SHA1. | # miss out git-rev-list --merge-order. This also implies MOZILLA_SHA1. | ||||||
| # | # | ||||||
| # Define NO_CURL if you do not have curl installed.  git-http-pull is not | # Define NO_CURL if you do not have curl installed.  git-http-pull and | ||||||
| # built, and you cannot use http:// and https:// transports. | # git-http-push are not built, and you cannot use http:// and https:// | ||||||
|  | # transports. | ||||||
| # | # | ||||||
| # Define CURLDIR=/foo/bar if your curl header and library files are in | # Define CURLDIR=/foo/bar if your curl header and library files are in | ||||||
| # /foo/bar/include and /foo/bar/lib directories. | # /foo/bar/include and /foo/bar/lib directories. | ||||||
| # | # | ||||||
|  | # Define NO_EXPAT if you do not have expat installed.  git-http-push is | ||||||
|  | # not built, and you cannot push using http:// and https:// transports. | ||||||
|  | # | ||||||
| # Define NO_STRCASESTR if you don't have strcasestr. | # Define NO_STRCASESTR if you don't have strcasestr. | ||||||
| # | # | ||||||
| # Define PPC_SHA1 environment variable when running make to make use of | # Define PPC_SHA1 environment variable when running make to make use of | ||||||
|  | @ -37,25 +41,20 @@ | ||||||
| # 1461501637330902918203684832716283019655932542976 hashes do not give you | # 1461501637330902918203684832716283019655932542976 hashes do not give you | ||||||
| # sufficient guarantee that no collisions between objects will ever happen. | # sufficient guarantee that no collisions between objects will ever happen. | ||||||
|  |  | ||||||
| # DEFINES += -DCOLLISION_CHECK |  | ||||||
|  |  | ||||||
| # Define USE_NSEC below if you want git to care about sub-second file mtimes | # Define USE_NSEC below if you want git to care about sub-second file mtimes | ||||||
| # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and | # and ctimes. Note that you need recent glibc (at least 2.2.4) for this, and | ||||||
| # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely | # it will BREAK YOUR LOCAL DIFFS! show-diff and anything using it will likely | ||||||
| # randomly break unless your underlying filesystem supports those sub-second | # randomly break unless your underlying filesystem supports those sub-second | ||||||
| # times (my ext3 doesn't). | # times (my ext3 doesn't). | ||||||
|  |  | ||||||
| # DEFINES += -DUSE_NSEC |  | ||||||
|  |  | ||||||
| # Define USE_STDEV below if you want git to care about the underlying device | # Define USE_STDEV below if you want git to care about the underlying device | ||||||
| # change being considered an inode change from the update-cache perspective. | # change being considered an inode change from the update-cache perspective. | ||||||
|  |  | ||||||
| # DEFINES += -DUSE_STDEV | GIT_VERSION = 0.99.9e | ||||||
|  |  | ||||||
| GIT_VERSION = 0.99.9d |  | ||||||
|  |  | ||||||
|  | # CFLAGS is for the users to override from the command line. | ||||||
| CFLAGS = -g -O2 -Wall | CFLAGS = -g -O2 -Wall | ||||||
| ALL_CFLAGS = $(CFLAGS) $(PLATFORM_DEFINES) $(DEFINES) | ALL_CFLAGS = $(CFLAGS) | ||||||
|  |  | ||||||
| prefix = $(HOME) | prefix = $(HOME) | ||||||
| bindir = $(prefix)/bin | bindir = $(prefix)/bin | ||||||
|  | @ -185,6 +184,10 @@ uname_O := $(shell sh -c 'uname -o 2>/dev/null || echo not') | ||||||
| ifeq ($(uname_S),Darwin) | ifeq ($(uname_S),Darwin) | ||||||
| 	NEEDS_SSL_WITH_CRYPTO = YesPlease | 	NEEDS_SSL_WITH_CRYPTO = YesPlease | ||||||
| 	NEEDS_LIBICONV = YesPlease | 	NEEDS_LIBICONV = YesPlease | ||||||
|  | 	## fink | ||||||
|  | 	ALL_CFLAGS += -I/sw/include -L/sw/lib | ||||||
|  | 	## darwinports | ||||||
|  | 	ALL_CFLAGS += -I/opt/local/include -L/opt/local/lib | ||||||
| endif | endif | ||||||
| ifeq ($(uname_S),SunOS) | ifeq ($(uname_S),SunOS) | ||||||
| 	NEEDS_SOCKET = YesPlease | 	NEEDS_SOCKET = YesPlease | ||||||
|  | @ -194,19 +197,19 @@ ifeq ($(uname_S),SunOS) | ||||||
| 	NO_STRCASESTR = YesPlease | 	NO_STRCASESTR = YesPlease | ||||||
| 	INSTALL = ginstall | 	INSTALL = ginstall | ||||||
| 	TAR = gtar | 	TAR = gtar | ||||||
| 	PLATFORM_DEFINES += -D__EXTENSIONS__ | 	ALL_CFLAGS += -D__EXTENSIONS__ | ||||||
| endif | endif | ||||||
| ifeq ($(uname_O),Cygwin) | ifeq ($(uname_O),Cygwin) | ||||||
| 	NO_STRCASESTR = YesPlease | 	NO_STRCASESTR = YesPlease | ||||||
| 	NEEDS_LIBICONV = YesPlease | 	NEEDS_LIBICONV = YesPlease | ||||||
| 	NO_IPV6 = YesPlease | 	NO_IPV6 = YesPlease | ||||||
| 	X = .exe | 	X = .exe | ||||||
| 	PLATFORM_DEFINES += -DUSE_SYMLINK_HEAD=0 | 	ALL_CFLAGS += -DUSE_SYMLINK_HEAD=0 | ||||||
| endif | endif | ||||||
| ifeq ($(uname_S),OpenBSD) | ifeq ($(uname_S),OpenBSD) | ||||||
| 	NO_STRCASESTR = YesPlease | 	NO_STRCASESTR = YesPlease | ||||||
| 	NEEDS_LIBICONV = YesPlease | 	NEEDS_LIBICONV = YesPlease | ||||||
| 	PLATFORM_DEFINES += -I/usr/local/include -L/usr/local/lib | 	ALL_CFLAGS += -I/usr/local/include -L/usr/local/lib | ||||||
| endif | endif | ||||||
| ifneq (,$(findstring arm,$(uname_M))) | ifneq (,$(findstring arm,$(uname_M))) | ||||||
| 	ARM_SHA1 = YesPlease | 	ARM_SHA1 = YesPlease | ||||||
|  | @ -217,12 +220,16 @@ endif | ||||||
| ifndef NO_CURL | ifndef NO_CURL | ||||||
| 	ifdef CURLDIR | 	ifdef CURLDIR | ||||||
| 		# This is still problematic -- gcc does not want -R. | 		# This is still problematic -- gcc does not want -R. | ||||||
| 		CFLAGS += -I$(CURLDIR)/include | 		ALL_CFLAGS += -I$(CURLDIR)/include | ||||||
| 		CURL_LIBCURL = -L$(CURLDIR)/lib -R$(CURLDIR)/lib -lcurl | 		CURL_LIBCURL = -L$(CURLDIR)/lib -R$(CURLDIR)/lib -lcurl | ||||||
| 	else | 	else | ||||||
| 		CURL_LIBCURL = -lcurl | 		CURL_LIBCURL = -lcurl | ||||||
| 	endif | 	endif | ||||||
| 	PROGRAMS += git-http-fetch$X | 	PROGRAMS += git-http-fetch$X | ||||||
|  | 	ifndef NO_EXPAT | ||||||
|  | 		EXPAT_LIBEXPAT = -lexpat | ||||||
|  | 		PROGRAMS += git-http-push$X | ||||||
|  | 	endif | ||||||
| endif | endif | ||||||
|  |  | ||||||
| ifndef SHELL_PATH | ifndef SHELL_PATH | ||||||
|  | @ -240,13 +247,13 @@ ifndef NO_OPENSSL | ||||||
| 	OPENSSL_LIBSSL = -lssl | 	OPENSSL_LIBSSL = -lssl | ||||||
| 	ifdef OPENSSLDIR | 	ifdef OPENSSLDIR | ||||||
| 		# Again this may be problematic -- gcc does not always want -R. | 		# Again this may be problematic -- gcc does not always want -R. | ||||||
| 		CFLAGS += -I$(OPENSSLDIR)/include | 		ALL_CFLAGS += -I$(OPENSSLDIR)/include | ||||||
| 		OPENSSL_LINK = -L$(OPENSSLDIR)/lib -R$(OPENSSLDIR)/lib | 		OPENSSL_LINK = -L$(OPENSSLDIR)/lib -R$(OPENSSLDIR)/lib | ||||||
| 	else | 	else | ||||||
| 		OPENSSL_LINK = | 		OPENSSL_LINK = | ||||||
| 	endif | 	endif | ||||||
| else | else | ||||||
| 	DEFINES += -DNO_OPENSSL | 	ALL_CFLAGS += -DNO_OPENSSL | ||||||
| 	MOZILLA_SHA1 = 1 | 	MOZILLA_SHA1 = 1 | ||||||
| 	OPENSSL_LIBSSL = | 	OPENSSL_LIBSSL = | ||||||
| endif | endif | ||||||
|  | @ -258,7 +265,7 @@ endif | ||||||
| ifdef NEEDS_LIBICONV | ifdef NEEDS_LIBICONV | ||||||
| 	ifdef ICONVDIR | 	ifdef ICONVDIR | ||||||
| 		# Again this may be problematic -- gcc does not always want -R. | 		# Again this may be problematic -- gcc does not always want -R. | ||||||
| 		CFLAGS += -I$(ICONVDIR)/include | 		ALL_CFLAGS += -I$(ICONVDIR)/include | ||||||
| 		ICONV_LINK = -L$(ICONVDIR)/lib -R$(ICONVDIR)/lib | 		ICONV_LINK = -L$(ICONVDIR)/lib -R$(ICONVDIR)/lib | ||||||
| 	else | 	else | ||||||
| 		ICONV_LINK = | 		ICONV_LINK = | ||||||
|  | @ -276,15 +283,15 @@ ifdef NEEDS_NSL | ||||||
| 	SIMPLE_LIB += -lnsl | 	SIMPLE_LIB += -lnsl | ||||||
| endif | endif | ||||||
| ifdef NO_STRCASESTR | ifdef NO_STRCASESTR | ||||||
| 	DEFINES += -Dstrcasestr=gitstrcasestr -DNO_STRCASESTR=1 | 	ALL_CFLAGS += -Dstrcasestr=gitstrcasestr -DNO_STRCASESTR=1 | ||||||
| 	LIB_OBJS += compat/strcasestr.o | 	LIB_OBJS += compat/strcasestr.o | ||||||
| endif | endif | ||||||
| ifdef NO_MMAP | ifdef NO_MMAP | ||||||
| 	DEFINES += -Dmmap=gitfakemmap -Dmunmap=gitfakemunmap -DNO_MMAP | 	ALL_CFLAGS += -Dmmap=gitfakemmap -Dmunmap=gitfakemunmap -DNO_MMAP | ||||||
| 	LIB_OBJS += compat/mmap.o | 	LIB_OBJS += compat/mmap.o | ||||||
| endif | endif | ||||||
| ifdef NO_IPV6 | ifdef NO_IPV6 | ||||||
| 	DEFINES += -DNO_IPV6 -Dsockaddr_storage=sockaddr_in | 	ALL_CFLAGS += -DNO_IPV6 -Dsockaddr_storage=sockaddr_in | ||||||
| endif | endif | ||||||
|  |  | ||||||
| ifdef PPC_SHA1 | ifdef PPC_SHA1 | ||||||
|  | @ -305,7 +312,7 @@ endif | ||||||
| endif | endif | ||||||
| endif | endif | ||||||
|  |  | ||||||
| DEFINES += -DSHA1_HEADER=$(call shellquote,$(SHA1_HEADER)) | ALL_CFLAGS += -DSHA1_HEADER=$(call shellquote,$(SHA1_HEADER)) | ||||||
|  |  | ||||||
| SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \ | SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \ | ||||||
| 	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \ | 	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \ | ||||||
|  | @ -375,6 +382,7 @@ git-ssh-pull$X: rsh.o fetch.o | ||||||
| git-ssh-push$X: rsh.o | git-ssh-push$X: rsh.o | ||||||
|  |  | ||||||
| git-http-fetch$X: LIBS += $(CURL_LIBCURL) | git-http-fetch$X: LIBS += $(CURL_LIBCURL) | ||||||
|  | git-http-push$X: LIBS += $(CURL_LIBCURL) $(EXPAT_LIBEXPAT) | ||||||
| git-rev-list$X: LIBS += $(OPENSSL_LIBSSL) | git-rev-list$X: LIBS += $(OPENSSL_LIBSSL) | ||||||
|  |  | ||||||
| init-db.o: init-db.c | init-db.o: init-db.c | ||||||
|  | @ -454,8 +462,8 @@ clean: | ||||||
| 	rm -f git-core.spec *.pyc *.pyo | 	rm -f git-core.spec *.pyc *.pyo | ||||||
| 	rm -rf $(GIT_TARNAME) | 	rm -rf $(GIT_TARNAME) | ||||||
| 	rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz | 	rm -f $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz | ||||||
| 	rm -f git-core_$(GIT_VERSION)-*.deb git-core_$(GIT_VERSION)-*.dsc | 	rm -f git-core_$(GIT_VERSION)-*.dsc | ||||||
| 	rm -f git-tk_$(GIT_VERSION)-*.deb | 	rm -f git-*_$(GIT_VERSION)-*.deb | ||||||
| 	$(MAKE) -C Documentation/ clean | 	$(MAKE) -C Documentation/ clean | ||||||
| 	$(MAKE) -C templates clean | 	$(MAKE) -C templates clean | ||||||
| 	$(MAKE) -C t/ clean | 	$(MAKE) -C t/ clean | ||||||
|  |  | ||||||
|  | @ -1,3 +1,9 @@ | ||||||
|  | git-core (0.99.9e-0) unstable; urgency=low | ||||||
|  |  | ||||||
|  |   * GIT 0.99.9e | ||||||
|  |  | ||||||
|  |  -- Junio C Hamano <junkio@cox.net>  Sun,  6 Nov 2005 18:37:18 -0800 | ||||||
|  |  | ||||||
| git-core (0.99.9d-0) unstable; urgency=low | git-core (0.99.9d-0) unstable; urgency=low | ||||||
|  |  | ||||||
|   * GIT 0.99.9d |   * GIT 0.99.9d | ||||||
|  | @ -22,6 +28,19 @@ git-core (0.99.9a-0) unstable; urgency=low | ||||||
|  |  | ||||||
|  -- Junio C Hamano <junkio@cox.net>  Sun, 30 Oct 2005 15:03:32 -0800 |  -- Junio C Hamano <junkio@cox.net>  Sun, 30 Oct 2005 15:03:32 -0800 | ||||||
|  |  | ||||||
|  | git-core (0.99.9.GIT-0) unstable; urgency=low | ||||||
|  |  | ||||||
|  |   * Test Build. | ||||||
|  |  | ||||||
|  |  -- Junio C Hamano <junkio@cox.net>  Sat,  5 Nov 2005 11:18:13 -0800 | ||||||
|  |  | ||||||
|  | git-core (0.99.9-1) unstable; urgency=low | ||||||
|  |  | ||||||
|  |   * Split the git-core binary package into core, doc, and foreign SCM | ||||||
|  |     interoperability modules. | ||||||
|  |  | ||||||
|  |  -- Junio C Hamano <junkio@cox.net>  Sat,  5 Nov 2005 11:18:13 -0800 | ||||||
|  |  | ||||||
| git-core (0.99.9-0) unstable; urgency=low | git-core (0.99.9-0) unstable; urgency=low | ||||||
|  |  | ||||||
|   * GIT 0.99.9 |   * GIT 0.99.9 | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ Standards-Version: 3.6.1 | ||||||
| Package: git-core | Package: git-core | ||||||
| Architecture: any | Architecture: any | ||||||
| Depends: ${shlibs:Depends}, ${perl:Depends}, ${misc:Depends}, rcs | Depends: ${shlibs:Depends}, ${perl:Depends}, ${misc:Depends}, rcs | ||||||
| Recommends: rsync, curl, ssh, libmail-sendmail-perl, libemail-valid-perl, libsvn-core-perl (>= 1.2.1), python (>= 2.4.0), less | Recommends: rsync, curl, ssh, python (>= 2.4.0), less | ||||||
| Suggests: cogito, patch | Suggests: cogito, patch | ||||||
| Conflicts: git, cogito (<< 0.13) | Conflicts: git, cogito (<< 0.13) | ||||||
| Description: The git content addressable filesystem | Description: The git content addressable filesystem | ||||||
|  | @ -18,9 +18,46 @@ Description: The git content addressable filesystem | ||||||
|  enables human beings to work with the database in a manner to a degree |  enables human beings to work with the database in a manner to a degree | ||||||
|  similar to other SCM tools. |  similar to other SCM tools. | ||||||
|  |  | ||||||
|  | Package: git-doc | ||||||
|  | Architecture: all | ||||||
|  | Depends: ${shlibs:Depends}, ${misc:Depends}, git-core | ||||||
|  | Description: The git content addressable filesystem, Documentation | ||||||
|  |  This package contains documentation for GIT. | ||||||
|  |  | ||||||
| Package: git-tk | Package: git-tk | ||||||
| Architecture: all | Architecture: all | ||||||
| Depends: ${shlibs:Depends}, ${misc:Depends}, git-core, tk8.4 | Depends: ${shlibs:Depends}, ${misc:Depends}, git-core, tk8.4 | ||||||
| Description: The git content addressable filesystem, GUI add-on | Description: The git content addressable filesystem, GUI add-on | ||||||
|  This package contains 'gitk', the git revision tree visualizer. |  This package contains 'gitk', the git revision tree visualizer. | ||||||
|  |  | ||||||
|  | Package: git-svn | ||||||
|  | Architecture: all | ||||||
|  | Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, git-core, libsvn-core-perl (>= 1.2.1) | ||||||
|  | Suggests: subversion | ||||||
|  | Description: The git content addressable filesystem, SVN interoperability | ||||||
|  |  This package contains 'git-svnimport', to import development history from | ||||||
|  |  SVN repositories. | ||||||
|  |  | ||||||
|  | Package: git-arch | ||||||
|  | Architecture: all | ||||||
|  | Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, git-core | ||||||
|  | Suggests: tla, bazaar | ||||||
|  | Description: The git content addressable filesystem, GNUArch interoperability | ||||||
|  |  This package contains 'git-archimport', to import development history from | ||||||
|  |  GNUArch repositories. | ||||||
|  |  | ||||||
|  | Package: git-cvs | ||||||
|  | Architecture: all | ||||||
|  | Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, git-core | ||||||
|  | Suggests: cvs | ||||||
|  | Description: The git content addressable filesystem, CVS interoperability | ||||||
|  |  This package contains 'git-cvsimport', to import development history from | ||||||
|  |  CVS repositories. | ||||||
|  |  | ||||||
|  | Package: git-email | ||||||
|  | Architecture: all | ||||||
|  | Depends: ${shlibs:Depends}, ${misc:Depends}, git-core, libmail-sendmail-perl, libemail-valid-perl | ||||||
|  | Description: The git content addressable filesystem, e-mail add-on | ||||||
|  |  This package contains 'git-send-email', to send a series of patch e-mails. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | /usr/bin/git-archimport | ||||||
|  | /usr/share/doc/git-core/git-archimport.* | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | /usr/bin/git-cvsimport | ||||||
|  | /usr/share/doc/git-core/git-cvsimport.* | ||||||
|  | @ -0,0 +1,7 @@ | ||||||
|  | /usr/share/doc/git-core/*.txt | ||||||
|  | /usr/share/doc/git-core/*.html | ||||||
|  | /usr/share/doc/git-core/*/*.html | ||||||
|  | /usr/share/doc/git-core/*/*.txt | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | /usr/bin/git-send-email | ||||||
|  | /usr/share/doc/git-core/git-send-email.* | ||||||
|  | @ -0,0 +1,2 @@ | ||||||
|  | /usr/bin/git-svnimport | ||||||
|  | /usr/share/doc/git-core/git-svnimport.* | ||||||
|  | @ -41,7 +41,7 @@ MAN_DESTDIR := $(DESTDIR)/$(MANDIR) | ||||||
| build: debian/build-stamp | build: debian/build-stamp | ||||||
| debian/build-stamp: | debian/build-stamp: | ||||||
| 	dh_testdir | 	dh_testdir | ||||||
| 	$(MAKE) prefix=$(PREFIX) PYTHON_PATH=/usr/bin/python2.4 all doc test | 	$(MAKE) prefix=$(PREFIX) PYTHON_PATH=/usr/bin/python2.4 all test doc | ||||||
| 	touch debian/build-stamp | 	touch debian/build-stamp | ||||||
|  |  | ||||||
| debian-clean: | debian-clean: | ||||||
|  | @ -62,10 +62,15 @@ install: build | ||||||
| 	make DESTDIR=$(DESTDIR) prefix=$(PREFIX) mandir=$(MANDIR) \ | 	make DESTDIR=$(DESTDIR) prefix=$(PREFIX) mandir=$(MANDIR) \ | ||||||
| 		install install-doc | 		install install-doc | ||||||
|  |  | ||||||
| 	mkdir -p $(DOC_DESTDIR) | 	make -C Documentation DESTDIR=$(DESTDIR) prefix=$(PREFIX) \ | ||||||
| 	find $(DOC) '(' -name '*.txt' -o -name '*.html' ')' -exec install {} $(DOC_DESTDIR) ';' | 		WEBDOC_DEST=$(DOC_DESTDIR) install-webdoc | ||||||
|  |  | ||||||
|  | 	dh_movefiles -p git-arch | ||||||
|  | 	dh_movefiles -p git-cvs | ||||||
|  | 	dh_movefiles -p git-svn | ||||||
| 	dh_movefiles -p git-tk | 	dh_movefiles -p git-tk | ||||||
|  | 	dh_movefiles -p git-email | ||||||
|  | 	dh_movefiles -p git-doc | ||||||
| 	dh_movefiles -p git-core | 	dh_movefiles -p git-core | ||||||
| 	find debian/tmp -type d -o -print | sed -e 's/^/? /' | 	find debian/tmp -type d -o -print | sed -e 's/^/? /' | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								fetch-pack.c
								
								
								
								
							
							
						
						
									
										14
									
								
								fetch-pack.c
								
								
								
								
							|  | @ -458,5 +458,19 @@ int main(int argc, char **argv) | ||||||
| 	close(fd[0]); | 	close(fd[0]); | ||||||
| 	close(fd[1]); | 	close(fd[1]); | ||||||
| 	finish_connect(pid); | 	finish_connect(pid); | ||||||
|  |  | ||||||
|  | 	if (!ret && nr_heads) { | ||||||
|  | 		/* If the heads to pull were given, we should have | ||||||
|  | 		 * consumed all of them by matching the remote. | ||||||
|  | 		 * Otherwise, 'git-fetch remote no-such-ref' would | ||||||
|  | 		 * silently succeed without issuing an error. | ||||||
|  | 		 */ | ||||||
|  | 		for (i = 0; i < nr_heads; i++) | ||||||
|  | 			if (heads[i] && heads[i][0]) { | ||||||
|  | 				error("no such remote ref %s", heads[i]); | ||||||
|  | 				ret = 1; | ||||||
|  | 			} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										12
									
								
								git-clone.sh
								
								
								
								
							
							
						
						
									
										12
									
								
								git-clone.sh
								
								
								
								
							|  | @ -202,8 +202,16 @@ then | ||||||
| 		mkdir -p .git/remotes && | 		mkdir -p .git/remotes && | ||||||
| 		echo >.git/remotes/origin \ | 		echo >.git/remotes/origin \ | ||||||
| 		"URL: $repo | 		"URL: $repo | ||||||
| Pull: $head_points_at:origin" | Pull: $head_points_at:origin" && | ||||||
| 		cp ".git/refs/heads/$head_points_at" .git/refs/heads/origin | 		cp ".git/refs/heads/$head_points_at" .git/refs/heads/origin && | ||||||
|  | 		find .git/refs/heads -type f -print | | ||||||
|  | 		while read ref | ||||||
|  | 		do | ||||||
|  | 			head=`expr "$ref" : '.git/refs/heads/\(.*\)'` && | ||||||
|  | 			test "$head_points_at" = "$head" || | ||||||
|  | 			test "origin" = "$head" || | ||||||
|  | 			echo "Pull: ${head}:${head}" | ||||||
|  | 		done >>.git/remotes/origin | ||||||
| 	esac | 	esac | ||||||
|  |  | ||||||
| 	case "$no_checkout" in | 	case "$no_checkout" in | ||||||
|  |  | ||||||
|  | @ -101,7 +101,7 @@ case "$#,$1" in | ||||||
| 	;; | 	;; | ||||||
| 1,?*..) | 1,?*..) | ||||||
| 	# single "rev1.." should mean "rev1..HEAD" | 	# single "rev1.." should mean "rev1..HEAD" | ||||||
| 	set x "$1"HEAD" | 	set x "$1"HEAD | ||||||
| 	shift | 	shift | ||||||
| 	;; | 	;; | ||||||
| 1,*) | 1,*) | ||||||
|  |  | ||||||
|  | @ -41,7 +41,7 @@ git-update-index -q --unmerged --refresh || exit | ||||||
|  |  | ||||||
| if GIT_DIR="$GIT_DIR" git-rev-parse --verify HEAD >/dev/null 2>&1 | if GIT_DIR="$GIT_DIR" git-rev-parse --verify HEAD >/dev/null 2>&1 | ||||||
| then | then | ||||||
| 	git-diff-index -M --cached --name-status HEAD | | 	git-diff-index -M --cached --name-status --diff-filter=MDTCRA HEAD | | ||||||
| 	sed -e ' | 	sed -e ' | ||||||
| 		s/\\/\\\\/g | 		s/\\/\\\\/g | ||||||
| 		s/ /\\ /g | 		s/ /\\ /g | ||||||
|  |  | ||||||
|  | @ -578,6 +578,7 @@ void process_curl_messages(void) | ||||||
|  |  | ||||||
| 	while (curl_message != NULL) { | 	while (curl_message != NULL) { | ||||||
| 		if (curl_message->msg == CURLMSG_DONE) { | 		if (curl_message->msg == CURLMSG_DONE) { | ||||||
|  | 			int curl_result = curl_message->data.result; | ||||||
| 			slot = active_queue_head; | 			slot = active_queue_head; | ||||||
| 			while (slot != NULL && | 			while (slot != NULL && | ||||||
| 			       slot->curl != curl_message->easy_handle) | 			       slot->curl != curl_message->easy_handle) | ||||||
|  | @ -587,7 +588,7 @@ void process_curl_messages(void) | ||||||
| 				active_requests--; | 				active_requests--; | ||||||
| 				slot->done = 1; | 				slot->done = 1; | ||||||
| 				slot->in_use = 0; | 				slot->in_use = 0; | ||||||
| 				slot->curl_result = curl_message->data.result; | 				slot->curl_result = curl_result; | ||||||
| 				curl_easy_getinfo(slot->curl, | 				curl_easy_getinfo(slot->curl, | ||||||
| 						  CURLINFO_HTTP_CODE, | 						  CURLINFO_HTTP_CODE, | ||||||
| 						  &slot->http_code); | 						  &slot->http_code); | ||||||
|  | @ -599,8 +600,7 @@ void process_curl_messages(void) | ||||||
| 				fprintf(stderr, "Received DONE message for unknown request!\n"); | 				fprintf(stderr, "Received DONE message for unknown request!\n"); | ||||||
| 			} | 			} | ||||||
| 			if (request != NULL) { | 			if (request != NULL) { | ||||||
| 				request->curl_result = | 				request->curl_result = curl_result; | ||||||
| 					curl_message->data.result; |  | ||||||
| 				request->http_code = slot->http_code; | 				request->http_code = slot->http_code; | ||||||
| 				request->slot = NULL; | 				request->slot = NULL; | ||||||
| 				request->state = COMPLETE; | 				request->state = COMPLETE; | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										26
									
								
								ls-files.c
								
								
								
								
							
							
						
						
									
										26
									
								
								ls-files.c
								
								
								
								
							|  | @ -348,6 +348,29 @@ static void show_dir_entry(const char *tag, struct nond_on_fs *ent) | ||||||
| 	putchar(line_terminator); | 	putchar(line_terminator); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | static void show_other_files(void) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 	for (i = 0; i < nr_dir; i++) { | ||||||
|  | 		/* We should not have a matching entry, but we | ||||||
|  | 		 * may have an unmerged entry for this path. | ||||||
|  | 		 */ | ||||||
|  | 		struct nond_on_fs *ent = dir[i]; | ||||||
|  | 		int pos = cache_name_pos(ent->name, ent->len); | ||||||
|  | 		struct cache_entry *ce; | ||||||
|  | 		if (0 <= pos) | ||||||
|  | 			die("bug in show-other-files"); | ||||||
|  | 		pos = -pos - 1; | ||||||
|  | 		if (pos < active_nr) {  | ||||||
|  | 			ce = active_cache[pos]; | ||||||
|  | 			if (ce_namelen(ce) == ent->len && | ||||||
|  | 			    !memcmp(ce->name, ent->name, ent->len)) | ||||||
|  | 				continue; /* Yup, this one exists unmerged */ | ||||||
|  | 		} | ||||||
|  | 		show_dir_entry(tag_other, ent); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| static void show_killed_files(void) | static void show_killed_files(void) | ||||||
| { | { | ||||||
| 	int i; | 	int i; | ||||||
|  | @ -438,8 +461,7 @@ static void show_files(void) | ||||||
| 		read_directory(path, base, baselen); | 		read_directory(path, base, baselen); | ||||||
| 		qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name); | 		qsort(dir, nr_dir, sizeof(struct nond_on_fs *), cmp_name); | ||||||
| 		if (show_others) | 		if (show_others) | ||||||
| 			for (i = 0; i < nr_dir; i++) | 			show_other_files(); | ||||||
| 				show_dir_entry(tag_other, dir[i]); |  | ||||||
| 		if (show_killed) | 		if (show_killed) | ||||||
| 			show_killed_files(); | 			show_killed_files(); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | @ -51,6 +51,8 @@ int get_sha1_hex(const char *hex, unsigned char *sha1) | ||||||
| int safe_create_leading_directories(char *path) | int safe_create_leading_directories(char *path) | ||||||
| { | { | ||||||
| 	char *pos = path; | 	char *pos = path; | ||||||
|  | 	if (*pos == '/') | ||||||
|  | 		pos++; | ||||||
|  |  | ||||||
| 	while (pos) { | 	while (pos) { | ||||||
| 		pos = strchr(pos, '/'); | 		pos = strchr(pos, '/'); | ||||||
|  |  | ||||||
|  | @ -32,6 +32,6 @@ test_expect_success apply \ | ||||||
|     'git-apply --index --stat --summary --apply test-patch' |     'git-apply --index --stat --summary --apply test-patch' | ||||||
|  |  | ||||||
| test_expect_success validate \ | test_expect_success validate \ | ||||||
|     'test -f bar && ls -l bar | grep "^-..x..x..x"' |     'test -f bar && ls -l bar | grep "^-..x......"' | ||||||
|  |  | ||||||
| test_done | test_done | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano