merge(3p/git): Merge git subtree at v2.29.2
This also bumps the stable nixpkgs to 20.09 as of 2020-11-21, because there is some breakage in the git build related to the netrc credentials helper which someone has taken care of in nixpkgs. The stable channel is not used for anything other than git, so this should be fine. Change-Id: I3575a19dab09e1e9556cf8231d717de9890484fb
This commit is contained in:
parent
082c006c04
commit
f4609b896f
1485 changed files with 241535 additions and 109418 deletions
284
third_party/git/git-submodule.sh
vendored
284
third_party/git/git-submodule.sh
vendored
|
|
@ -10,8 +10,9 @@ USAGE="[--quiet] [--cached]
|
|||
or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
|
||||
or: $dashless [--quiet] init [--] [<path>...]
|
||||
or: $dashless [--quiet] deinit [-f|--force] (--all| [--] <path>...)
|
||||
or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--] [<path>...]
|
||||
or: $dashless [--quiet] update [--init] [--remote] [-N|--no-fetch] [-f|--force] [--checkout|--merge|--rebase] [--[no-]recommend-shallow] [--reference <repository>] [--recursive] [--[no-]single-branch] [--] [<path>...]
|
||||
or: $dashless [--quiet] set-branch (--default|--branch <branch>) [--] <path>
|
||||
or: $dashless [--quiet] set-url [--] <path> <newurl>
|
||||
or: $dashless [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
|
||||
or: $dashless [--quiet] foreach [--recursive] <command>
|
||||
or: $dashless [--quiet] sync [--recursive] [--] [<path>...]
|
||||
|
|
@ -36,6 +37,7 @@ reference=
|
|||
cached=
|
||||
recursive=
|
||||
init=
|
||||
require_init=
|
||||
files=
|
||||
remote=
|
||||
nofetch=
|
||||
|
|
@ -45,6 +47,9 @@ custom_name=
|
|||
depth=
|
||||
progress=
|
||||
dissociate=
|
||||
single_branch=
|
||||
jobs=
|
||||
recommend_shallow=
|
||||
|
||||
die_if_unmatched ()
|
||||
{
|
||||
|
|
@ -54,31 +59,6 @@ die_if_unmatched ()
|
|||
fi
|
||||
}
|
||||
|
||||
#
|
||||
# Print a submodule configuration setting
|
||||
#
|
||||
# $1 = submodule name
|
||||
# $2 = option name
|
||||
# $3 = default value
|
||||
#
|
||||
# Checks in the usual git-config places first (for overrides),
|
||||
# otherwise it falls back on .gitmodules. This allows you to
|
||||
# distribute project-wide defaults in .gitmodules, while still
|
||||
# customizing individual repositories if necessary. If the option is
|
||||
# not in .gitmodules either, print a default value.
|
||||
#
|
||||
get_submodule_config () {
|
||||
name="$1"
|
||||
option="$2"
|
||||
default="$3"
|
||||
value=$(git config submodule."$name"."$option")
|
||||
if test -z "$value"
|
||||
then
|
||||
value=$(git submodule--helper config submodule."$name"."$option")
|
||||
fi
|
||||
printf '%s' "${value:-$default}"
|
||||
}
|
||||
|
||||
isnumber()
|
||||
{
|
||||
n=$(($1 + 0)) 2>/dev/null && test "$n" = "$1"
|
||||
|
|
@ -239,13 +219,15 @@ cmd_add()
|
|||
die "$(eval_gettext "'\$sm_path' does not have a commit checked out")"
|
||||
fi
|
||||
|
||||
if test -z "$force" &&
|
||||
! git add --dry-run --ignore-missing --no-warn-embedded-repo "$sm_path" > /dev/null 2>&1
|
||||
if test -z "$force"
|
||||
then
|
||||
eval_gettextln "The following path is ignored by one of your .gitignore files:
|
||||
\$sm_path
|
||||
Use -f if you really want to add it." >&2
|
||||
exit 1
|
||||
dryerr=$(git add --dry-run --ignore-missing --no-warn-embedded-repo "$sm_path" 2>&1 >/dev/null)
|
||||
res=$?
|
||||
if test $res -ne 0
|
||||
then
|
||||
echo >&2 "$dryerr"
|
||||
exit $res
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$custom_name"
|
||||
|
|
@ -458,7 +440,7 @@ cmd_update()
|
|||
GIT_QUIET=1
|
||||
;;
|
||||
-v)
|
||||
GIT_QUIET=0
|
||||
unset GIT_QUIET
|
||||
;;
|
||||
--progress)
|
||||
progress=1
|
||||
|
|
@ -466,6 +448,10 @@ cmd_update()
|
|||
-i|--init)
|
||||
init=1
|
||||
;;
|
||||
--require-init)
|
||||
init=1
|
||||
require_init=1
|
||||
;;
|
||||
--remote)
|
||||
remote=1
|
||||
;;
|
||||
|
|
@ -520,6 +506,12 @@ cmd_update()
|
|||
--jobs=*)
|
||||
jobs=$1
|
||||
;;
|
||||
--single-branch)
|
||||
single_branch="--single-branch"
|
||||
;;
|
||||
--no-single-branch)
|
||||
single_branch="--no-single-branch"
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
|
|
@ -548,6 +540,8 @@ cmd_update()
|
|||
${reference:+"$reference"} \
|
||||
${dissociate:+"--dissociate"} \
|
||||
${depth:+--depth "$depth"} \
|
||||
${require_init:+--require-init} \
|
||||
$single_branch \
|
||||
$recommend_shallow \
|
||||
$jobs \
|
||||
-- \
|
||||
|
|
@ -620,13 +614,13 @@ cmd_update()
|
|||
say_msg="$(eval_gettext "Submodule path '\$displaypath': checked out '\$sha1'")"
|
||||
;;
|
||||
rebase)
|
||||
command="git rebase"
|
||||
command="git rebase ${GIT_QUIET:+--quiet}"
|
||||
die_msg="$(eval_gettext "Unable to rebase '\$sha1' in submodule path '\$displaypath'")"
|
||||
say_msg="$(eval_gettext "Submodule path '\$displaypath': rebased into '\$sha1'")"
|
||||
must_die_on_failure=yes
|
||||
;;
|
||||
merge)
|
||||
command="git merge"
|
||||
command="git merge ${GIT_QUIET:+--quiet}"
|
||||
die_msg="$(eval_gettext "Unable to merge '\$sha1' in submodule path '\$displaypath'")"
|
||||
say_msg="$(eval_gettext "Submodule path '\$displaypath': merged in '\$sha1'")"
|
||||
must_die_on_failure=yes
|
||||
|
|
@ -700,7 +694,7 @@ cmd_update()
|
|||
# $@ = requested path
|
||||
#
|
||||
cmd_set_branch() {
|
||||
unset_branch=false
|
||||
default=
|
||||
branch=
|
||||
|
||||
while test $# -ne 0
|
||||
|
|
@ -710,7 +704,7 @@ cmd_set_branch() {
|
|||
# we don't do anything with this but we need to accept it
|
||||
;;
|
||||
-d|--default)
|
||||
unset_branch=true
|
||||
default=1
|
||||
;;
|
||||
-b|--branch)
|
||||
case "$2" in '') usage ;; esac
|
||||
|
|
@ -731,33 +725,36 @@ cmd_set_branch() {
|
|||
shift
|
||||
done
|
||||
|
||||
if test $# -ne 1
|
||||
then
|
||||
usage
|
||||
fi
|
||||
git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper set-branch ${GIT_QUIET:+--quiet} ${branch:+--branch "$branch"} ${default:+--default} -- "$@"
|
||||
}
|
||||
|
||||
# we can't use `git submodule--helper name` here because internally, it
|
||||
# hashes the path so a trailing slash could lead to an unintentional no match
|
||||
name="$(git submodule--helper list "$1" | cut -f2)"
|
||||
if test -z "$name"
|
||||
then
|
||||
exit 1
|
||||
fi
|
||||
#
|
||||
# Configures a submodule's remote url
|
||||
#
|
||||
# $@ = requested path, requested url
|
||||
#
|
||||
cmd_set_url() {
|
||||
while test $# -ne 0
|
||||
do
|
||||
case "$1" in
|
||||
-q|--quiet)
|
||||
GIT_QUIET=1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
test -n "$branch"; has_branch=$?
|
||||
test "$unset_branch" = true; has_unset_branch=$?
|
||||
|
||||
if test $((!$has_branch != !$has_unset_branch)) -eq 0
|
||||
then
|
||||
usage
|
||||
fi
|
||||
|
||||
if test $has_branch -eq 0
|
||||
then
|
||||
git submodule--helper config submodule."$name".branch "$branch"
|
||||
else
|
||||
git submodule--helper config --unset submodule."$name".branch
|
||||
fi
|
||||
git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper set-url ${GIT_QUIET:+--quiet} -- "$@"
|
||||
}
|
||||
|
||||
#
|
||||
|
|
@ -809,166 +806,7 @@ cmd_summary() {
|
|||
shift
|
||||
done
|
||||
|
||||
test $summary_limit = 0 && return
|
||||
|
||||
if rev=$(git rev-parse -q --verify --default HEAD ${1+"$1"})
|
||||
then
|
||||
head=$rev
|
||||
test $# = 0 || shift
|
||||
elif test -z "$1" || test "$1" = "HEAD"
|
||||
then
|
||||
# before the first commit: compare with an empty tree
|
||||
head=$(git hash-object -w -t tree --stdin </dev/null)
|
||||
test -z "$1" || shift
|
||||
else
|
||||
head="HEAD"
|
||||
fi
|
||||
|
||||
if [ -n "$files" ]
|
||||
then
|
||||
test -n "$cached" &&
|
||||
die "$(gettext "The --cached option cannot be used with the --files option")"
|
||||
diff_cmd=diff-files
|
||||
head=
|
||||
fi
|
||||
|
||||
cd_to_toplevel
|
||||
eval "set $(git rev-parse --sq --prefix "$wt_prefix" -- "$@")"
|
||||
# Get modified modules cared by user
|
||||
modules=$(git $diff_cmd $cached --ignore-submodules=dirty --raw $head -- "$@" |
|
||||
sane_egrep '^:([0-7]* )?160000' |
|
||||
while read -r mod_src mod_dst sha1_src sha1_dst status sm_path
|
||||
do
|
||||
# Always show modules deleted or type-changed (blob<->module)
|
||||
if test "$status" = D || test "$status" = T
|
||||
then
|
||||
printf '%s\n' "$sm_path"
|
||||
continue
|
||||
fi
|
||||
# Respect the ignore setting for --for-status.
|
||||
if test -n "$for_status"
|
||||
then
|
||||
name=$(git submodule--helper name "$sm_path")
|
||||
ignore_config=$(get_submodule_config "$name" ignore none)
|
||||
test $status != A && test $ignore_config = all && continue
|
||||
fi
|
||||
# Also show added or modified modules which are checked out
|
||||
GIT_DIR="$sm_path/.git" git rev-parse --git-dir >/dev/null 2>&1 &&
|
||||
printf '%s\n' "$sm_path"
|
||||
done
|
||||
)
|
||||
|
||||
test -z "$modules" && return
|
||||
|
||||
git $diff_cmd $cached --ignore-submodules=dirty --raw $head -- $modules |
|
||||
sane_egrep '^:([0-7]* )?160000' |
|
||||
cut -c2- |
|
||||
while read -r mod_src mod_dst sha1_src sha1_dst status name
|
||||
do
|
||||
if test -z "$cached" &&
|
||||
is_zero_oid $sha1_dst
|
||||
then
|
||||
case "$mod_dst" in
|
||||
160000)
|
||||
sha1_dst=$(GIT_DIR="$name/.git" git rev-parse HEAD)
|
||||
;;
|
||||
100644 | 100755 | 120000)
|
||||
sha1_dst=$(git hash-object $name)
|
||||
;;
|
||||
000000)
|
||||
;; # removed
|
||||
*)
|
||||
# unexpected type
|
||||
eval_gettextln "unexpected mode \$mod_dst" >&2
|
||||
continue ;;
|
||||
esac
|
||||
fi
|
||||
missing_src=
|
||||
missing_dst=
|
||||
|
||||
test $mod_src = 160000 &&
|
||||
! GIT_DIR="$name/.git" git rev-parse -q --verify $sha1_src^0 >/dev/null &&
|
||||
missing_src=t
|
||||
|
||||
test $mod_dst = 160000 &&
|
||||
! GIT_DIR="$name/.git" git rev-parse -q --verify $sha1_dst^0 >/dev/null &&
|
||||
missing_dst=t
|
||||
|
||||
display_name=$(git submodule--helper relative-path "$name" "$wt_prefix")
|
||||
|
||||
total_commits=
|
||||
case "$missing_src,$missing_dst" in
|
||||
t,)
|
||||
errmsg="$(eval_gettext " Warn: \$display_name doesn't contain commit \$sha1_src")"
|
||||
;;
|
||||
,t)
|
||||
errmsg="$(eval_gettext " Warn: \$display_name doesn't contain commit \$sha1_dst")"
|
||||
;;
|
||||
t,t)
|
||||
errmsg="$(eval_gettext " Warn: \$display_name doesn't contain commits \$sha1_src and \$sha1_dst")"
|
||||
;;
|
||||
*)
|
||||
errmsg=
|
||||
total_commits=$(
|
||||
if test $mod_src = 160000 && test $mod_dst = 160000
|
||||
then
|
||||
range="$sha1_src...$sha1_dst"
|
||||
elif test $mod_src = 160000
|
||||
then
|
||||
range=$sha1_src
|
||||
else
|
||||
range=$sha1_dst
|
||||
fi
|
||||
GIT_DIR="$name/.git" \
|
||||
git rev-list --first-parent $range -- | wc -l
|
||||
)
|
||||
total_commits=" ($(($total_commits + 0)))"
|
||||
;;
|
||||
esac
|
||||
|
||||
sha1_abbr_src=$(GIT_DIR="$name/.git" git rev-parse --short $sha1_src 2>/dev/null ||
|
||||
echo $sha1_src | cut -c1-7)
|
||||
sha1_abbr_dst=$(GIT_DIR="$name/.git" git rev-parse --short $sha1_dst 2>/dev/null ||
|
||||
echo $sha1_dst | cut -c1-7)
|
||||
|
||||
if test $status = T
|
||||
then
|
||||
blob="$(gettext "blob")"
|
||||
submodule="$(gettext "submodule")"
|
||||
if test $mod_dst = 160000
|
||||
then
|
||||
echo "* $display_name $sha1_abbr_src($blob)->$sha1_abbr_dst($submodule)$total_commits:"
|
||||
else
|
||||
echo "* $display_name $sha1_abbr_src($submodule)->$sha1_abbr_dst($blob)$total_commits:"
|
||||
fi
|
||||
else
|
||||
echo "* $display_name $sha1_abbr_src...$sha1_abbr_dst$total_commits:"
|
||||
fi
|
||||
if test -n "$errmsg"
|
||||
then
|
||||
# Don't give error msg for modification whose dst is not submodule
|
||||
# i.e. deleted or changed to blob
|
||||
test $mod_dst = 160000 && echo "$errmsg"
|
||||
else
|
||||
if test $mod_src = 160000 && test $mod_dst = 160000
|
||||
then
|
||||
limit=
|
||||
test $summary_limit -gt 0 && limit="-$summary_limit"
|
||||
GIT_DIR="$name/.git" \
|
||||
git log $limit --pretty='format: %m %s' \
|
||||
--first-parent $sha1_src...$sha1_dst
|
||||
elif test $mod_dst = 160000
|
||||
then
|
||||
GIT_DIR="$name/.git" \
|
||||
git log --pretty='format: > %s' -1 $sha1_dst
|
||||
else
|
||||
GIT_DIR="$name/.git" \
|
||||
git log --pretty='format: < %s' -1 $sha1_src
|
||||
fi
|
||||
echo
|
||||
fi
|
||||
echo
|
||||
done
|
||||
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper summary ${prefix:+--prefix "$prefix"} ${files:+--files} ${cached:+--cached} ${for_status:+--for-status} ${summary_limit:+-n $summary_limit} -- "$@"
|
||||
}
|
||||
#
|
||||
# List all submodules, prefixed with:
|
||||
|
|
@ -1059,7 +897,7 @@ cmd_absorbgitdirs()
|
|||
while test $# != 0 && test -z "$command"
|
||||
do
|
||||
case "$1" in
|
||||
add | foreach | init | deinit | update | set-branch | status | summary | sync | absorbgitdirs)
|
||||
add | foreach | init | deinit | update | set-branch | set-url | status | summary | sync | absorbgitdirs)
|
||||
command=$1
|
||||
;;
|
||||
-q|--quiet)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue