*.exe
libgit.a
*.o
+*.py[co]
git has a couple of alternatives, though, that you may find sufficient
or even superior depending on your use. One is called "git-whatchanged"
(for obvious reasons) and the other one is called "pickaxe" ("a tool for
-the software archeologist").
+the software archaeologist").
The "git-whatchanged" script is a truly trivial script that can give you
a good overview of what has changed in a file or a directory (or an
What -p option produces is slightly different from the
traditional diff format.
-1. It is preceeded with a "git diff" header, that looks like
+1. It is preceded with a "git diff" header, that looks like
this:
diff --git a/file1 b/file2
--abbrev[=<n>]::
Instead of showing the full 40-byte hexadecimal object
name in diff-raw format output and diff-tree header
- lines, show only handful dhexigits prefix. This is
+ lines, show only handful hexdigits prefix. This is
independent of --full-index option above, which controls
the diff-patch output format. Non default number of
digits can be specified with --abbrev=<n>.
----------
The list of <file> given to the command is fed to `git-ls-files`
-command to list files that are not registerd in the index and
+command to list files that are not registered in the index and
are not ignored/excluded by `$GIT_DIR/info/exclude` file or
`.gitignore` file in each directory. This means two things:
SYNOPSIS
--------
+[verse]
'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>...
'git-am' [--skip | --resolved]
SYNOPSIS
--------
-'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [<patch>...]
+[verse]
+'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply]
+ [--no-add] [--index-info] [--allow-binary-replacement] [-z]
+ [<patch>...]
DESCRIPTION
-----------
SYNOPSIS
--------
-`git-archimport` [ -h ] [ -v ] [ -o ] [ -a ] [ -f ] [ -T ]
- [ -D depth ] [ -t tempdir ]
- <archive/branch> [ <archive/branch> ]
+[verse]
+`git-archimport` [-h] [-v] [-o] [-a] [-f] [-T] [-D depth] [-t tempdir]
+ <archive/branch> [ <archive/branch> ]
DESCRIPTION
-----------
Imports a project from one or more Arch repositories. It will follow branches
and repositories within the namespaces defined by the <archive/branch>
-parameters suppplied. If it cannot find the remote branch a merge comes from
+parameters supplied. If it cannot find the remote branch a merge comes from
it will just import it as a regular commit. If it can find it, it will mark it
as a merge whenever possible (see discussion below).
SYNOPSIS
--------
-'git-cat-file' (-t | -s | -e | <type>) <object>
+'git-cat-file' [-t | -s | -e | <type>] <object>
DESCRIPTION
-----------
SYNOPSIS
--------
+[verse]
'git-checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
- [--stage=<number>] [--] <file>...
+ [--stage=<number>] [--] <file>...
DESCRIPTION
-----------
SYNOPSIS
--------
-'git-clone' [-l [-s]] [-q] [-n] [-o <name>] [-u <upload-pack>] <repository> [<directory>]
+[verse]
+'git-clone' [-l [-s]] [-q] [-n] [-o <name>] [-u <upload-pack>]
+ <repository> [<directory>]
DESCRIPTION
-----------
(nb "<", ">" and "\n"s are stripped)
-In `.git/config` file, the following items are used:
+In `.git/config` file, the following items are used for GIT_AUTHOR_NAME and
+GIT_AUTHOR_EMAIL:
[user]
name = "Your Name"
SYNOPSIS
--------
-'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] [-e] [--] <file>...
+[verse]
+'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>]
+ [-e] [--] <file>...
DESCRIPTION
-----------
SYNOPSIS
--------
-git-cvsexportcommmit.perl
- [ -h ] [ -v ] [ -c ] [ -p ] [PARENTCOMMIT] COMMITID
+'git-cvsexportcommmit' [-h] [-v] [-c] [-p] [PARENTCOMMIT] COMMITID
DESCRIPTION
SYNOPSIS
--------
-'git-cvsimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ]
- [ -d <CVSROOT> ] [ -p <options-for-cvsps> ]
- [ -C <git_repository> ] [ -i ] [ -P <file> ] [ -k ]
- [ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ]
+[verse]
+'git-cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>] [-s <subst>]
+ [-p <options-for-cvsps>] [-C <git_repository>] [-i] [-P <file>]
+ [-m] [-M regex] [<CVS_module>]
DESCRIPTION
SYNOPSIS
--------
+[verse]
'git-daemon' [--verbose] [--syslog] [--inetd | --port=n] [--export-all]
- [--timeout=n] [--init-timeout=n] [--strict-paths] [directory...]
+ [--timeout=n] [--init-timeout=n] [--strict-paths] [directory...]
DESCRIPTION
-----------
contents (the ones I'd write with a "git-write-tree")
For example, let's say that you have worked on your working directory, updated
-some files in the index and are ready to commit. You want to see eactly
+some files in the index and are ready to commit. You want to see exactly
*what* you are going to commit is without having to write a new tree
object and compare it that way, and to do that, you just do
actually look at the contents of the file at all. So maybe
`kernel/sched.c` hasn't actually changed, and it's just that you
touched it. In either case, it's a note that you need to
-"git-upate-index" it to make the index be in sync.
+"git-update-index" it to make the index be in sync.
NOTE: You can have a mixture of files show up as "has been updated"
and "is still dirty in the working directory" together. You can always
SYNOPSIS
--------
-'git-diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r] [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
+[verse]
+'git-diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r]
+ [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
DESCRIPTION
-----------
-s::
By default, "git-diff-tree --stdin" shows differences,
either in machine-readable form (without '-p') or in patch
- form (with '-p'). This output can be supressed. It is
+ form (with '-p'). This output can be suppressed. It is
only useful with '-v' flag.
-v::
<1> instead of using the tip of the current branch, compare with the
tip of "test" branch.
<2> instead of comparing with the tip of "test" branch, compare with
-the tip of the curren branch, but limit the comparison to the
+the tip of the current branch, but limit the comparison to the
file "test".
<3> compare the version before the last commit and the last commit.
------------
SYNOPSIS
--------
-'git-format-patch' [-n | -k] [-o <dir> | --stdout] [-s] [-c] [--mbox] [--diff-options] <his> [<mine>]
+[verse]
+'git-format-patch' [-n | -k] [-o <dir> | --stdout] [-s] [-c] [--mbox]
+ [--diff-options] <his> [<mine>]
DESCRIPTION
-----------
See Also
--------
-gitlink:git-am[1], gitlink:git-send-email
+gitlink:git-am[1], gitlink:git-send-email[1]
Author
SYNOPSIS
--------
-'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache] [--standalone | --full] [--strict] [<object>*]
+[verse]
+'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache]
+ [--standalone | --full] [--strict] [<object>*]
DESCRIPTION
-----------
SYNOPSIS
--------
-'git-grep' <option>... <pattern> <path>...
+'git-grep' [<option>...] <pattern> [<path>...]
DESCRIPTION
-----------
The pattern to look for.
<path>...::
-
Optional paths to limit the set of files to be searched;
passed to `git-ls-files`.
NAME
----
-git-http-fetch - Downloads a remote git repository via HTTP
+git-http-fetch - downloads a remote git repository via HTTP
SYNOPSIS
--------
-'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] commit-id url
+'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] <commit> <url>
DESCRIPTION
-----------
SYNOPSIS
--------
-'git-init-db' [--template=<template_directory>]
+'git-init-db' [--template=<template_directory>] [--shared]
OPTIONS
--template=<template_directory>::
Provide the directory in from which templates will be used.
+--shared::
+ Specify that the git repository is to be shared amongst several users.
+
DESCRIPTION
-----------
environment variable then the sha1 directories are created underneath -
otherwise the default `$GIT_DIR/objects` directory is used.
-`git-init-db` won't hurt an existing repository.
+A shared repository allows users belonging to the same group to push into that
+repository. When specifying `--shared` the config variable "core.sharedRepository"
+is set to 'true' so that directories under `$GIT_DIR` are made group writable
+(and g+sx, since the git group may be not the primary group of all users).
+
+
+Running `git-init-db` in an existing repository is safe. It will not overwrite
+things that are already there. The primary reason for rerunning `git-init-db`
+is to pick up newly added templates.
+
EXAMPLES
H:: cached
M:: unmerged
R:: removed/deleted
- C:: modifed/changed
+ C:: modified/changed
K:: to be killed
? other
output of the command.
--stdout::
- Write the pack contents (what would have been writtin to
+ Write the pack contents (what would have been written to
.pack file) out to the standard output.
--window and --depth::
actually the section and the key separated by a dot, and the value will be
escaped.
-If you want to set/unset an option which can occor on multiple lines, you
+If you want to set/unset an option which can occur on multiple lines, you
should provide a POSIX regex for the value. If you want to handle the lines
-*not* matching the regex, just prepend a single exlamation mark in front
+*not* matching the regex, just prepend a single exclamation mark in front
(see EXAMPLES).
This command will fail if
SYNOPSIS
--------
+[verse]
'git-rev-list' [ \--max-count=number ]
- [ \--max-age=timestamp ]
- [ \--min-age=timestamp ]
- [ \--sparse ]
- [ \--no-merges ]
- [ \--all ]
- [ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] | ]
- [ \--parents ]
- [ \--objects [ \--unpacked ] ]
- [ \--pretty | \--header | ]
- [ \--bisect ]
- <commit>... [ \-- <paths>... ]
+ [ \--max-age=timestamp ]
+ [ \--min-age=timestamp ]
+ [ \--sparse ]
+ [ \--no-merges ]
+ [ \--all ]
+ [ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] ]
+ [ \--parents ]
+ [ \--objects [ \--unpacked ] ]
+ [ \--pretty | \--header ]
+ [ \--bisect ]
+ <commit>... [ \-- <paths>... ]
DESCRIPTION
-----------
+
Commits marked with (^) are not parents of the immediately preceding commit.
These "breaks" represent necessary discontinuities implied by trying to
-represent an arbtirary DAG in a linear form.
+represent an arbitrary DAG in a linear form.
+
`--show-breaks` is only valid if `--merge-order` is also specified.
displayed, indented N places. If a commit is on the I-th
branch, the I-th indentation character shows a '+' sign;
otherwise it shows a space. Each commit shows a short name that
-can be used as an exended SHA1 to name that commit.
+can be used as an extended SHA1 to name that commit.
The following example shows three branches, "master", "fixes"
and "mhf":
--------
'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
[ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev]
- [ -b branch_subdir ] [ -t trunk_subdir ] [ -T tag_subdir ]
+ [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
[ -s start_chg ] [ -m ] [ -M regex ]
<SVN_repository_URL> [ <path> ]
-s <start_rev>::
Start importing at this SVN change number. The default is 1.
+
-When importing incementally, you might need to edit the .git/svn2git file.
+When importing incrementally, you might need to edit the .git/svn2git file.
-i::
Import-only: don't perform a checkout after importing. This option
ensures the working directory and index remain untouched and will
not create them if they do not exist.
--t <trunk_subdir>::
+-T <trunk_subdir>::
Name the SVN trunk. Default "trunk".
--T <tag_subdir>::
+-t <tag_subdir>::
Name the SVN subdirectory for tags. Default "tags".
-b <branch_subdir>::
gitlink:git-send-email[1]::
Send patch e-mails out of "format-patch --mbox" output.
-gitlink:git-symbolic-refs[1]::
+gitlink:git-symbolic-ref[1]::
Read and modify symbolic refs.
gitlink:git-stripspace[1]::
In git's context, synonym to object name.
object database::
- Stores a set of "objects", and an individial object is identified
+ Stores a set of "objects", and an individual object is identified
by its object name. The objects usually live in `$GIT_DIR/objects/`.
blob object::
git bisect bad master <- mark "master" as the bad state
git bisect good ORIG_HEAD <- mark ORIG_HEAD as good (or
whatever other known-good
- thing you booted laste)
+ thing you booted last)
and at this point "git bisect" will churn for a while, and tell you what
the mid-point between those two commits are, and check that state out as
. You can be using `objects/info/alternates` mechanism, or
`$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanism to 'borrow'
objects from other object stores. A repository with this kind
-of incompete object store is not suitable to be published for
+of incomplete object store is not suitable to be published for
use with dumb transports but otherwise is OK as long as
`objects/info/alternates` points at the right object stores
it borrows from.
up-to-date if the repository is published for dumb
transports. The `git-receive-pack` command, which is
run on a remote repository when you `git push` into it,
- runs `hooks/update` hook to help you achive this.
+ runs `hooks/update` hook to help you achieve this.
info/grafts::
This file records fake commit ancestry information, to
if (S_ISLNK(mode))
return symlink(buf, path);
- fd = open(path, O_CREAT | O_EXCL | O_WRONLY | O_TRUNC, (mode & 0100) ? 0777 : 0666);
+ fd = open(path, O_CREAT | O_EXCL | O_WRONLY, (mode & 0100) ? 0777 : 0666);
if (fd < 0)
return -1;
while (size) {
}
if (errno != EEXIST)
break;
- }
+ ++nr;
+ }
}
die("unable to write file %s mode %o", path, mode);
}
const char* value_regex, int multi_replace)
{
int i;
- struct stat st;
- int fd;
+ int fd, in_fd;
char* config_filename = strdup(git_path("config"));
char* lock_file = strdup(git_path("config.lock"));
const char* last_dot = strrchr(key, '.');
/*
* If .git/config does not exist yet, write a minimal version.
*/
- if (stat(config_filename, &st)) {
+ in_fd = open(config_filename, O_RDONLY);
+ if ( in_fd < 0 ) {
free(store.key);
+ if ( ENOENT != errno ) {
+ error("opening %s: %s", config_filename,
+ strerror(errno));
+ close(fd);
+ unlink(lock_file);
+ return 3; /* same as "invalid config file" */
+ }
/* if nothing to unset, error out */
if (value == NULL) {
close(fd);
store_write_section(fd, key);
store_write_pair(fd, key, value);
} else{
- int in_fd;
+ struct stat st;
char* contents;
int i, copy_begin, copy_end, new_line = 0;
return 5;
}
- in_fd = open(config_filename, O_RDONLY, 0666);
+ fstat(in_fd, &st);
contents = mmap(NULL, st.st_size, PROT_READ,
MAP_PRIVATE, in_fd, 0);
close(in_fd);
/*
* NOTE! We will give precedence to day-of-month over month or
- * year numebers in the 1-12 range. So 05 is always "mday 5",
+ * year numbers in the 1-12 range. So 05 is always "mday 5",
* unless we already have a mday..
*
* IOW, 01 Apr 05 parses as "April 1st, 2005".
}
if (number > 0 && number < 32)
tm.tm_mday = number;
- if (tm.tm_mon > now.tm_mon)
+ if (tm.tm_mon > now.tm_mon && tm.tm_year == now.tm_year)
tm.tm_year--;
return mktime(&tm);
}
/* We come here with ce pointing at stage 1
* (original tree) and ac[1] pointing at stage
* 3 (unmerged). show-modified with
- * report-mising set to false does not say the
+ * report-missing set to false does not say the
* file is deleted but reports true if work
* tree does not have it, in which case we
* fall through to report the unmerged state.
* so it is safe for us to do this here. Also
* it does not smudge active_cache or active_nr
* when it fails, so we do not have to worry about
- * cleaning it up oufselves either.
+ * cleaning it up ourselves either.
*/
read_cache();
}
static int create_file(const char *path, unsigned int mode)
{
mode = (mode & 0100) ? 0777 : 0666;
- return open(path, O_WRONLY | O_TRUNC | O_CREAT | O_EXCL, mode);
+ return open(path, O_WRONLY | O_CREAT | O_EXCL, mode);
}
static int write_entry(struct cache_entry *ce, const char *path, struct checkout *state)
* enqueued, enqueuing the commit in a list of pending commits, in latest
* commit date first order.
*
- * The algorithm then preceeds to visit each commit in the pending queue.
+ * The algorithm then proceeds to visit each commit in the pending queue.
* Upon each visit, the pending mass is added to the mass already seen for that
* commit and then divided into N equal portions, where N is the number of
* parents of the commit being visited. The divided portions are then injected
if (retval < 0) {
if (errno == EINTR)
continue;
- error("waitpid failed (%s)", strerror(retval));
+ error("waitpid failed (%s)", strerror(errno));
goto error_die;
}
if (WIFSIGNALED(status)) {
if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
echo "#"
- echo "# It looks like your may be committing a MERGE."
+ echo "# It looks like you may be committing a MERGE."
echo "# If this is not correct, please remove the file"
echo "# $GIT_DIR/MERGE_HEAD"
echo "# and try again"
then
pick_author_script='
/^author /{
+ s/'\''/'\''\\'\'\''/g
h
s/^author \([^<]*\) <[^>]*> .*$/\1/
s/'\''/'\''\'\'\''/g
static inline void *xmalloc(size_t size)
{
void *ret = malloc(size);
+ if (!ret && !size)
+ ret = malloc(1);
if (!ret)
die("Out of memory, malloc failed");
return ret;
static inline void *xrealloc(void *ptr, size_t size)
{
void *ret = realloc(ptr, size);
+ if (!ret && !size)
+ ret = realloc(ptr, 1);
if (!ret)
die("Out of memory, realloc failed");
return ret;
static inline void *xcalloc(size_t nmemb, size_t size)
{
void *ret = calloc(nmemb, size);
+ if (!ret && (!nmemb || !size))
+ ret = calloc(1, 1);
if (!ret)
die("Out of memory, calloc failed");
return ret;
reflist=$(get_remote_refs_for_fetch "$@")
if test "$tags"
then
- taglist=$(git-ls-remote --tags "$remote" |
- sed -e '
- /\^/d
- s/^[^ ]* //
- s/.*/.&:&/')
+ taglist=$(IFS=" " &&
+ git-ls-remote --tags "$remote" |
+ while read sha1 name
+ do
+ case "$name" in
+ (*^*) continue ;;
+ esac
+ if git-check-ref-format "$name"
+ then
+ echo ".${name}:${name}"
+ else
+ echo >&2 "warning: tag ${name} ignored"
+ fi
+ done)
if test "$#" -gt 1
then
# remote URL plus explicit refspecs; we need to merge them.
whosepatchScript='
/^author /{
+ s/'\''/'\''\\'\'\''/g
s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p
q
}'
expr "$sz0" \< "$sz1" \* 2 >/dev/null || : >$orig
;;
*)
- echo "Auto-merging $4."
+ echo "Auto-merging $4"
orig=`git-unpack-file $1`
;;
esac
fi
if [ $ret -ne 0 ]; then
- echo "ERROR: Merge conflict in $4."
+ echo "ERROR: Merge conflict in $4"
exit 1
fi
exec git-update-index -- "$4"
USAGE='[--mixed | --soft | --hard] [<commit-ish>]'
. git-sh-setup
-tmp=/var/tmp/reset.$$
+tmp=${GIT_DIR}/reset.$$
trap 'rm -f $tmp-*' 0 1 2 3 15
reset_type=--mixed
sub conn {
my $self = shift;
my $repo = $self->{'fullrep'};
- my $s = SVN::Ra->new($repo);
-
+ my $auth = SVN::Core::auth_open ([SVN::Client::get_simple_provider,
+ SVN::Client::get_ssl_server_trust_file_provider,
+ SVN::Client::get_username_provider]);
+ my $s = SVN::Ra->new(url => $repo, auth => $auth);
die "SVN connection to $repo: $!\n" unless defined $s;
$self->{'svn'} = $s;
$self->{'repo'} = $repo;
for (i = 1; i < argc; i++) {
char *arg = argv[i];
+ if (!strcmp(arg, "help")) {
+ show_help = 1;
+ continue;
+ }
+
if (strncmp(arg, "--", 2))
break;
/*
* Copy the rest to the buffer, but avoid the special
- * characters '\n' '<' and '>' that act as delimeters on
+ * characters '\n' '<' and '>' that act as delimiters on
* a identification line
*/
for (i = 0; i < len; i++) {
}
else {
/* match with FNM_PATHNAME:
- * exclude has base (baselen long) inplicitly
+ * exclude has base (baselen long) implicitly
* in front of it.
*/
int baselen = x->baselen;
return offset;
e->offset = offset;
offset += write_object(f, e);
- /* if we are delitified, write out its base object. */
+ /* if we are deltified, write out its base object. */
if (e->delta)
offset = write_one(f, e->delta, offset);
return offset;
static char* key = NULL;
static char* value = NULL;
-static regex_t* regex = NULL;
+static regex_t* regexp = NULL;
static int do_all = 0;
static int do_not_match = 0;
static int seen = 0;
static int show_config(const char* key_, const char* value_)
{
if (!strcmp(key_, key) &&
- (regex == NULL ||
+ (regexp == NULL ||
(do_not_match ^
- !regexec(regex, value_, 0, NULL, 0)))) {
+ !regexec(regexp, value_, 0, NULL, 0)))) {
if (do_all) {
printf("%s\n", value_);
return 0;
regex_++;
}
- regex = (regex_t*)malloc(sizeof(regex_t));
- if (regcomp(regex, regex_, REG_EXTENDED)) {
+ regexp = (regex_t*)malloc(sizeof(regex_t));
+ if (regcomp(regexp, regex_, REG_EXTENDED)) {
fprintf(stderr, "Invalid pattern: %s\n", regex_);
return -1;
}
free(value);
}
free(key);
- if (regex) {
- regfree(regex);
- free(regex);
+ if (regexp) {
+ regfree(regexp);
+ free(regexp);
}
if (do_all)
tree, index, and tree objects.
'
-# since FAT/NTFS does not allow tabs in filenames, skip this test
-test "$(uname -o 2>/dev/null)" = Cygwin && exit 0
-
. ./test-lib.sh
p0='no-funny'
cat >"$p1" "$p0"
echo 'Foo Bar Baz' >"$p2"
+test -f "$p1" && cmp "$p0" "$p1" || {
+ # since FAT/NTFS does not allow tabs in filenames, skip this test
+ say 'Your filesystem does not allow tabs in filenames, test skipped.'
+ test_done
+}
+
echo 'just space
no-funny' >expected
test_expect_success 'git-ls-files no-funny' \
test_expect_success \
'git-diff-files -p after editing work tree.' \
'git-diff-files -p >current'
+
+# that's as far as it comes
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+ say 'filemode disabled on the filesystem'
+ test_done
+fi
+
cat >expected <<\EOF
diff --git a/path0 b/path0
old mode 100644
tree=`git-write-tree` &&
echo $tree'
-test_expect_success \
- 'chmod' \
- 'chmod +x rezrov &&
- git-update-index rezrov &&
- git-diff-index $tree >current'
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+ say 'filemode disabled on the filesystem, using update-index --chmod=+x'
+ test_expect_success \
+ 'git-update-index --chmod=+x' \
+ 'git-update-index rezrov &&
+ git-update-index --chmod=+x rezrov &&
+ git-diff-index $tree >current'
+else
+ test_expect_success \
+ 'chmod' \
+ 'chmod +x rezrov &&
+ git-update-index rezrov &&
+ git-diff-index $tree >current'
+fi
_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
test_expect_success apply \
'git-apply --index --stat --summary --apply test-patch'
-test_expect_success validate \
- 'test -f bar && ls -l bar | grep "^-..x......"'
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+ say 'filemode disabled on the filesystem'
+else
+ test_expect_success validate \
+ 'test -f bar && ls -l bar | grep "^-..x......"'
+fi
test_done
. ./test-lib.sh
. ../t6000lib.sh # t6xxx specific functions
-if git-rev-list --merge-order 2>&1 | grep 'OpenSSL not linked' >/dev/null
-then
- test_expect_success 'skipping merge-order test' :
- test_done
- exit
-fi
-
# test-case specific test function
check_adjacency()
{
19
EOF
+if git-rev-list --merge-order HEAD 2>&1 | grep 'OpenSSL not linked' >/dev/null
+then
+ test_expect_success 'skipping merge-order test' :
+ test_done
+ exit
+fi
+
normal_adjacency_count=$(git-rev-list HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
merge_order_adjacency_count=$(git-rev-list --merge-order HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
test_expect_success '--merge-order produces as many or fewer discontinuities' '[ $merge_order_adjacency_count -le $normal_adjacency_count ]'
test=trash
rm -fr "$test"
mkdir "$test"
-cd "$test"
+cd "$test" || error "Cannot setup test environment"
"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
error "cannot run git init-db -- have you built things yet?"