зеркало из https://github.com/microsoft/git.git
Merge branch 'master' into next
* master: Make cvsexportcommit remove files. http/ftp: optionally ask curl to not use EPSV command git-format-patch: fix bug using -o in subdirectories do not discard constness in interp_set_entry value argument Fix approxidate() to understand more extended numbers Clean up approxidate() in preparation for fixes fix daemon.c compilation for NO_IPV6=1 daemon: default to 256 for HOST_NAME_MAX if it is not defined format-patch: use cwd as default output directory svnimport: add support for parsing From: lines for author Contributed bash completion support for core Git tools.
This commit is contained in:
Коммит
ce47b9fb1c
|
@ -202,6 +202,12 @@ http.lowSpeedLimit, http.lowSpeedTime::
|
|||
Can be overridden by the 'GIT_HTTP_LOW_SPEED_LIMIT' and
|
||||
'GIT_HTTP_LOW_SPEED_TIME' environment variables.
|
||||
|
||||
http.noEPSV::
|
||||
A boolean which disables using of EPSV ftp command by curl.
|
||||
This can helpful with some "poor" ftp servers which doesn't
|
||||
support EPSV mode. Can be overridden by the 'GIT_CURL_FTP_NO_EPSV'
|
||||
environment variable. Default is false (curl will use EPSV).
|
||||
|
||||
i18n.commitEncoding::
|
||||
Character encoding the commit messages are stored in; git itself
|
||||
does not care per se, but this information is necessary e.g. when
|
||||
|
|
|
@ -348,6 +348,9 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
|
|||
if (!rev.diffopt.output_format)
|
||||
rev.diffopt.output_format = DIFF_FORMAT_DIFFSTAT | DIFF_FORMAT_PATCH;
|
||||
|
||||
if (!output_directory)
|
||||
output_directory = prefix;
|
||||
|
||||
if (output_directory) {
|
||||
if (use_stdout)
|
||||
die("standard output, or directory, which one?");
|
||||
|
|
|
@ -0,0 +1,324 @@
|
|||
#
|
||||
# bash completion support for core Git.
|
||||
#
|
||||
# Copyright (C) 2006 Shawn Pearce
|
||||
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
|
||||
#
|
||||
# The contained completion routines provide support for completing:
|
||||
#
|
||||
# *) local and remote branch names
|
||||
# *) local and remote tag names
|
||||
# *) .git/remotes file names
|
||||
# *) git 'subcommands'
|
||||
# *) tree paths within 'ref:path/to/file' expressions
|
||||
#
|
||||
# To use these routines:
|
||||
#
|
||||
# 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
|
||||
# 2) Added the following line to your .bashrc:
|
||||
# source ~/.git-completion.sh
|
||||
#
|
||||
|
||||
__git_refs ()
|
||||
{
|
||||
local cmd i is_hash=y
|
||||
if [ -d "$1" ]; then
|
||||
cmd=git-peek-remote
|
||||
else
|
||||
cmd=git-ls-remote
|
||||
fi
|
||||
for i in $($cmd "$1" 2>/dev/null); do
|
||||
case "$is_hash,$i" in
|
||||
y,*) is_hash=n ;;
|
||||
n,*^{}) is_hash=y ;;
|
||||
n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
|
||||
n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
|
||||
n,*) is_hash=y; echo "$i" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
__git_refs2 ()
|
||||
{
|
||||
local cmd i is_hash=y
|
||||
if [ -d "$1" ]; then
|
||||
cmd=git-peek-remote
|
||||
else
|
||||
cmd=git-ls-remote
|
||||
fi
|
||||
for i in $($cmd "$1" 2>/dev/null); do
|
||||
case "$is_hash,$i" in
|
||||
y,*) is_hash=n ;;
|
||||
n,*^{}) is_hash=y ;;
|
||||
n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}:${i#refs/tags/}" ;;
|
||||
n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}:${i#refs/heads/}" ;;
|
||||
n,*) is_hash=y; echo "$i:$i" ;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
__git_remotes ()
|
||||
{
|
||||
local i REVERTGLOB=$(shopt -p nullglob)
|
||||
shopt -s nullglob
|
||||
for i in .git/remotes/*; do
|
||||
echo ${i#.git/remotes/}
|
||||
done
|
||||
$REVERTGLOB
|
||||
}
|
||||
|
||||
__git_complete_file ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
case "$cur" in
|
||||
?*:*)
|
||||
local pfx ls ref="$(echo "$cur" | sed 's,:.*$,,')"
|
||||
cur="$(echo "$cur" | sed 's,^.*:,,')"
|
||||
case "$cur" in
|
||||
?*/*)
|
||||
pfx="$(echo "$cur" | sed 's,/[^/]*$,,')"
|
||||
cur="$(echo "$cur" | sed 's,^.*/,,')"
|
||||
ls="$ref:$pfx"
|
||||
pfx="$pfx/"
|
||||
;;
|
||||
*)
|
||||
ls="$ref"
|
||||
;;
|
||||
esac
|
||||
COMPREPLY=($(compgen -P "$pfx" \
|
||||
-W "$(git-ls-tree "$ls" \
|
||||
| sed '/^100... blob /s,^.* ,,
|
||||
/^040000 tree /{
|
||||
s,^.* ,,
|
||||
s,$,/,
|
||||
}
|
||||
s/^.* //')" \
|
||||
-- "$cur"))
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=($(compgen -W "$(__git_refs .)" -- "$cur"))
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_branch ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "-l -f -d -D $(__git_refs .)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_cat_file ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
case "${COMP_WORDS[0]},$COMP_CWORD" in
|
||||
git-cat-file*,1)
|
||||
COMPREPLY=($(compgen -W "-p -t blob tree commit tag" -- "$cur"))
|
||||
;;
|
||||
git,2)
|
||||
COMPREPLY=($(compgen -W "-p -t blob tree commit tag" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
__git_complete_file
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_checkout ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "-l -b $(__git_refs .)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_diff ()
|
||||
{
|
||||
__git_complete_file
|
||||
}
|
||||
|
||||
_git_diff_tree ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "-r -p -M $(__git_refs .)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_fetch ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
case "${COMP_WORDS[0]},$COMP_CWORD" in
|
||||
git-fetch*,1)
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
;;
|
||||
git,2)
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
case "$cur" in
|
||||
*:*)
|
||||
cur=$(echo "$cur" | sed 's/^.*://')
|
||||
COMPREPLY=($(compgen -W "$(__git_refs .)" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
local remote
|
||||
case "${COMP_WORDS[0]}" in
|
||||
git-fetch) remote="${COMP_WORDS[1]}" ;;
|
||||
git) remote="${COMP_WORDS[2]}" ;;
|
||||
esac
|
||||
COMPREPLY=($(compgen -W "$(__git_refs2 "$remote")" -- "$cur"))
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_ls_remote ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_ls_tree ()
|
||||
{
|
||||
__git_complete_file
|
||||
}
|
||||
|
||||
_git_log ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
case "$cur" in
|
||||
*..*)
|
||||
local pfx=$(echo "$cur" | sed 's/\.\..*$/../')
|
||||
cur=$(echo "$cur" | sed 's/^.*\.\.//')
|
||||
COMPREPLY=($(compgen -P "$pfx" -W "$(__git_refs .)" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=($(compgen -W "$(__git_refs .)" -- "$cur"))
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_merge_base ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "$(__git_refs .)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git_pull ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
case "${COMP_WORDS[0]},$COMP_CWORD" in
|
||||
git-pull*,1)
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
;;
|
||||
git,2)
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
local remote
|
||||
case "${COMP_WORDS[0]}" in
|
||||
git-pull) remote="${COMP_WORDS[1]}" ;;
|
||||
git) remote="${COMP_WORDS[2]}" ;;
|
||||
esac
|
||||
COMPREPLY=($(compgen -W "$(__git_refs "$remote")" -- "$cur"))
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_push ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
|
||||
case "${COMP_WORDS[0]},$COMP_CWORD" in
|
||||
git-push*,1)
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
;;
|
||||
git,2)
|
||||
COMPREPLY=($(compgen -W "$(__git_remotes)" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
case "$cur" in
|
||||
*:*)
|
||||
local remote
|
||||
case "${COMP_WORDS[0]}" in
|
||||
git-push) remote="${COMP_WORDS[1]}" ;;
|
||||
git) remote="${COMP_WORDS[2]}" ;;
|
||||
esac
|
||||
cur=$(echo "$cur" | sed 's/^.*://')
|
||||
COMPREPLY=($(compgen -W "$(__git_refs "$remote")" -- "$cur"))
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=($(compgen -W "$(__git_refs2 .)" -- "$cur"))
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_git_show ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "$(__git_refs .)" -- "$cur"))
|
||||
}
|
||||
|
||||
_git ()
|
||||
{
|
||||
if [ $COMP_CWORD = 1 ]; then
|
||||
COMPREPLY=($(compgen \
|
||||
-W "--version $(git help -a|egrep '^ ')" \
|
||||
-- "${COMP_WORDS[COMP_CWORD]}"))
|
||||
else
|
||||
case "${COMP_WORDS[1]}" in
|
||||
branch) _git_branch ;;
|
||||
cat-file) _git_cat_file ;;
|
||||
checkout) _git_checkout ;;
|
||||
diff) _git_diff ;;
|
||||
diff-tree) _git_diff_tree ;;
|
||||
fetch) _git_fetch ;;
|
||||
log) _git_log ;;
|
||||
ls-remote) _git_ls_remote ;;
|
||||
ls-tree) _git_ls_tree ;;
|
||||
pull) _git_pull ;;
|
||||
push) _git_push ;;
|
||||
show) _git_show ;;
|
||||
show-branch) _git_log ;;
|
||||
whatchanged) _git_log ;;
|
||||
*) COMPREPLY=() ;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
_gitk ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
COMPREPLY=($(compgen -W "--all $(__git_refs .)" -- "$cur"))
|
||||
}
|
||||
|
||||
complete -o default -o nospace -F _git git
|
||||
complete -o default -F _gitk gitk
|
||||
complete -o default -F _git_branch git-branch
|
||||
complete -o default -o nospace -F _git_cat_file git-cat-file
|
||||
complete -o default -F _git_checkout git-checkout
|
||||
complete -o default -o nospace -F _git_diff git-diff
|
||||
complete -o default -F _git_diff_tree git-diff-tree
|
||||
complete -o default -o nospace -F _git_fetch git-fetch
|
||||
complete -o default -o nospace -F _git_log git-log
|
||||
complete -o default -F _git_ls_remote git-ls-remote
|
||||
complete -o default -o nospace -F _git_ls_tree git-ls-tree
|
||||
complete -o default -F _git_merge_base git-merge-base
|
||||
complete -o default -o nospace -F _git_pull git-pull
|
||||
complete -o default -o nospace -F _git_push git-push
|
||||
complete -o default -F _git_show git-show
|
||||
complete -o default -o nospace -F _git_log git-whatchanged
|
||||
|
||||
# The following are necessary only for Cygwin, and only are needed
|
||||
# when the user has tab-completed the executable name and consequently
|
||||
# included the '.exe' suffix.
|
||||
#
|
||||
complete -o default -o nospace -F _git_cat_file git-cat-file.exe
|
||||
complete -o default -o nospace -F _git_diff git-diff.exe
|
||||
complete -o default -o nospace -F _git_diff_tree git-diff-tree.exe
|
||||
complete -o default -o nospace -F _git_log git-log.exe
|
||||
complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
|
||||
complete -o default -F _git_merge_base git-merge-base.exe
|
||||
complete -o default -o nospace -F _git_push git-push.exe
|
||||
complete -o default -o nospace -F _git_log git-whatchanged.exe
|
6
daemon.c
6
daemon.c
|
@ -15,6 +15,10 @@
|
|||
#include "exec_cmd.h"
|
||||
#include "interpolate.h"
|
||||
|
||||
#ifndef HOST_NAME_MAX
|
||||
#define HOST_NAME_MAX 256
|
||||
#endif
|
||||
|
||||
static int log_syslog;
|
||||
static int verbose;
|
||||
static int reuseaddr;
|
||||
|
@ -830,7 +834,7 @@ static int socksetup(char *listen_addr, int listen_port, int **socklist_p)
|
|||
|
||||
#else /* NO_IPV6 */
|
||||
|
||||
static int socksetup(char *lisen_addr, int listen_port, int **socklist_p)
|
||||
static int socksetup(char *listen_addr, int listen_port, int **socklist_p)
|
||||
{
|
||||
struct sockaddr_in sin;
|
||||
int sockfd;
|
||||
|
|
53
date.c
53
date.c
|
@ -598,6 +598,32 @@ static void date_tea(struct tm *tm, int *num)
|
|||
date_time(tm, 17);
|
||||
}
|
||||
|
||||
static void date_pm(struct tm *tm, int *num)
|
||||
{
|
||||
int hour = *num;
|
||||
*num = 0;
|
||||
|
||||
if (hour > 0 && hour < 12) {
|
||||
tm->tm_hour = hour;
|
||||
tm->tm_min = 0;
|
||||
tm->tm_sec = 0;
|
||||
}
|
||||
if (tm->tm_hour > 0 && tm->tm_hour < 12)
|
||||
tm->tm_hour += 12;
|
||||
}
|
||||
|
||||
static void date_am(struct tm *tm, int *num)
|
||||
{
|
||||
int hour = *num;
|
||||
*num = 0;
|
||||
|
||||
if (hour > 0 && hour < 12) {
|
||||
tm->tm_hour = hour;
|
||||
tm->tm_min = 0;
|
||||
tm->tm_sec = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static const struct special {
|
||||
const char *name;
|
||||
void (*fn)(struct tm *, int *);
|
||||
|
@ -606,6 +632,8 @@ static const struct special {
|
|||
{ "noon", date_noon },
|
||||
{ "midnight", date_midnight },
|
||||
{ "tea", date_tea },
|
||||
{ "PM", date_pm },
|
||||
{ "AM", date_am },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
|
@ -712,6 +740,27 @@ static const char *approxidate_alpha(const char *date, struct tm *tm, int *num)
|
|||
return end;
|
||||
}
|
||||
|
||||
static const char *approxidate_digit(const char *date, struct tm *tm, int *num)
|
||||
{
|
||||
char *end;
|
||||
unsigned long number = strtoul(date, &end, 10);
|
||||
|
||||
switch (*end) {
|
||||
case ':':
|
||||
case '.':
|
||||
case '/':
|
||||
case '-':
|
||||
if (isdigit(end[1])) {
|
||||
int match = match_multi_number(number, *end, date, end, tm);
|
||||
if (match)
|
||||
return date + match;
|
||||
}
|
||||
}
|
||||
|
||||
*num = number;
|
||||
return end;
|
||||
}
|
||||
|
||||
unsigned long approxidate(const char *date)
|
||||
{
|
||||
int number = 0;
|
||||
|
@ -731,9 +780,7 @@ unsigned long approxidate(const char *date)
|
|||
break;
|
||||
date++;
|
||||
if (isdigit(c)) {
|
||||
char *end;
|
||||
number = strtoul(date-1, &end, 10);
|
||||
date = end;
|
||||
date = approxidate_digit(date-1, &tm, &number);
|
||||
continue;
|
||||
}
|
||||
if (isalpha(c))
|
||||
|
|
|
@ -31,6 +31,10 @@ clone_dumb_http () {
|
|||
cd "$2" &&
|
||||
clone_tmp="$GIT_DIR/clone-tmp" &&
|
||||
mkdir -p "$clone_tmp" || exit 1
|
||||
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
|
||||
"`git-repo-config --bool http.noEPSV`" = true ]; then
|
||||
curl_extra_args="${curl_extra_args} --disable-epsv"
|
||||
fi
|
||||
http_fetch "$1/info/refs" "$clone_tmp/refs" || {
|
||||
echo >&2 "Cannot get remote repository information.
|
||||
Perhaps git-update-server-info needs to be run there?"
|
||||
|
|
|
@ -135,7 +135,7 @@ foreach my $f (@files) {
|
|||
if ($fields[4] eq 'M') {
|
||||
push @mfiles, $fields[5];
|
||||
}
|
||||
if ($fields[4] eq 'R') {
|
||||
if ($fields[4] eq 'D') {
|
||||
push @dfiles, $fields[5];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -289,6 +289,10 @@ fetch_main () {
|
|||
if [ -n "$GIT_SSL_NO_VERIFY" ]; then
|
||||
curl_extra_args="-k"
|
||||
fi
|
||||
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
|
||||
"`git-repo-config --bool http.noEPSV`" = true ]; then
|
||||
noepsv_opt="--disable-epsv"
|
||||
fi
|
||||
max_depth=5
|
||||
depth=0
|
||||
head="ref: $remote_name"
|
||||
|
@ -300,7 +304,7 @@ fetch_main () {
|
|||
$u =~ s{([^-a-zA-Z0-9/.])}{sprintf"%%%02x",ord($1)}eg;
|
||||
print "$u";
|
||||
' "$head")
|
||||
head=$(curl -nsfL $curl_extra_args "$remote/$remote_name_quoted")
|
||||
head=$(curl -nsfL $curl_extra_args $noepsv_opt "$remote/$remote_name_quoted")
|
||||
depth=$( expr \( $depth + 1 \) )
|
||||
done
|
||||
expr "z$head" : "z$_x40\$" >/dev/null ||
|
||||
|
|
|
@ -53,6 +53,10 @@ http://* | https://* | ftp://* )
|
|||
if [ -n "$GIT_SSL_NO_VERIFY" ]; then
|
||||
curl_extra_args="-k"
|
||||
fi
|
||||
if [ -n "$GIT_CURL_FTP_NO_EPSV" -o \
|
||||
"`git-repo-config --bool http.noEPSV`" = true ]; then
|
||||
curl_extra_args="${curl_extra_args} --disable-epsv"
|
||||
fi
|
||||
curl -nsf $curl_extra_args --header "Pragma: no-cache" "$peek_repo/info/refs" ||
|
||||
echo "failed slurping"
|
||||
;;
|
||||
|
|
|
@ -31,7 +31,7 @@ $SIG{'PIPE'}="IGNORE";
|
|||
$ENV{'TZ'}="UTC";
|
||||
|
||||
our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,
|
||||
$opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S);
|
||||
$opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S,$opt_F);
|
||||
|
||||
sub usage() {
|
||||
print STDERR <<END;
|
||||
|
@ -39,12 +39,12 @@ Usage: ${\basename $0} # fetch/update GIT from SVN
|
|||
[-o branch-for-HEAD] [-h] [-v] [-l max_rev]
|
||||
[-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname]
|
||||
[-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg]
|
||||
[-m] [-M regex] [-A author_file] [-S] [SVN_URL]
|
||||
[-m] [-M regex] [-A author_file] [-S] [-F] [SVN_URL]
|
||||
END
|
||||
exit(1);
|
||||
}
|
||||
|
||||
getopts("A:b:C:dDhiI:l:mM:o:rs:t:T:Suv") or usage();
|
||||
getopts("A:b:C:dDFhiI:l:mM:o:rs:t:T:Suv") or usage();
|
||||
usage if $opt_h;
|
||||
|
||||
my $tag_name = $opt_t || "tags";
|
||||
|
@ -548,8 +548,12 @@ sub commit {
|
|||
$committer_name = $committer_email = $author;
|
||||
}
|
||||
|
||||
if ($opt_S && $message =~ /Signed-off-by:\s+(.*?)\s+<(.*)>\s*\n/) {
|
||||
if ($opt_F && $message =~ /From:\s+(.*?)\s+<(.*)>\s*\n/) {
|
||||
($author_name, $author_email) = ($1, $2);
|
||||
print "Author from From: $1 <$2>\n" if ($opt_v);;
|
||||
} elsif ($opt_S && $message =~ /Signed-off-by:\s+(.*?)\s+<(.*)>\s*\n/) {
|
||||
($author_name, $author_email) = ($1, $2);
|
||||
print "Author from Signed-off-by: $1 <$2>\n" if ($opt_v);;
|
||||
} else {
|
||||
$author_name = $committer_name;
|
||||
$author_email = $committer_email;
|
||||
|
|
12
http.c
12
http.c
|
@ -23,6 +23,7 @@ char *ssl_capath = NULL;
|
|||
char *ssl_cainfo = NULL;
|
||||
long curl_low_speed_limit = -1;
|
||||
long curl_low_speed_time = -1;
|
||||
int curl_ftp_no_epsv = 0;
|
||||
|
||||
struct curl_slist *pragma_header;
|
||||
|
||||
|
@ -155,6 +156,11 @@ static int http_options(const char *var, const char *value)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("http.noepsv", var)) {
|
||||
curl_ftp_no_epsv = git_config_bool(var, value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Fall back on the default ones */
|
||||
return git_default_config(var, value);
|
||||
}
|
||||
|
@ -196,6 +202,9 @@ static CURL* get_curl_handle(void)
|
|||
|
||||
curl_easy_setopt(result, CURLOPT_USERAGENT, GIT_USER_AGENT);
|
||||
|
||||
if (curl_ftp_no_epsv)
|
||||
curl_easy_setopt(result, CURLOPT_FTP_USE_EPSV, 0);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -251,6 +260,9 @@ void http_init(void)
|
|||
max_requests = DEFAULT_MAX_REQUESTS;
|
||||
#endif
|
||||
|
||||
if (getenv("GIT_CURL_FTP_NO_EPSV"))
|
||||
curl_ftp_no_epsv = 1;
|
||||
|
||||
#ifndef NO_CURL_EASY_DUPHANDLE
|
||||
curl_default = get_curl_handle();
|
||||
#endif
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
#include "interpolate.h"
|
||||
|
||||
|
||||
void interp_set_entry(struct interp *table, int slot, char *value)
|
||||
void interp_set_entry(struct interp *table, int slot, const char *value)
|
||||
{
|
||||
char *oldval = table[slot].value;
|
||||
char *newval = value;
|
||||
char *newval = NULL;
|
||||
|
||||
if (oldval)
|
||||
free(oldval);
|
||||
|
|
|
@ -16,7 +16,7 @@ struct interp {
|
|||
char *value;
|
||||
};
|
||||
|
||||
extern void interp_set_entry(struct interp *table, int slot, char *value);
|
||||
extern void interp_set_entry(struct interp *table, int slot, const char *value);
|
||||
extern void interp_clear_table(struct interp *table, int ninterps);
|
||||
|
||||
extern int interpolate(char *result, int reslen,
|
||||
|
|
Загрузка…
Ссылка в новой задаче