mirror of
https://github.com/git/git.git
synced 2026-03-13 10:23:30 +01:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
@@ -124,6 +124,9 @@ Updates since v1.5.4
|
||||
* "git gc" now automatically prunes unreachable objects that are two
|
||||
weeks old or older.
|
||||
|
||||
* "git gc --auto" can be disabled more easily by just setting gc.auto
|
||||
to zero. It also tolerates more packfiles by default.
|
||||
|
||||
* "git grep" now knows "--name-only" is a synonym for the "-l" option.
|
||||
|
||||
* "git help <alias>" now reports "'git <alias>' is alias to <what>",
|
||||
@@ -201,6 +204,6 @@ this release, unless otherwise noted.
|
||||
|
||||
---
|
||||
exec >/var/tmp/1
|
||||
O=v1.5.4.4-620-gc817faa
|
||||
O=v1.5.5-rc1
|
||||
echo O=`git describe refs/heads/master`
|
||||
git shortlog --no-merges $O..refs/heads/master ^refs/heads/maint
|
||||
|
||||
@@ -582,7 +582,7 @@ gc.autopacklimit::
|
||||
When there are more than this many packs that are not
|
||||
marked with `*.keep` file in the repository, `git gc
|
||||
--auto` consolidates them into one larger pack. The
|
||||
default value is 20. Setting this to 0 disables it.
|
||||
default value is 50. Setting this to 0 disables it.
|
||||
|
||||
gc.packrefs::
|
||||
`git gc` does not run `git pack-refs` in a bare repository by
|
||||
|
||||
@@ -385,6 +385,9 @@ new commit.
|
||||
Omitting the `from` command in the first commit of a new branch
|
||||
will cause fast-import to create that commit with no ancestor. This
|
||||
tends to be desired only for the initial commit of a project.
|
||||
If the frontend creates all files from scratch when making a new
|
||||
branch, a `merge` command may be used instead of `from` to start
|
||||
the commit with an empty tree.
|
||||
Omitting the `from` command on existing branches is usually desired,
|
||||
as the current commit on that branch is automatically assumed to
|
||||
be the first ancestor of the new commit.
|
||||
@@ -427,13 +430,15 @@ existing value of the branch.
|
||||
|
||||
`merge`
|
||||
^^^^^^^
|
||||
Includes one additional ancestor commit, and makes the current
|
||||
commit a merge commit. An unlimited number of `merge` commands per
|
||||
Includes one additional ancestor commit. If the `from` command is
|
||||
omitted when creating a new branch, the first `merge` commit will be
|
||||
the first ancestor of the current commit, and the branch will start
|
||||
out with no files. An unlimited number of `merge` commands per
|
||||
commit are permitted by fast-import, thereby establishing an n-way merge.
|
||||
However Git's other tools never create commits with more than 15
|
||||
additional ancestors (forming a 16-way merge). For this reason
|
||||
it is suggested that frontends do not use more than 15 `merge`
|
||||
commands per commit.
|
||||
commands per commit; 16, if starting a new, empty branch.
|
||||
|
||||
Here `<committish>` is any of the commit specification expressions
|
||||
also accepted by `from` (see above).
|
||||
|
||||
@@ -25,7 +25,7 @@ Otherwise, all information (including original commit times or merge
|
||||
information) will be preserved.
|
||||
|
||||
The command will only rewrite the _positive_ refs mentioned in the
|
||||
command line (i.e. if you pass 'a..b', only 'b' will be rewritten).
|
||||
command line (e.g. if you pass 'a..b', only 'b' will be rewritten).
|
||||
If you specify no filters, the commits will be recommitted without any
|
||||
changes, which would normally have no effect. Nevertheless, this may be
|
||||
useful in the future for compensating for some git bugs or such,
|
||||
@@ -42,7 +42,7 @@ Always verify that the rewritten version is correct: The original refs,
|
||||
if different from the rewritten ones, will be stored in the namespace
|
||||
'refs/original/'.
|
||||
|
||||
Note that since this operation is extensively I/O expensive, it might
|
||||
Note that since this operation is very I/O expensive, it might
|
||||
be a good idea to redirect the temporary directory off-disk with the
|
||||
'-d' option, e.g. on tmpfs. Reportedly the speedup is very noticeable.
|
||||
|
||||
@@ -51,14 +51,15 @@ Filters
|
||||
~~~~~~~
|
||||
|
||||
The filters are applied in the order as listed below. The <command>
|
||||
argument is always evaluated in shell using the 'eval' command (with the
|
||||
notable exception of the commit filter, for technical reasons).
|
||||
argument is always evaluated in the shell context using the 'eval' command
|
||||
(with the notable exception of the commit filter, for technical reasons).
|
||||
Prior to that, the $GIT_COMMIT environment variable will be set to contain
|
||||
the id of the commit being rewritten. Also, GIT_AUTHOR_NAME,
|
||||
GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL,
|
||||
and GIT_COMMITTER_DATE are set according to the current commit. If any
|
||||
evaluation of <command> returns a non-zero exit status, the whole operation
|
||||
will be aborted.
|
||||
and GIT_COMMITTER_DATE are set according to the current commit. The values
|
||||
of these variables after the filters have run, are used for the new commit.
|
||||
If any evaluation of <command> returns a non-zero exit status, the whole
|
||||
operation will be aborted.
|
||||
|
||||
A 'map' function is available that takes an "original sha1 id" argument
|
||||
and outputs a "rewritten sha1 id" if the commit has been already
|
||||
@@ -71,9 +72,9 @@ OPTIONS
|
||||
-------
|
||||
|
||||
--env-filter <command>::
|
||||
This is the filter for modifying the environment in which
|
||||
the commit will be performed. Specifically, you might want
|
||||
to rewrite the author/committer name/email/time environment
|
||||
This filter may be used if you only need to modify the environment
|
||||
in which the commit will be performed. Specifically, you might
|
||||
want to rewrite the author/committer name/email/time environment
|
||||
variables (see linkgit:git-commit[1] for details). Do not forget
|
||||
to re-export the variables.
|
||||
|
||||
@@ -149,7 +150,7 @@ definition impossible to preserve signatures at any rate.)
|
||||
-d <directory>::
|
||||
Use this option to set the path to the temporary directory used for
|
||||
rewriting. When applying a tree filter, the command needs to
|
||||
temporary checkout the tree to some directory, which may consume
|
||||
temporarily check out the tree to some directory, which may consume
|
||||
considerable space in case of large projects. By default it
|
||||
does this in the '.git-rewrite/' directory but you can override
|
||||
that choice by this parameter.
|
||||
|
||||
@@ -19,8 +19,15 @@ created from prior invocations of linkgit:git-add[1].
|
||||
|
||||
Users are encouraged to run this task on a regular basis within
|
||||
each repository to maintain good disk space utilization and good
|
||||
operating performance. Some git commands may automatically run
|
||||
`git-gc`; see the `--auto` flag below for details.
|
||||
operating performance.
|
||||
|
||||
Some git commands may automatically run `git-gc`; see the `--auto` flag
|
||||
below for details. If you know what you're doing and all you want is to
|
||||
disable this behavior permanently without further considerations, just do:
|
||||
|
||||
----------------------
|
||||
$ git config --global gc.auto 0
|
||||
----------------------
|
||||
|
||||
OPTIONS
|
||||
-------
|
||||
|
||||
@@ -216,6 +216,9 @@ sendemail.chainreplyto::
|
||||
sendemail.smtpserver::
|
||||
Default SMTP server to use.
|
||||
|
||||
sendemail.smtpserverport::
|
||||
Default SMTP server port to use.
|
||||
|
||||
sendemail.smtpuser::
|
||||
Default SMTP-AUTH username.
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
GVF=GIT-VERSION-FILE
|
||||
DEF_VER=v1.5.4.GIT
|
||||
DEF_VER=v1.5.5-rc1.GIT
|
||||
|
||||
LF='
|
||||
'
|
||||
|
||||
@@ -652,5 +652,6 @@ int cmd_fetch(int argc, const char **argv, const char *prefix)
|
||||
|
||||
signal(SIGINT, unlock_pack_on_signal);
|
||||
atexit(unlock_pack);
|
||||
return do_fetch(transport, parse_ref_spec(ref_nr, refs), ref_nr);
|
||||
return do_fetch(transport,
|
||||
parse_fetch_refspec(ref_nr, refs), ref_nr);
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ static const char * const builtin_gc_usage[] = {
|
||||
static int pack_refs = 1;
|
||||
static int aggressive_window = -1;
|
||||
static int gc_auto_threshold = 6700;
|
||||
static int gc_auto_pack_limit = 20;
|
||||
static int gc_auto_pack_limit = 50;
|
||||
static char *prune_expire = "2.weeks.ago";
|
||||
|
||||
#define MAX_ADD 10
|
||||
@@ -160,10 +160,10 @@ static int too_many_packs(void)
|
||||
static int need_to_gc(void)
|
||||
{
|
||||
/*
|
||||
* Setting gc.auto and gc.autopacklimit to 0 or negative can
|
||||
* disable the automatic gc.
|
||||
* Setting gc.auto to 0 or negative can disable the
|
||||
* automatic gc.
|
||||
*/
|
||||
if (gc_auto_threshold <= 0 && gc_auto_pack_limit <= 0)
|
||||
if (gc_auto_threshold <= 0)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
|
||||
@@ -207,7 +207,10 @@ static int handle_one_branch(const char *refname,
|
||||
if (!remote_find_tracking(states->remote, &refspec)) {
|
||||
struct path_list_item *item;
|
||||
const char *name = skip_prefix(refspec.src, "refs/heads/");
|
||||
if (unsorted_path_list_has_path(&states->tracked, name) ||
|
||||
/* symbolic refs pointing nowhere were handled already */
|
||||
if ((flags & REF_ISSYMREF) ||
|
||||
unsorted_path_list_has_path(&states->tracked,
|
||||
name) ||
|
||||
unsorted_path_list_has_path(&states->new,
|
||||
name))
|
||||
return 0;
|
||||
|
||||
@@ -33,6 +33,7 @@ static const char rev_list_usage[] =
|
||||
" ordering output:\n"
|
||||
" --topo-order\n"
|
||||
" --date-order\n"
|
||||
" --reverse\n"
|
||||
" formatting output:\n"
|
||||
" --parents\n"
|
||||
" --objects | --objects-edge\n"
|
||||
|
||||
@@ -537,7 +537,7 @@ static void verify_remote_names(int nr_heads, const char **heads)
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nr_heads; i++) {
|
||||
const char *remote = strchr(heads[i], ':');
|
||||
const char *remote = strrchr(heads[i], ':');
|
||||
|
||||
remote = remote ? (remote + 1) : heads[i];
|
||||
switch (check_ref_format(remote)) {
|
||||
|
||||
@@ -627,6 +627,8 @@ class P4Submit(Command):
|
||||
|
||||
if self.interactive:
|
||||
submitTemplate = self.prepareLogMessage(template, logMessage)
|
||||
if os.environ.has_key("P4DIFF"):
|
||||
del(os.environ["P4DIFF"])
|
||||
diff = read_pipe("p4 diff -du ...")
|
||||
|
||||
for newFile in filesToAdd:
|
||||
@@ -650,7 +652,10 @@ class P4Submit(Command):
|
||||
defaultEditor = "vi"
|
||||
if platform.system() == "Windows":
|
||||
defaultEditor = "notepad"
|
||||
editor = os.environ.get("EDITOR", defaultEditor);
|
||||
if os.environ.has_key("P4EDITOR"):
|
||||
editor = os.environ.get("P4EDITOR")
|
||||
else:
|
||||
editor = os.environ.get("EDITOR", defaultEditor);
|
||||
system(editor + " " + fileName)
|
||||
tmpFile = open(fileName, "rb")
|
||||
message = tmpFile.read()
|
||||
@@ -882,21 +887,21 @@ class P4Sync(Command):
|
||||
while j < len(filedata):
|
||||
stat = filedata[j]
|
||||
j += 1
|
||||
text = ''
|
||||
text = [];
|
||||
while j < len(filedata) and filedata[j]['code'] in ('text', 'unicode', 'binary'):
|
||||
tmp = filedata[j]['data']
|
||||
if stat['type'] in ('text+ko', 'unicode+ko', 'binary+ko'):
|
||||
tmp = re.sub(r'(?i)\$(Id|Header):[^$]*\$',r'$\1$', tmp)
|
||||
elif stat['type'] in ('text+k', 'ktext', 'kxtext', 'unicode+k', 'binary+k'):
|
||||
tmp = re.sub(r'(?i)\$(Id|Header|Author|Date|DateTime|Change|File|Revision):[^$]*\$',r'$\1$', tmp)
|
||||
text += tmp
|
||||
text.append(filedata[j]['data'])
|
||||
j += 1
|
||||
|
||||
text = ''.join(text)
|
||||
|
||||
if not stat.has_key('depotFile'):
|
||||
sys.stderr.write("p4 print fails with: %s\n" % repr(stat))
|
||||
continue
|
||||
|
||||
if stat['type'] in ('text+ko', 'unicode+ko', 'binary+ko'):
|
||||
text = re.sub(r'(?i)\$(Id|Header):[^$]*\$',r'$\1$', text)
|
||||
elif stat['type'] in ('text+k', 'ktext', 'kxtext', 'unicode+k', 'binary+k'):
|
||||
text = re.sub(r'(?i)\$(Id|Header|Author|Date|DateTime|Change|File|Revision):[^$]*\$',r'$\1$', text)
|
||||
|
||||
contents[stat['depotFile']] = text
|
||||
|
||||
for f in filesForCommit:
|
||||
|
||||
@@ -3665,7 +3665,7 @@ sub escape_uri_only {
|
||||
my ($uri) = @_;
|
||||
my @tmp;
|
||||
foreach (split m{/}, $uri) {
|
||||
s/([^\w.-])/sprintf("%%%02X",ord($1))/eg;
|
||||
s/([^\w.%-]|%(?![a-fA-F0-9]{2}))/sprintf("%%%02X",ord($1))/eg;
|
||||
push @tmp, $_;
|
||||
}
|
||||
join('/', @tmp);
|
||||
|
||||
159
remote.c
159
remote.c
@@ -393,58 +393,123 @@ static void read_config(void)
|
||||
alias_all_urls();
|
||||
}
|
||||
|
||||
struct refspec *parse_ref_spec(int nr_refspec, const char **refspec)
|
||||
static struct refspec *parse_refspec_internal(int nr_refspec, const char **refspec, int fetch)
|
||||
{
|
||||
int i;
|
||||
int st;
|
||||
struct refspec *rs = xcalloc(sizeof(*rs), nr_refspec);
|
||||
|
||||
for (i = 0; i < nr_refspec; i++) {
|
||||
const char *sp, *ep, *gp;
|
||||
sp = refspec[i];
|
||||
if (*sp == '+') {
|
||||
size_t llen, rlen;
|
||||
int is_glob;
|
||||
const char *lhs, *rhs;
|
||||
|
||||
llen = rlen = is_glob = 0;
|
||||
|
||||
lhs = refspec[i];
|
||||
if (*lhs == '+') {
|
||||
rs[i].force = 1;
|
||||
sp++;
|
||||
lhs++;
|
||||
}
|
||||
gp = strstr(sp, "/*");
|
||||
ep = strchr(sp, ':');
|
||||
if (gp && ep && gp > ep)
|
||||
gp = NULL;
|
||||
if (ep) {
|
||||
if (ep[1]) {
|
||||
const char *glob = strstr(ep + 1, "/*");
|
||||
if (glob && glob[2])
|
||||
glob = NULL;
|
||||
if (!glob)
|
||||
gp = NULL;
|
||||
if (gp)
|
||||
rs[i].dst = xstrndup(ep + 1,
|
||||
glob - ep - 1);
|
||||
else
|
||||
rs[i].dst = xstrdup(ep + 1);
|
||||
|
||||
rhs = strrchr(lhs, ':');
|
||||
if (rhs) {
|
||||
rhs++;
|
||||
rlen = strlen(rhs);
|
||||
is_glob = (2 <= rlen && !strcmp(rhs + rlen - 2, "/*"));
|
||||
rs[i].dst = xstrndup(rhs, rlen - is_glob * 2);
|
||||
}
|
||||
|
||||
llen = (rhs ? (rhs - lhs - 1) : strlen(lhs));
|
||||
if (is_glob != (2 <= llen && !memcmp(lhs + llen - 2, "/*", 2)))
|
||||
goto invalid;
|
||||
|
||||
if (is_glob) {
|
||||
llen -= 2;
|
||||
rlen -= 2;
|
||||
}
|
||||
rs[i].pattern = is_glob;
|
||||
rs[i].src = xstrndup(lhs, llen);
|
||||
|
||||
if (fetch) {
|
||||
/*
|
||||
* LHS
|
||||
* - empty is allowed; it means HEAD.
|
||||
* - otherwise it must be a valid looking ref.
|
||||
*/
|
||||
if (!*rs[i].src)
|
||||
; /* empty is ok */
|
||||
else {
|
||||
st = check_ref_format(rs[i].src);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
goto invalid;
|
||||
}
|
||||
/*
|
||||
* RHS
|
||||
* - missing is allowed.
|
||||
* - empty is ok; it means not to store.
|
||||
* - otherwise it must be a valid looking ref.
|
||||
*/
|
||||
if (!rs[i].dst) {
|
||||
; /* ok */
|
||||
} else if (!*rs[i].dst) {
|
||||
; /* ok */
|
||||
} else {
|
||||
st = check_ref_format(rs[i].dst);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
goto invalid;
|
||||
}
|
||||
} else {
|
||||
ep = sp + strlen(sp);
|
||||
}
|
||||
if (gp && gp + 2 != ep)
|
||||
gp = NULL;
|
||||
if (gp) {
|
||||
rs[i].pattern = 1;
|
||||
ep = gp;
|
||||
}
|
||||
rs[i].src = xstrndup(sp, ep - sp);
|
||||
|
||||
if (*rs[i].src) {
|
||||
st = check_ref_format(rs[i].src);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
die("Invalid refspec '%s'", refspec[i]);
|
||||
}
|
||||
if (rs[i].dst && *rs[i].dst) {
|
||||
st = check_ref_format(rs[i].dst);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
die("Invalid refspec '%s'", refspec[i]);
|
||||
/*
|
||||
* LHS
|
||||
* - empty is allowed; it means delete.
|
||||
* - when wildcarded, it must be a valid looking ref.
|
||||
* - otherwise, it must be an extended SHA-1, but
|
||||
* there is no existing way to validate this.
|
||||
*/
|
||||
if (!*rs[i].src)
|
||||
; /* empty is ok */
|
||||
else if (is_glob) {
|
||||
st = check_ref_format(rs[i].src);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
goto invalid;
|
||||
}
|
||||
else
|
||||
; /* anything goes, for now */
|
||||
/*
|
||||
* RHS
|
||||
* - missing is allowed, but LHS then must be a
|
||||
* valid looking ref.
|
||||
* - empty is not allowed.
|
||||
* - otherwise it must be a valid looking ref.
|
||||
*/
|
||||
if (!rs[i].dst) {
|
||||
st = check_ref_format(rs[i].src);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
goto invalid;
|
||||
} else if (!*rs[i].dst) {
|
||||
goto invalid;
|
||||
} else {
|
||||
st = check_ref_format(rs[i].dst);
|
||||
if (st && st != CHECK_REF_FORMAT_ONELEVEL)
|
||||
goto invalid;
|
||||
}
|
||||
}
|
||||
}
|
||||
return rs;
|
||||
|
||||
invalid:
|
||||
die("Invalid refspec '%s'", refspec[i]);
|
||||
}
|
||||
|
||||
struct refspec *parse_fetch_refspec(int nr_refspec, const char **refspec)
|
||||
{
|
||||
return parse_refspec_internal(nr_refspec, refspec, 1);
|
||||
}
|
||||
|
||||
struct refspec *parse_push_refspec(int nr_refspec, const char **refspec)
|
||||
{
|
||||
return parse_refspec_internal(nr_refspec, refspec, 0);
|
||||
}
|
||||
|
||||
static int valid_remote_nick(const char *name)
|
||||
@@ -475,8 +540,8 @@ struct remote *remote_get(const char *name)
|
||||
add_url_alias(ret, name);
|
||||
if (!ret->url)
|
||||
return NULL;
|
||||
ret->fetch = parse_ref_spec(ret->fetch_refspec_nr, ret->fetch_refspec);
|
||||
ret->push = parse_ref_spec(ret->push_refspec_nr, ret->push_refspec);
|
||||
ret->fetch = parse_fetch_refspec(ret->fetch_refspec_nr, ret->fetch_refspec);
|
||||
ret->push = parse_push_refspec(ret->push_refspec_nr, ret->push_refspec);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -489,11 +554,11 @@ int for_each_remote(each_remote_fn fn, void *priv)
|
||||
if (!r)
|
||||
continue;
|
||||
if (!r->fetch)
|
||||
r->fetch = parse_ref_spec(r->fetch_refspec_nr,
|
||||
r->fetch_refspec);
|
||||
r->fetch = parse_fetch_refspec(r->fetch_refspec_nr,
|
||||
r->fetch_refspec);
|
||||
if (!r->push)
|
||||
r->push = parse_ref_spec(r->push_refspec_nr,
|
||||
r->push_refspec);
|
||||
r->push = parse_push_refspec(r->push_refspec_nr,
|
||||
r->push_refspec);
|
||||
result = fn(r, priv);
|
||||
}
|
||||
return result;
|
||||
@@ -824,7 +889,7 @@ int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
|
||||
int nr_refspec, const char **refspec, int flags)
|
||||
{
|
||||
struct refspec *rs =
|
||||
parse_ref_spec(nr_refspec, (const char **) refspec);
|
||||
parse_push_refspec(nr_refspec, (const char **) refspec);
|
||||
int send_all = flags & MATCH_REFS_ALL;
|
||||
int send_mirror = flags & MATCH_REFS_MIRROR;
|
||||
|
||||
|
||||
3
remote.h
3
remote.h
@@ -67,7 +67,8 @@ void free_refs(struct ref *ref);
|
||||
*/
|
||||
void ref_remove_duplicates(struct ref *ref_map);
|
||||
|
||||
struct refspec *parse_ref_spec(int nr_refspec, const char **refspec);
|
||||
struct refspec *parse_fetch_refspec(int nr_refspec, const char **refspec);
|
||||
struct refspec *parse_push_refspec(int nr_refspec, const char **refspec);
|
||||
|
||||
int match_refs(struct ref *src, struct ref *dst, struct ref ***dst_tail,
|
||||
int nr_refspec, const char **refspec, int all);
|
||||
|
||||
@@ -49,8 +49,28 @@ poke() {
|
||||
test-chmtime +1 "$1"
|
||||
}
|
||||
|
||||
SVN_HTTPD_MODULE_PATH=${SVN_HTTPD_MODULE_PATH-'/usr/lib/apache2/modules'}
|
||||
SVN_HTTPD_PATH=${SVN_HTTPD_PATH-'/usr/sbin/apache2'}
|
||||
for d in \
|
||||
"$SVN_HTTPD_PATH" \
|
||||
/usr/sbin/apache2 \
|
||||
/usr/sbin/httpd \
|
||||
; do
|
||||
if test -f "$d"
|
||||
then
|
||||
SVN_HTTPD_PATH="$d"
|
||||
break
|
||||
fi
|
||||
done
|
||||
for d in \
|
||||
"$SVN_HTTPD_MODULE_PATH" \
|
||||
/usr/lib/apache2/modules \
|
||||
/usr/libexec/apache2 \
|
||||
; do
|
||||
if test -d "$d"
|
||||
then
|
||||
SVN_HTTPD_MODULE_PATH="$d"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
start_httpd () {
|
||||
if test -z "$SVN_HTTPD_PORT"
|
||||
@@ -66,6 +86,7 @@ ServerName "git-svn test"
|
||||
ServerRoot "$GIT_DIR"
|
||||
DocumentRoot "$GIT_DIR"
|
||||
PidFile "$GIT_DIR/httpd.pid"
|
||||
LockFile logs/accept.lock
|
||||
Listen 127.0.0.1:$SVN_HTTPD_PORT
|
||||
LoadModule dav_module $SVN_HTTPD_MODULE_PATH/mod_dav.so
|
||||
LoadModule dav_svn_module $SVN_HTTPD_MODULE_PATH/mod_dav_svn.so
|
||||
|
||||
@@ -237,4 +237,14 @@ test_expect_success 'update default (overridden, with funny whitespace)' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success '"remote show" does not show symbolic refs' '
|
||||
|
||||
git clone one three &&
|
||||
(cd three &&
|
||||
git remote show origin > output &&
|
||||
! grep HEAD < output &&
|
||||
! grep -i stale < output)
|
||||
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
72
t/t5511-refspec.sh
Executable file
72
t/t5511-refspec.sh
Executable file
@@ -0,0 +1,72 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='refspec parsing'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
test_refspec () {
|
||||
|
||||
kind=$1 refspec=$2 expect=$3
|
||||
git config remote.frotz.url "." &&
|
||||
git config --remove-section remote.frotz &&
|
||||
git config remote.frotz.url "." &&
|
||||
git config "remote.frotz.$kind" "$refspec" &&
|
||||
if test "$expect" != invalid
|
||||
then
|
||||
title="$kind $refspec"
|
||||
test='git ls-remote frotz'
|
||||
else
|
||||
title="$kind $refspec (invalid)"
|
||||
test='test_must_fail git ls-remote frotz'
|
||||
fi
|
||||
test_expect_success "$title" "$test"
|
||||
}
|
||||
|
||||
test_refspec push '' invalid
|
||||
test_refspec push ':' invalid
|
||||
|
||||
test_refspec fetch ''
|
||||
test_refspec fetch ':'
|
||||
|
||||
test_refspec push 'refs/heads/*:refs/remotes/frotz/*'
|
||||
test_refspec push 'refs/heads/*:refs/remotes/frotz' invalid
|
||||
test_refspec push 'refs/heads:refs/remotes/frotz/*' invalid
|
||||
test_refspec push 'refs/heads/master:refs/remotes/frotz/xyzzy'
|
||||
|
||||
|
||||
# These have invalid LHS, but we do not have a formal "valid sha-1
|
||||
# expression syntax checker" so they are not checked with the current
|
||||
# code. They will be caught downstream anyway, but we may want to
|
||||
# have tighter check later...
|
||||
|
||||
: test_refspec push 'refs/heads/master::refs/remotes/frotz/xyzzy' invalid
|
||||
: test_refspec push 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid
|
||||
|
||||
test_refspec fetch 'refs/heads/*:refs/remotes/frotz/*'
|
||||
test_refspec fetch 'refs/heads/*:refs/remotes/frotz' invalid
|
||||
test_refspec fetch 'refs/heads:refs/remotes/frotz/*' invalid
|
||||
test_refspec fetch 'refs/heads/master:refs/remotes/frotz/xyzzy'
|
||||
test_refspec fetch 'refs/heads/master::refs/remotes/frotz/xyzzy' invalid
|
||||
test_refspec fetch 'refs/heads/maste :refs/remotes/frotz/xyzzy' invalid
|
||||
|
||||
test_refspec push 'master~1:refs/remotes/frotz/backup'
|
||||
test_refspec fetch 'master~1:refs/remotes/frotz/backup' invalid
|
||||
test_refspec push 'HEAD~4:refs/remotes/frotz/new'
|
||||
test_refspec fetch 'HEAD~4:refs/remotes/frotz/new' invalid
|
||||
|
||||
test_refspec push 'HEAD'
|
||||
test_refspec fetch 'HEAD'
|
||||
test_refspec push 'refs/heads/ nitfol' invalid
|
||||
test_refspec fetch 'refs/heads/ nitfol' invalid
|
||||
|
||||
test_refspec push 'HEAD:' invalid
|
||||
test_refspec fetch 'HEAD:'
|
||||
test_refspec push 'refs/heads/ nitfol:' invalid
|
||||
test_refspec fetch 'refs/heads/ nitfol:' invalid
|
||||
|
||||
test_refspec push ':refs/remotes/frotz/deleteme'
|
||||
test_refspec fetch ':refs/remotes/frotz/HEAD-to-me'
|
||||
test_refspec push ':refs/remotes/frotz/delete me' invalid
|
||||
test_refspec fetch ':refs/remotes/frotz/HEAD to me' invalid
|
||||
|
||||
test_done
|
||||
@@ -78,7 +78,7 @@ test_expect_success 'filter subdirectory only' '
|
||||
test_expect_success 'subdirectory filter result looks okay' '
|
||||
test 2 = $(git rev-list sub | wc -l) &&
|
||||
git show sub:new &&
|
||||
! git show sub:subdir
|
||||
test_must_fail git show sub:subdir
|
||||
'
|
||||
|
||||
test_expect_success 'setup and filter history that requires --full-history' '
|
||||
@@ -100,7 +100,7 @@ test_expect_success 'subdirectory filter result looks okay' '
|
||||
test 3 = $(git rev-list -1 --parents sub-master | wc -w) &&
|
||||
git show sub-master^:new &&
|
||||
git show sub-master^2:new &&
|
||||
! git show sub:subdir
|
||||
test_must_fail git show sub:subdir
|
||||
'
|
||||
|
||||
test_expect_success 'use index-filter to move into a subdirectory' '
|
||||
@@ -114,7 +114,7 @@ test_expect_success 'use index-filter to move into a subdirectory' '
|
||||
|
||||
test_expect_success 'stops when msg filter fails' '
|
||||
old=$(git rev-parse HEAD) &&
|
||||
! git-filter-branch -f --msg-filter false HEAD &&
|
||||
test_must_fail git-filter-branch -f --msg-filter false HEAD &&
|
||||
test $old = $(git rev-parse HEAD) &&
|
||||
rm -rf .git-rewrite
|
||||
'
|
||||
@@ -151,8 +151,8 @@ test_expect_success "remove a certain author's commits" '
|
||||
'
|
||||
|
||||
test_expect_success 'barf on invalid name' '
|
||||
! git filter-branch -f master xy-problem &&
|
||||
! git filter-branch -f HEAD^
|
||||
test_must_fail git filter-branch -f master xy-problem &&
|
||||
test_must_fail git filter-branch -f HEAD^
|
||||
'
|
||||
|
||||
test_expect_success '"map" works in commit filter' '
|
||||
@@ -174,7 +174,7 @@ test_expect_success 'Name needing quotes' '
|
||||
git add foo &&
|
||||
git commit -m "Adding a file" &&
|
||||
git filter-branch --tree-filter "rm -fr foo" &&
|
||||
! git ls-files --error-unmatch "foo/$name" &&
|
||||
test_must_fail git ls-files --error-unmatch "foo/$name" &&
|
||||
test $(git rev-parse --verify rerere) != $(git rev-parse --verify A)
|
||||
|
||||
'
|
||||
|
||||
31
t/t9120-git-svn-clone-with-percent-escapes.sh
Executable file
31
t/t9120-git-svn-clone-with-percent-escapes.sh
Executable file
@@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Copyright (c) 2008 Kevin Ballard
|
||||
#
|
||||
|
||||
test_description='git-svn clone with percent escapes'
|
||||
. ./lib-git-svn.sh
|
||||
|
||||
test_expect_success 'setup svnrepo' "
|
||||
mkdir project project/trunk project/branches project/tags &&
|
||||
echo foo > project/trunk/foo &&
|
||||
svn import -m '$test_description' project '$svnrepo/pr ject' &&
|
||||
rm -rf project &&
|
||||
start_httpd
|
||||
"
|
||||
|
||||
if test "$SVN_HTTPD_PORT" = ""
|
||||
then
|
||||
test_expect_failure 'test clone with percent escapes - needs SVN_HTTPD_PORT set' 'false'
|
||||
else
|
||||
test_expect_success 'test clone with percent escapes' '
|
||||
git svn clone "$svnrepo/pr%20ject" clone &&
|
||||
cd clone &&
|
||||
git rev-parse refs/remotes/git-svn &&
|
||||
cd ..
|
||||
'
|
||||
fi
|
||||
|
||||
stop_httpd
|
||||
|
||||
test_done
|
||||
Reference in New Issue
Block a user