mirror of
https://github.com/git/git.git
synced 2026-04-02 04:50:12 +02:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
10
Documentation/RelNotes-1.6.3.1.txt
Normal file
10
Documentation/RelNotes-1.6.3.1.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
GIT v1.6.3.1 Release Notes
|
||||
==========================
|
||||
|
||||
Fixes since v1.6.3
|
||||
------------------
|
||||
|
||||
* "git checkout -b new-branch" with a staged change in the index
|
||||
incorrectly primed the in-index cache-tree, resulting a wrong tree
|
||||
object to be written out of the index. This is a grave regression
|
||||
since the last 1.6.2.X maintenance release.
|
||||
59
Documentation/RelNotes-1.6.4.txt
Normal file
59
Documentation/RelNotes-1.6.4.txt
Normal file
@@ -0,0 +1,59 @@
|
||||
GIT v1.6.4 Release Notes
|
||||
========================
|
||||
|
||||
With the next major release, "git push" into a branch that is
|
||||
currently checked out will be refused by default. You can choose
|
||||
what should happen upon such a push by setting the configuration
|
||||
variable receive.denyCurrentBranch in the receiving repository.
|
||||
|
||||
To ease the transition plan, the receiving repository of such a
|
||||
push running this release will issue a big warning when the
|
||||
configuration variable is missing. Please refer to:
|
||||
|
||||
http://git.or.cz/gitwiki/GitFaq#non-bare
|
||||
http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
|
||||
|
||||
for more details on the reason why this change is needed and the
|
||||
transition plan.
|
||||
|
||||
For a similar reason, "git push $there :$killed" to delete the branch
|
||||
$killed in a remote repository $there, if $killed branch is the current
|
||||
branch pointed at by its HEAD, gets a large warning. You can choose what
|
||||
should happen upon such a push by setting the configuration variable
|
||||
receive.denyDeleteCurrent in the receiving repository.
|
||||
|
||||
When the user does not tell "git push" what to push, it has always
|
||||
pushed matching refs. For some people it is unexpected, and a new
|
||||
configuration variable push.default has been introduced to allow
|
||||
changing a different default behaviour. To advertise the new feature,
|
||||
a big warning is issued if this is not configured and a git push without
|
||||
arguments is attempted.
|
||||
|
||||
|
||||
Updates since v1.6.3
|
||||
--------------------
|
||||
|
||||
(subsystems)
|
||||
|
||||
(performance)
|
||||
|
||||
(usability, bells and whistles)
|
||||
|
||||
(developers)
|
||||
|
||||
|
||||
Fixes since v1.6.3
|
||||
------------------
|
||||
|
||||
All of the fixes in v1.6.3.X maintenance series are included in this
|
||||
release, unless otherwise noted.
|
||||
|
||||
Here are fixes that this release has, but have not been backported to
|
||||
v1.6.3.X series.
|
||||
|
||||
|
||||
---
|
||||
exec >/var/tmp/1
|
||||
echo O=$(git describe master)
|
||||
O=v1.6.3
|
||||
git shortlog --no-merges $O..master ^maint
|
||||
@@ -111,6 +111,7 @@ OPTIONS
|
||||
--no-abbrev::
|
||||
Display the full sha1s in the output listing rather than abbreviating them.
|
||||
|
||||
-t::
|
||||
--track::
|
||||
When creating a new branch, set up configuration to mark the
|
||||
start-point branch as "upstream" from the new branch. This
|
||||
|
||||
@@ -25,6 +25,10 @@ imposes the following rules on how references are named:
|
||||
grouping, but no slash-separated component can begin with a
|
||||
dot `.`.
|
||||
|
||||
. They must contain at least one `/`. This enforces the presence of a
|
||||
category like `heads/`, `tags/` etc. but the actual names are not
|
||||
restricted.
|
||||
|
||||
. They cannot have two consecutive dots `..` anywhere.
|
||||
|
||||
. They cannot have ASCII control characters (i.e. bytes whose
|
||||
|
||||
@@ -149,7 +149,7 @@ then the cloned repository will become corrupt.
|
||||
part of the source repository is used if no directory is
|
||||
explicitly given ("repo" for "/path/to/repo.git" and "foo"
|
||||
for "host.xz:foo/.git"). Cloning into an existing directory
|
||||
is not allowed.
|
||||
is only allowed if the directory is empty.
|
||||
|
||||
:git-clone: 1
|
||||
include::urls.txt[]
|
||||
|
||||
@@ -69,7 +69,8 @@ OPTIONS
|
||||
|
||||
--add::
|
||||
Adds a new line to the option without altering any existing
|
||||
values. This is the same as providing '^$' as the value_regex.
|
||||
values. This is the same as providing '^$' as the value_regex
|
||||
in `--replace-all`.
|
||||
|
||||
--get::
|
||||
Get the value for a given key (optionally filtered by a regex
|
||||
@@ -155,7 +156,7 @@ See also <<FILES>>.
|
||||
When the color setting for `name` is undefined, the command uses
|
||||
`color.ui` as fallback.
|
||||
|
||||
--get-color name default::
|
||||
--get-color name [default]::
|
||||
|
||||
Find the color configured for `name` (e.g. `color.diff.new`) and
|
||||
output it as the ANSI color escape sequence to the standard
|
||||
|
||||
@@ -180,7 +180,7 @@ static int write_tar_entry(struct archiver_args *args,
|
||||
|
||||
sprintf(header.mode, "%07o", mode & 07777);
|
||||
sprintf(header.size, "%011lo", S_ISREG(mode) ? size : 0);
|
||||
sprintf(header.mtime, "%011lo", args->time);
|
||||
sprintf(header.mtime, "%011lo", (unsigned long) args->time);
|
||||
|
||||
sprintf(header.uid, "%07o", 0);
|
||||
sprintf(header.gid, "%07o", 0);
|
||||
|
||||
@@ -547,7 +547,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
|
||||
struct option options[] = {
|
||||
OPT_GROUP("Generic options"),
|
||||
OPT__VERBOSE(&verbose),
|
||||
OPT_SET_INT( 0 , "track", &track, "set up tracking mode (see git-pull(1))",
|
||||
OPT_SET_INT('t', "track", &track, "set up tracking mode (see git-pull(1))",
|
||||
BRANCH_TRACK_EXPLICIT),
|
||||
OPT_BOOLEAN( 0 , "color", &branch_use_color, "use colored output"),
|
||||
OPT_SET_INT('r', NULL, &kinds, "act on remote-tracking branches",
|
||||
|
||||
@@ -365,17 +365,14 @@ static int merge_working_tree(struct checkout_opts *opts,
|
||||
int ret;
|
||||
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
|
||||
int newfd = hold_locked_index(lock_file, 1);
|
||||
int reprime_cache_tree = 0;
|
||||
|
||||
if (read_cache() < 0)
|
||||
return error("corrupt index file");
|
||||
|
||||
cache_tree_free(&active_cache_tree);
|
||||
if (opts->force) {
|
||||
ret = reset_tree(new->commit->tree, opts, 1);
|
||||
if (ret)
|
||||
return ret;
|
||||
reprime_cache_tree = 1;
|
||||
} else {
|
||||
struct tree_desc trees[2];
|
||||
struct tree *tree;
|
||||
@@ -411,9 +408,7 @@ static int merge_working_tree(struct checkout_opts *opts,
|
||||
init_tree_desc(&trees[1], tree->buffer, tree->size);
|
||||
|
||||
ret = unpack_trees(2, trees, &topts);
|
||||
if (ret != -1) {
|
||||
reprime_cache_tree = 1;
|
||||
} else {
|
||||
if (ret == -1) {
|
||||
/*
|
||||
* Unpack couldn't do a trivial merge; either
|
||||
* give up or do a real merge, depending on
|
||||
@@ -457,8 +452,6 @@ static int merge_working_tree(struct checkout_opts *opts,
|
||||
}
|
||||
}
|
||||
|
||||
if (reprime_cache_tree)
|
||||
prime_cache_tree(&active_cache_tree, new->commit->tree);
|
||||
if (write_cache(newfd, active_cache, active_nr) ||
|
||||
commit_locked_index(lock_file))
|
||||
die("unable to write new index file");
|
||||
|
||||
@@ -353,12 +353,18 @@ static int store_updated_refs(const char *url, const char *remote_name,
|
||||
kind);
|
||||
note_len += sprintf(note + note_len, "'%s' of ", what);
|
||||
}
|
||||
note_len += sprintf(note + note_len, "%.*s", url_len, url);
|
||||
fprintf(fp, "%s\t%s\t%s\n",
|
||||
note[note_len] = '\0';
|
||||
fprintf(fp, "%s\t%s\t%s",
|
||||
sha1_to_hex(commit ? commit->object.sha1 :
|
||||
rm->old_sha1),
|
||||
rm->merge ? "" : "not-for-merge",
|
||||
note);
|
||||
for (i = 0; i < url_len; ++i)
|
||||
if ('\n' == url[i])
|
||||
fputs("\\n", fp);
|
||||
else
|
||||
fputc(url[i], fp);
|
||||
fputc('\n', fp);
|
||||
|
||||
if (ref)
|
||||
rc |= update_local_ref(ref, what, note);
|
||||
|
||||
@@ -1322,6 +1322,35 @@ _git_send_email ()
|
||||
COMPREPLY=()
|
||||
}
|
||||
|
||||
__git_config_get_set_variables ()
|
||||
{
|
||||
local prevword word config_file= c=$COMP_CWORD
|
||||
while [ $c -gt 1 ]; do
|
||||
word="${COMP_WORDS[c]}"
|
||||
case "$word" in
|
||||
--global|--system|--file=*)
|
||||
config_file="$word"
|
||||
break
|
||||
;;
|
||||
-f|--file)
|
||||
config_file="$word $prevword"
|
||||
break
|
||||
;;
|
||||
esac
|
||||
prevword=$word
|
||||
c=$((--c))
|
||||
done
|
||||
|
||||
for i in $(git --git-dir="$(__gitdir)" config $config_file --list \
|
||||
2>/dev/null); do
|
||||
case "$i" in
|
||||
*.*)
|
||||
echo "${i/=*/}"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
_git_config ()
|
||||
{
|
||||
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||
@@ -1388,6 +1417,10 @@ _git_config ()
|
||||
__gitcomp "$__git_send_email_suppresscc_options"
|
||||
return
|
||||
;;
|
||||
--get|--get-all|--unset|--unset-all)
|
||||
__gitcomp "$(__git_config_get_set_variables)"
|
||||
return
|
||||
;;
|
||||
*.*)
|
||||
COMPREPLY=()
|
||||
return
|
||||
|
||||
@@ -113,6 +113,10 @@ case "${1:-.}${2:-.}${3:-.}" in
|
||||
src1=`git-unpack-file $2`
|
||||
git merge-file "$src1" "$orig" "$src2"
|
||||
ret=$?
|
||||
msg=
|
||||
if [ $ret -ne 0 ]; then
|
||||
msg='content conflict'
|
||||
fi
|
||||
|
||||
# Create the working tree file, using "our tree" version from the
|
||||
# index, and then store the result of the merge.
|
||||
@@ -120,7 +124,10 @@ case "${1:-.}${2:-.}${3:-.}" in
|
||||
rm -f -- "$orig" "$src1" "$src2"
|
||||
|
||||
if [ "$6" != "$7" ]; then
|
||||
echo "ERROR: Permissions conflict: $5->$6,$7."
|
||||
if [ -n "$msg" ]; then
|
||||
msg="$msg, "
|
||||
fi
|
||||
msg="${msg}permissions conflict: $5->$6,$7"
|
||||
ret=1
|
||||
fi
|
||||
if [ "$1" = '' ]; then
|
||||
@@ -128,7 +135,7 @@ case "${1:-.}${2:-.}${3:-.}" in
|
||||
fi
|
||||
|
||||
if [ $ret -ne 0 ]; then
|
||||
echo "ERROR: Merge conflict in $4"
|
||||
echo "ERROR: $msg in $4"
|
||||
exit 1
|
||||
fi
|
||||
exec git update-index -- "$4"
|
||||
|
||||
@@ -838,7 +838,7 @@ exit;
|
||||
## ======================================================================
|
||||
## action links
|
||||
|
||||
sub href (%) {
|
||||
sub href {
|
||||
my %params = @_;
|
||||
# default is to use -absolute url() i.e. $my_uri
|
||||
my $href = $params{-full} ? $my_url : $my_uri;
|
||||
@@ -1036,7 +1036,7 @@ sub esc_url {
|
||||
}
|
||||
|
||||
# replace invalid utf8 character with SUBSTITUTION sequence
|
||||
sub esc_html ($;%) {
|
||||
sub esc_html {
|
||||
my $str = shift;
|
||||
my %opts = @_;
|
||||
|
||||
@@ -1296,7 +1296,7 @@ use constant {
|
||||
};
|
||||
|
||||
# submodule/subproject, a commit object reference
|
||||
sub S_ISGITLINK($) {
|
||||
sub S_ISGITLINK {
|
||||
my $mode = shift;
|
||||
|
||||
return (($mode & S_IFMT) == S_IFGITLINK)
|
||||
@@ -2615,7 +2615,7 @@ sub parsed_difftree_line {
|
||||
}
|
||||
|
||||
# parse line of git-ls-tree output
|
||||
sub parse_ls_tree_line ($;%) {
|
||||
sub parse_ls_tree_line {
|
||||
my $line = shift;
|
||||
my %opts = @_;
|
||||
my %res;
|
||||
@@ -3213,7 +3213,6 @@ sub git_print_header_div {
|
||||
"\n</div>\n";
|
||||
}
|
||||
|
||||
#sub git_print_authorship (\%) {
|
||||
sub git_print_authorship {
|
||||
my $co = shift;
|
||||
|
||||
@@ -3269,8 +3268,7 @@ sub git_print_page_path {
|
||||
print "<br/></div>\n";
|
||||
}
|
||||
|
||||
# sub git_print_log (\@;%) {
|
||||
sub git_print_log ($;%) {
|
||||
sub git_print_log {
|
||||
my $log = shift;
|
||||
my %opts = @_;
|
||||
|
||||
|
||||
28
t/t2014-switch.sh
Executable file
28
t/t2014-switch.sh
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='Peter MacMillan'
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success setup '
|
||||
echo Hello >file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m V1 &&
|
||||
echo Hello world >file &&
|
||||
git add file &&
|
||||
git checkout -b other
|
||||
'
|
||||
|
||||
test_expect_success 'check all changes are staged' '
|
||||
git diff --exit-code
|
||||
'
|
||||
|
||||
test_expect_success 'second commit' '
|
||||
git commit -m V2
|
||||
'
|
||||
|
||||
test_expect_success 'check' '
|
||||
git diff --cached --exit-code
|
||||
'
|
||||
|
||||
test_done
|
||||
@@ -9,7 +9,15 @@ test_description='commit and log output encodings'
|
||||
|
||||
compare_with () {
|
||||
git show -s $1 | sed -e '1,/^$/d' -e 's/^ //' >current &&
|
||||
test_cmp current "$2"
|
||||
case "$3" in
|
||||
'')
|
||||
test_cmp "$2" current ;;
|
||||
?*)
|
||||
iconv -f "$3" -t utf8 >current.utf8 <current &&
|
||||
iconv -f "$3" -t utf8 >expect.utf8 <"$2" &&
|
||||
test_cmp expect.utf8 current.utf8
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
test_expect_success setup '
|
||||
@@ -103,11 +111,17 @@ done
|
||||
|
||||
for J in EUCJP ISO-2022-JP
|
||||
do
|
||||
if test "$J" = ISO-2022-JP
|
||||
then
|
||||
ICONV=$J
|
||||
else
|
||||
ICONV=
|
||||
fi
|
||||
git config i18n.logoutputencoding $J
|
||||
for H in EUCJP ISO-2022-JP
|
||||
do
|
||||
test_expect_success "$H should be shown in $J now" '
|
||||
compare_with '$H' "$TEST_DIRECTORY"/t3900/'$J'.txt
|
||||
compare_with '$H' "$TEST_DIRECTORY"/t3900/'$J'.txt $ICONV
|
||||
'
|
||||
done
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user