Merge branch 'master' into next

* master:
  tests: Ignore the Test::Harness .prove file
  Documentation/git-push: Explain status output in more detail
  Document receive.denyDeleteCurrent
  Cast execl*() NULL sentinels to (char *)
  git-read-tree.txt: acknowledge the directory matching bug in sparse checkout
  INSTALL: configure /etc/xml/catalog to build docs on Cygwin
  t3700-add: fix dependence on stdout and stderr buffering
  git-rebase--interactive.sh: use printf instead of echo to print commit message
  Add a google-chrome option for web--browse
  request-pull.txt: Document -p option
  Check size of path buffer before writing into it
  git-instaweb: Don't assume Apache executable is named apache2
  git-instaweb: Fix Apache environment variable passing
  git-instaweb: Fix custom apache log placement
This commit is contained in:
Junio C Hamano
2010-07-25 23:15:07 -07:00
13 changed files with 119 additions and 36 deletions

View File

@@ -1558,6 +1558,10 @@ receive.denyDeletes::
If set to true, git-receive-pack will deny a ref update that deletes
the ref. Use this to prevent such a ref deletion via a push.
receive.denyDeleteCurrent::
If set to true, git-receive-pack will deny a ref update that
deletes the currently checked out branch of a non-bare repository.
receive.denyCurrentBranch::
If set to true or "refuse", git-receive-pack will deny a ref update
to the currently checked out branch of a non-bare repository.

View File

@@ -200,16 +200,29 @@ summary::
For a successfully pushed ref, the summary shows the old and new
values of the ref in a form suitable for using as an argument to
`git log` (this is `<old>..<new>` in most cases, and
`<old>...<new>` for forced non-fast-forward updates). For a
failed update, more details are given for the failure.
The string `rejected` indicates that git did not try to send the
ref at all (typically because it is not a fast-forward). The
string `remote rejected` indicates that the remote end refused
the update; this rejection is typically caused by a hook on the
remote side. The string `remote failure` indicates that the
remote end did not report the successful update of the ref
(perhaps because of a temporary error on the remote side, a
break in the network connection, or other transient error).
`<old>...<new>` for forced non-fast-forward updates).
+
For a failed update, more details are given:
+
--
rejected::
Git did not try to send the ref at all, typically because it
is not a fast-forward and you did not force the update.
remote rejected::
The remote end refused the update. Usually caused by a hook
on the remote side, or because the remote repository has one
of the following safety options in effect:
`receive.denyCurrentBranch` (for pushes to the checked out
branch), `receive.denyNonFastForwards` (for forced
non-fast-forward updates), `receive.denyDeletes` or
`receive.denyDeleteCurrent`. See linkgit:git-config[1].
remote failure::
The remote end did not report the successful update of the ref,
perhaps because of a temporary error on the remote side, a
break in the network connection, or other transient error.
--
from::
The name of the local ref being pushed, minus its

View File

@@ -412,6 +412,13 @@ turn `core.sparseCheckout` on in order to have sparse checkout
support.
BUGS
----
In order to match a directory with $GIT_DIR/info/sparse-checkout,
trailing slash must be used. The form without trailing slash, while
works with .gitignore, does not work with sparse checkout.
SEE ALSO
--------
linkgit:git-write-tree[1]; linkgit:git-ls-files[1];

View File

@@ -7,7 +7,7 @@ git-request-pull - Generates a summary of pending changes
SYNOPSIS
--------
'git request-pull' <start> <url> [<end>]
'git request-pull' [-p] <start> <url> [<end>]
DESCRIPTION
-----------
@@ -17,6 +17,9 @@ the given URL in the generated summary.
OPTIONS
-------
-p::
Show patch text
<start>::
Commit to start at.

33
INSTALL
View File

@@ -157,3 +157,36 @@ Issues of note:
It has been reported that docbook-xsl version 1.72 and 1.73 are
buggy; 1.72 misformats manual pages for callouts, and 1.73 needs
the patch in contrib/patches/docbook-xsl-manpages-charmap.patch
Users attempting to build the documentation on Cygwin may need to ensure
that the /etc/xml/catalog file looks something like this:
<?xml version="1.0"?>
<!DOCTYPE catalog PUBLIC
"-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN"
"http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd"
>
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<rewriteURI
uriStartString = "http://docbook.sourceforge.net/release/xsl/current"
rewritePrefix = "/usr/share/sgml/docbook/xsl-stylesheets"
/>
<rewriteURI
uriStartString="http://www.oasis-open.org/docbook/xml/4.5"
rewritePrefix="/usr/share/sgml/docbook/xml-dtd-4.5"
/>
</catalog>
This can be achieved with the following two xmlcatalog commands:
xmlcatalog --noout \
--add rewriteURI \
http://docbook.sourceforge.net/release/xsl/current \
/usr/share/sgml/docbook/xsl-stylesheets \
/etc/xml/catalog
xmlcatalog --noout \
--add rewriteURI \
http://www.oasis-open.org/docbook/xml/4.5/xsl/current \
/usr/share/sgml/docbook/xml-dtd-4.5 \
/etc/xml/catalog

View File

@@ -120,7 +120,7 @@ static void exec_woman_emacs(const char *path, const char *page)
if (!path)
path = "emacsclient";
strbuf_addf(&man_page, "(woman \"%s\")", page);
execlp(path, "emacsclient", "-e", man_page.buf, NULL);
execlp(path, "emacsclient", "-e", man_page.buf, (char *)NULL);
warning("failed to exec '%s': %s", path, strerror(errno));
}
}
@@ -148,7 +148,7 @@ static void exec_man_konqueror(const char *path, const char *page)
} else
path = "kfmclient";
strbuf_addf(&man_page, "man:%s(1)", page);
execlp(path, filename, "newTab", man_page.buf, NULL);
execlp(path, filename, "newTab", man_page.buf, (char *)NULL);
warning("failed to exec '%s': %s", path, strerror(errno));
}
}
@@ -157,7 +157,7 @@ static void exec_man_man(const char *path, const char *page)
{
if (!path)
path = "man";
execlp(path, "man", page, NULL);
execlp(path, "man", page, (char *)NULL);
warning("failed to exec '%s': %s", path, strerror(errno));
}
@@ -165,7 +165,7 @@ static void exec_man_cmd(const char *cmd, const char *page)
{
struct strbuf shell_cmd = STRBUF_INIT;
strbuf_addf(&shell_cmd, "%s %s", cmd, page);
execl("/bin/sh", "sh", "-c", shell_cmd.buf, NULL);
execl("/bin/sh", "sh", "-c", shell_cmd.buf, (char *)NULL);
warning("failed to exec '%s': %s", cmd, strerror(errno));
}
@@ -372,7 +372,7 @@ static void show_info_page(const char *git_cmd)
{
const char *page = cmd_to_page(git_cmd);
setenv("INFOPATH", system_path(GIT_INFO_PATH), 1);
execlp("info", "info", "gitman", page, NULL);
execlp("info", "info", "gitman", page, (char *)NULL);
die("no info viewer handled the request");
}
@@ -398,7 +398,7 @@ static void get_html_page_path(struct strbuf *page_path, const char *page)
#ifndef open_html
static void open_html(const char *path)
{
execl_git_cmd("web--browse", "-c", "help.browser", path, NULL);
execl_git_cmd("web--browse", "-c", "help.browser", path, (char *)NULL);
}
#endif

View File

@@ -45,7 +45,8 @@ test -z "$port" && port=1234
resolve_full_httpd () {
case "$httpd" in
*apache2*|*lighttpd*)
*apache2*|*lighttpd*|*httpd*)
# yes, *httpd* covers *lighttpd* above, but it is there for clarity
# ensure that the apache2/lighttpd command ends with "-f"
if ! echo "$httpd" | sane_grep -- '-f *$' >/dev/null 2>&1
then
@@ -306,7 +307,13 @@ EOF
}
apache2_conf () {
test -z "$module_path" && module_path=/usr/lib/apache2/modules
if test -z "$module_path"
then
test -d "/usr/lib/httpd/modules" &&
module_path="/usr/lib/httpd/modules"
test -d "/usr/lib/apache2/modules" &&
module_path="/usr/lib/apache2/modules"
fi
bind=
test x"$local" = xtrue && bind='127.0.0.1:'
echo 'text/css css' > "$fqgitdir/mime.types"
@@ -320,8 +327,10 @@ PidFile "$fqgitdir/pid"
Listen $bind$port
EOF
for mod in mime dir; do
if test -e $module_path/mod_${mod}.so; then
for mod in mime dir env log_config
do
if test -e $module_path/mod_${mod}.so
then
echo "LoadModule ${mod}_module " \
"$module_path/mod_${mod}.so" >> "$conf"
fi
@@ -340,7 +349,7 @@ EOF
cat >> "$conf" <<EOF
LoadModule perl_module $module_path/mod_perl.so
PerlPassEnv GIT_DIR
PerlPassEnv GIT_EXEC_DIR
PerlPassEnv GIT_EXEC_PATH
PerlPassEnv GITWEB_CONFIG
<Location /gitweb.cgi>
SetHandler perl-script
@@ -370,6 +379,9 @@ EOF
echo "ScriptSock logs/gitweb.sock" >> "$conf"
fi
cat >> "$conf" <<EOF
PassEnv GIT_DIR
PassEnv GIT_EXEC_PATH
PassEnv GITWEB_CONFIG
AddHandler cgi-script .cgi
<Location /gitweb.cgi>
Options +ExecCGI
@@ -566,7 +578,7 @@ case "$httpd" in
*lighttpd*)
lighttpd_conf
;;
*apache2*)
*apache2*|*httpd*)
apache2_conf
;;
webrick)

View File

@@ -119,7 +119,7 @@ run 'git rebase --continue'"
export GIT_CHERRY_PICK_HELP
warn () {
echo "$*" >&2
printf '%s\n' "$*" >&2
}
output () {
@@ -606,7 +606,7 @@ skip_unnecessary_picks () {
fd=1
;;
esac
echo "$command${sha1:+ }$sha1${rest:+ }$rest" >&$fd
printf '%s\n' "$command${sha1:+ }$sha1${rest:+ }$rest" >&$fd
done <"$TODO" >"$TODO.new" 3>>"$DONE" &&
mv -f "$TODO".new "$TODO" &&
case "$(peek_next_command)" in
@@ -649,12 +649,12 @@ rearrange_squash () {
case " $used" in
*" $sha1 "*) continue ;;
esac
echo "$pick $sha1 $message"
printf '%s\n' "$pick $sha1 $message"
while read -r squash action msg
do
case "$message" in
"$msg"*)
echo "$action $squash $action! $msg"
printf '%s\n' "$action $squash $action! $msg"
used="$used$squash "
;;
esac
@@ -895,7 +895,7 @@ first and then run 'git rebase --continue' again."
do
if test t != "$PRESERVE_MERGES"
then
echo "pick $shortsha1 $rest" >> "$TODO"
printf '%s\n' "pick $shortsha1 $rest" >> "$TODO"
else
sha1=$(git rev-parse $shortsha1)
if test -z "$REBASE_ROOT"
@@ -914,7 +914,7 @@ first and then run 'git rebase --continue' again."
if test f = "$preserve"
then
touch "$REWRITTEN"/$sha1
echo "pick $shortsha1 $rest" >> "$TODO"
printf '%s\n' "pick $shortsha1 $rest" >> "$TODO"
fi
fi
done

View File

@@ -31,7 +31,7 @@ valid_custom_tool()
valid_tool() {
case "$1" in
firefox | iceweasel | chrome | chromium | konqueror | w3m | links | lynx | dillo | open | start)
firefox | iceweasel | chrome | google-chrome | chromium | konqueror | w3m | links | lynx | dillo | open | start)
;; # happy
*)
valid_custom_tool "$1" || return 1
@@ -103,7 +103,7 @@ fi
if test -z "$browser" ; then
if test -n "$DISPLAY"; then
browser_candidates="firefox iceweasel chrome chromium konqueror w3m links lynx dillo"
browser_candidates="firefox iceweasel google-chrome chrome chromium konqueror w3m links lynx dillo"
if test "$KDE_FULL_SESSION" = "true"; then
browser_candidates="konqueror $browser_candidates"
fi
@@ -146,7 +146,7 @@ case "$browser" in
test "$vers" -lt 2 && NEWTAB=''
"$browser_path" $NEWTAB "$@" &
;;
chrome|chromium)
google-chrome|chrome|chromium)
# Actual command for chromium is chromium-browser.
# No need to specify newTab. It's default in chromium
eval "$browser_path" "$@" &

1
t/.gitignore vendored
View File

@@ -1,2 +1,3 @@
/trash directory*
/test-results
/.prove

View File

@@ -30,6 +30,7 @@ clean:
$(RM) -r 'trash directory'.* test-results
$(RM) t????/cvsroot/CVSROOT/?*
$(RM) -r valgrind/bin
$(RM) .prove
aggregate-results-and-cleanup: $(T)
$(MAKE) aggregate-results

View File

@@ -637,13 +637,19 @@ test_expect_success 'set up commits with funny messages' '
git commit -a -m "end with slash\\" &&
echo >>file1 &&
test_tick &&
git commit -a -m "something (\000) that looks like octal" &&
echo >>file1 &&
test_tick &&
git commit -a -m "something (\n) that looks like a newline" &&
echo >>file1 &&
test_tick &&
git commit -a -m "another commit"
'
test_expect_success 'rebase-i history with funny messages' '
git rev-list A..funny >expect &&
test_tick &&
FAKE_LINES="1 2" git rebase -i A &&
FAKE_LINES="1 2 3 4" git rebase -i A &&
git rev-list A.. >actual &&
test_cmp expect actual
'

View File

@@ -272,17 +272,20 @@ test_expect_success 'git add --dry-run of non-existing file' "
echo \"fatal: pathspec 'ignored-file' did not match any files\" | test_cmp - actual
"
cat >expect <<EOF
cat >expect.err <<\EOF
The following paths are ignored by one of your .gitignore files:
ignored-file
Use -f if you really want to add them.
fatal: no files added
EOF
cat >expect.out <<\EOF
add 'track-this'
EOF
test_expect_success 'git add --dry-run --ignore-missing of non-existing file' '
test_must_fail git add --dry-run --ignore-missing track-this ignored-file >actual 2>&1 &&
test_cmp expect actual
test_must_fail git add --dry-run --ignore-missing track-this ignored-file >actual.out 2>actual.err &&
test_cmp expect.out actual.out &&
test_cmp expect.err actual.err
'
test_done