mirror of
https://github.com/git/git.git
synced 2026-04-01 20:40:08 +02:00
Merge branch 'master' of git://repo.or.cz/alt-git
This commit is contained in:
@@ -22,13 +22,6 @@ 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
|
||||
--------------------
|
||||
@@ -38,26 +31,60 @@ Updates since v1.6.3
|
||||
* gitweb Perl style clean-up.
|
||||
|
||||
* git-svn updates, including a new --authors-prog option to map author
|
||||
names by invoking an external program.
|
||||
names by invoking an external program, 'git svn reset' to unwind
|
||||
'git svn fetch', support for more than one branches, etc.
|
||||
|
||||
(portability)
|
||||
|
||||
* We feed iconv with "UTF-8" instead of "utf8"; the former is
|
||||
understood more widely.
|
||||
understood more widely. Similarly updated test scripts to use
|
||||
encoding names more widely understood (e.g. use "ISO8850-1" instead
|
||||
of "ISO-8859-1").
|
||||
|
||||
* Various portability fixes/workarounds for different vintages of
|
||||
SunOS, IRIX, and Windows.
|
||||
|
||||
* Git-over-ssh transport on Windows supports PuTTY plink and TortoisePlink.
|
||||
|
||||
(performance)
|
||||
|
||||
* Many repeated use of lstat() are optimized out in "checkout" codepath.
|
||||
|
||||
* git-status (and underlying git-diff-index --cached) are optimized
|
||||
to take advantage of cache-tree information in the index.
|
||||
|
||||
(usability, bells and whistles)
|
||||
|
||||
* "git add --edit" lets users edit the whole patch text to fine-tune what
|
||||
is added to the index.
|
||||
|
||||
* "git am" accepts StGIT series file as its input.
|
||||
|
||||
* "git bisect skip" skips to a more randomly chosen place in the hope
|
||||
to avoid testing a commit that is too close to a commit that is
|
||||
already known to be untestable.
|
||||
|
||||
* "git cvsexportcommit" learned -k option to stop CVS keywords expansion
|
||||
|
||||
* "git grep" learned -p option to show the location of the match using the
|
||||
same context hunk marker "git diff" uses.
|
||||
|
||||
* https transport can optionally be told that the used client
|
||||
certificate is password protected, in which case it asks the
|
||||
password only once.
|
||||
|
||||
* "git imap-send" is IPv6 aware.
|
||||
|
||||
* "git log --graph" draws graphs more compactly by using horizonal lines
|
||||
when able.
|
||||
|
||||
* "git log --decorate" shows shorter refnames by stripping well-known
|
||||
refs/* prefix.
|
||||
|
||||
* "git push $name" honors remote.$name.pushurl if present before
|
||||
using remote.$name.url. In other words, the URL used for fetching
|
||||
and pushing can be different.
|
||||
|
||||
* "git send-email" understands quoted aliases in .mailrc files (might
|
||||
have to be backported to 1.6.3.X).
|
||||
|
||||
@@ -69,6 +96,11 @@ Updates since v1.6.3
|
||||
* "add" and "update" subcommands to "git submodule" learned --reference
|
||||
option to use local clone with references.
|
||||
|
||||
* "git submodule update" learned --rebase option to update checked
|
||||
out submodules by rebasing the local changes.
|
||||
|
||||
* "gitweb" can optionally use gravatar to adorn author/committer names.
|
||||
|
||||
(developers)
|
||||
|
||||
* A major part of the "git bisect" wrapper has moved to C.
|
||||
@@ -82,6 +114,11 @@ release, unless otherwise noted.
|
||||
Here are fixes that this release has, but have not been backported to
|
||||
v1.6.3.X series.
|
||||
|
||||
* "git diff-tree -r -t" used to omit new or removed directories from
|
||||
the output. df533f3 (diff-tree -r -t: include added/removed
|
||||
directories in the output, 2009-06-13) may need to be cherry-picked
|
||||
to backport this fix.
|
||||
|
||||
* The way Git.pm sets up a Repository object was not friendly to callers
|
||||
that chdir around. It now internally records the repository location
|
||||
as an absolute path when autodetected.
|
||||
@@ -89,5 +126,5 @@ v1.6.3.X series.
|
||||
---
|
||||
exec >/var/tmp/1
|
||||
echo O=$(git describe master)
|
||||
O=v1.6.3.1-168-g23807fa
|
||||
O=v1.6.4-rc1-7-gbba0fd2
|
||||
git shortlog --no-merges $O..master ^maint
|
||||
|
||||
@@ -1387,6 +1387,50 @@ rerere.enabled::
|
||||
default enabled if you create `rr-cache` directory under
|
||||
`$GIT_DIR`, but can be disabled by setting this option to false.
|
||||
|
||||
sendemail.identity::
|
||||
A configuration identity. When given, causes values in the
|
||||
'sendemail.<identity>' subsection to take precedence over
|
||||
values in the 'sendemail' section. The default identity is
|
||||
the value of 'sendemail.identity'.
|
||||
|
||||
sendemail.smtpencryption::
|
||||
See linkgit:git-send-email[1] for description. Note that this
|
||||
setting is not subject to the 'identity' mechanism.
|
||||
|
||||
sendemail.smtpssl::
|
||||
Deprecated alias for 'sendemail.smtpencryption = ssl'.
|
||||
|
||||
sendemail.<identity>.*::
|
||||
Identity-specific versions of the 'sendemail.*' parameters
|
||||
found below, taking precedence over those when the this
|
||||
identity is selected, through command-line or
|
||||
'sendemail.identity'.
|
||||
|
||||
sendemail.aliasesfile::
|
||||
sendemail.aliasfiletype::
|
||||
sendemail.bcc::
|
||||
sendemail.cc::
|
||||
sendemail.cccmd::
|
||||
sendemail.chainreplyto::
|
||||
sendemail.confirm::
|
||||
sendemail.envelopesender::
|
||||
sendemail.from::
|
||||
sendemail.multiedit::
|
||||
sendemail.signedoffbycc::
|
||||
sendemail.smtppass::
|
||||
sendemail.suppresscc::
|
||||
sendemail.suppressfrom::
|
||||
sendemail.to::
|
||||
sendemail.smtpserver::
|
||||
sendemail.smtpserverport::
|
||||
sendemail.smtpuser::
|
||||
sendemail.thread::
|
||||
sendemail.validate::
|
||||
See linkgit:git-send-email[1] for description.
|
||||
|
||||
sendemail.signedoffcc::
|
||||
Deprecated alias for 'sendemail.signedoffbycc'.
|
||||
|
||||
showbranch.default::
|
||||
The default set of branches for linkgit:git-show-branch[1].
|
||||
See linkgit:git-show-branch[1].
|
||||
|
||||
@@ -10,7 +10,7 @@ SYNOPSIS
|
||||
--------
|
||||
[verse]
|
||||
'git format-patch' [-k] [(-o|--output-directory) <dir> | --stdout]
|
||||
[--thread[=<style>]]
|
||||
[--no-thread | --thread[=<style>]]
|
||||
[(--attach|--inline)[=<boundary>] | --no-attach]
|
||||
[-s | --signoff]
|
||||
[-n | --numbered | -N | --no-numbered]
|
||||
@@ -124,17 +124,25 @@ include::diff-options.txt[]
|
||||
second part, with "Content-Disposition: inline".
|
||||
|
||||
--thread[=<style>]::
|
||||
Add In-Reply-To and References headers to make the second and
|
||||
subsequent mails appear as replies to the first. Also generates
|
||||
the Message-Id header to reference.
|
||||
--no-thread::
|
||||
Controls addition of In-Reply-To and References headers to
|
||||
make the second and subsequent mails appear as replies to the
|
||||
first. Also controls generation of the Message-Id header to
|
||||
reference.
|
||||
+
|
||||
The optional <style> argument can be either `shallow` or `deep`.
|
||||
'shallow' threading makes every mail a reply to the head of the
|
||||
series, where the head is chosen from the cover letter, the
|
||||
`\--in-reply-to`, and the first patch mail, in this order. 'deep'
|
||||
threading makes every mail a reply to the previous one. If not
|
||||
specified, defaults to the 'format.thread' configuration, or `shallow`
|
||||
if that is not set.
|
||||
threading makes every mail a reply to the previous one.
|
||||
+
|
||||
The default is --no-thread, unless the 'format.thread' configuration
|
||||
is set. If --thread is specified without a style, it defaults to the
|
||||
style specified by 'format.thread' if any, or else `shallow`.
|
||||
+
|
||||
Beware that the default for 'git send-email' is to thread emails
|
||||
itself. If you want 'git format-patch' to take care of hreading, you
|
||||
will want to ensure that threading is disabled for 'git send-email'.
|
||||
|
||||
--in-reply-to=Message-Id::
|
||||
Make the first mail (or all the mails with --no-thread) appear as a
|
||||
|
||||
@@ -212,11 +212,22 @@ specified, as well as 'body' if --no-signed-off-cc is specified.
|
||||
value; if that is unspecified, default to --no-suppress-from.
|
||||
|
||||
--[no-]thread::
|
||||
If this is set, the In-Reply-To header will be set on each email sent.
|
||||
If disabled with "--no-thread", no emails will have the In-Reply-To
|
||||
header set, unless specified with --in-reply-to.
|
||||
Default is the value of the 'sendemail.thread' configuration
|
||||
value; if that is unspecified, default to --thread.
|
||||
If this is set, the In-Reply-To and References headers will be
|
||||
added to each email sent. Whether each mail refers to the
|
||||
previous email (`deep` threading per 'git format-patch'
|
||||
wording) or to the first email (`shallow` threading) is
|
||||
governed by "--[no-]chain-reply-to".
|
||||
+
|
||||
If disabled with "--no-thread", those headers will not be added
|
||||
(unless specified with --in-reply-to). Default is the value of the
|
||||
'sendemail.thread' configuration value; if that is unspecified,
|
||||
default to --thread.
|
||||
+
|
||||
It is up to the user to ensure that no In-Reply-To header already
|
||||
exists when 'git send-email' is asked to add it (especially note that
|
||||
'git format-patch' can be configured to do the threading itself).
|
||||
Failure to do so may not produce the expected result in the
|
||||
recipient's MUA.
|
||||
|
||||
|
||||
Administering
|
||||
|
||||
@@ -64,36 +64,11 @@ static void setup_push_tracking(void)
|
||||
add_refspec(refspec.buf);
|
||||
}
|
||||
|
||||
static const char *warn_unconfigured_push_msg[] = {
|
||||
"You did not specify any refspecs to push, and the current remote",
|
||||
"has not configured any push refspecs. The default action in this",
|
||||
"case is to push all matching refspecs, that is, all branches",
|
||||
"that exist both locally and remotely will be updated. This may",
|
||||
"not necessarily be what you want to happen.",
|
||||
"",
|
||||
"You can specify what action you want to take in this case, and",
|
||||
"avoid seeing this message again, by configuring 'push.default' to:",
|
||||
" 'nothing' : Do not push anything",
|
||||
" 'matching' : Push all matching branches (default)",
|
||||
" 'tracking' : Push the current branch to whatever it is tracking",
|
||||
" 'current' : Push the current branch"
|
||||
};
|
||||
|
||||
static void warn_unconfigured_push(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < ARRAY_SIZE(warn_unconfigured_push_msg); i++)
|
||||
warning("%s", warn_unconfigured_push_msg[i]);
|
||||
}
|
||||
|
||||
static void setup_default_push_refspecs(void)
|
||||
{
|
||||
git_config(git_default_config, NULL);
|
||||
switch (push_default) {
|
||||
case PUSH_DEFAULT_UNSPECIFIED:
|
||||
warn_unconfigured_push();
|
||||
/* fallthrough */
|
||||
|
||||
default:
|
||||
case PUSH_DEFAULT_MATCHING:
|
||||
add_refspec(":");
|
||||
break;
|
||||
|
||||
1
cache.h
1
cache.h
@@ -543,7 +543,6 @@ enum rebase_setup_type {
|
||||
};
|
||||
|
||||
enum push_default_type {
|
||||
PUSH_DEFAULT_UNSPECIFIED = -1,
|
||||
PUSH_DEFAULT_NOTHING = 0,
|
||||
PUSH_DEFAULT_MATCHING,
|
||||
PUSH_DEFAULT_TRACKING,
|
||||
|
||||
@@ -80,6 +80,7 @@ struct lline {
|
||||
/* Lines surviving in the merge result */
|
||||
struct sline {
|
||||
struct lline *lost_head, **lost_tail;
|
||||
struct lline *next_lost;
|
||||
char *bol;
|
||||
int len;
|
||||
/* bit 0 up to (N-1) are on if the parent has this line (i.e.
|
||||
@@ -121,18 +122,12 @@ static void append_lost(struct sline *sline, int n, const char *line, int len)
|
||||
|
||||
/* Check to see if we can squash things */
|
||||
if (sline->lost_head) {
|
||||
struct lline *last_one = NULL;
|
||||
/* We cannot squash it with earlier one */
|
||||
for (lline = sline->lost_head;
|
||||
lline;
|
||||
lline = lline->next)
|
||||
if (lline->parent_map & this_mask)
|
||||
last_one = lline;
|
||||
lline = last_one ? last_one->next : sline->lost_head;
|
||||
lline = sline->next_lost;
|
||||
while (lline) {
|
||||
if (lline->len == len &&
|
||||
!memcmp(lline->line, line, len)) {
|
||||
lline->parent_map |= this_mask;
|
||||
sline->next_lost = lline->next;
|
||||
return;
|
||||
}
|
||||
lline = lline->next;
|
||||
@@ -147,6 +142,7 @@ static void append_lost(struct sline *sline, int n, const char *line, int len)
|
||||
lline->line[len] = 0;
|
||||
*sline->lost_tail = lline;
|
||||
sline->lost_tail = &lline->next;
|
||||
sline->next_lost = NULL;
|
||||
}
|
||||
|
||||
struct combine_diff_state {
|
||||
@@ -168,25 +164,28 @@ static void consume_line(void *state_, char *line, unsigned long len)
|
||||
&state->nb, &state->nn))
|
||||
return;
|
||||
state->lno = state->nb;
|
||||
if (!state->nb)
|
||||
/* @@ -1,2 +0,0 @@ to remove the
|
||||
* first two lines...
|
||||
*/
|
||||
state->nb = 1;
|
||||
if (state->nn == 0)
|
||||
if (state->nn == 0) {
|
||||
/* @@ -X,Y +N,0 @@ removed Y lines
|
||||
* that would have come *after* line N
|
||||
* in the result. Our lost buckets hang
|
||||
* to the line after the removed lines,
|
||||
*
|
||||
* Note that this is correct even when N == 0,
|
||||
* in which case the hunk removes the first
|
||||
* line in the file.
|
||||
*/
|
||||
state->lost_bucket = &state->sline[state->nb];
|
||||
else
|
||||
if (!state->nb)
|
||||
state->nb = 1;
|
||||
} else {
|
||||
state->lost_bucket = &state->sline[state->nb-1];
|
||||
}
|
||||
if (!state->sline[state->nb-1].p_lno)
|
||||
state->sline[state->nb-1].p_lno =
|
||||
xcalloc(state->num_parent,
|
||||
sizeof(unsigned long));
|
||||
state->sline[state->nb-1].p_lno[state->n] = state->ob;
|
||||
state->lost_bucket->next_lost = state->lost_bucket->lost_head;
|
||||
return;
|
||||
}
|
||||
if (!state->lost_bucket)
|
||||
|
||||
@@ -34,6 +34,7 @@ NO_LIBGEN_H=@NO_LIBGEN_H@
|
||||
NEEDS_LIBICONV=@NEEDS_LIBICONV@
|
||||
NEEDS_SOCKET=@NEEDS_SOCKET@
|
||||
NEEDS_RESOLV=@NEEDS_RESOLV@
|
||||
NEEDS_LIBGEN=@NEEDS_LIBGEN@
|
||||
NO_SYS_SELECT_H=@NO_SYS_SELECT_H@
|
||||
NO_D_INO_IN_DIRENT=@NO_D_INO_IN_DIRENT@
|
||||
NO_D_TYPE_IN_DIRENT=@NO_D_TYPE_IN_DIRENT@
|
||||
|
||||
@@ -342,9 +342,8 @@ GIT_STASH_FLAGS($OPENSSLDIR)
|
||||
AC_CHECK_LIB([crypto], [SHA1_Init],
|
||||
[NEEDS_SSL_WITH_CRYPTO=],
|
||||
[AC_CHECK_LIB([ssl], [SHA1_Init],
|
||||
[NEEDS_SSL_WITH_CRYPTO=YesPlease
|
||||
NEEDS_SSL_WITH_CRYPTO=],
|
||||
[NO_OPENSSL=YesPlease])])
|
||||
[NEEDS_SSL_WITH_CRYPTO=YesPlease],
|
||||
[NEEDS_SSL_WITH_CRYPTO= NO_OPENSSL=YesPlease])])
|
||||
|
||||
GIT_UNSTASH_FLAGS($OPENSSLDIR)
|
||||
|
||||
@@ -479,13 +478,13 @@ test -n "$NEEDS_SOCKET" && LIBS="$LIBS -lsocket"
|
||||
# Define NEEDS_RESOLV if linking with -lnsl and/or -lsocket is not enough.
|
||||
# Notably on Solaris hstrerror resides in libresolv and on Solaris 7
|
||||
# inet_ntop and inet_pton additionally reside there.
|
||||
AC_CHECK_LIB([resolv], [hstrerror],
|
||||
AC_CHECK_LIB([c], [hstrerror],
|
||||
[NEEDS_RESOLV=],
|
||||
[NEEDS_RESOLV=YesPlease])
|
||||
AC_SUBST(NEEDS_RESOLV)
|
||||
test -n "$NEEDS_RESOLV" && LIBS="$LIBS -lresolv"
|
||||
|
||||
AC_CHECK_LIB([gen], [basename],
|
||||
AC_CHECK_LIB([c], [basename],
|
||||
[NEEDS_LIBGEN=],
|
||||
[NEEDS_LIBGEN=YesPlease])
|
||||
AC_SUBST(NEEDS_LIBGEN)
|
||||
|
||||
@@ -42,7 +42,7 @@ enum safe_crlf safe_crlf = SAFE_CRLF_WARN;
|
||||
unsigned whitespace_rule_cfg = WS_DEFAULT_RULE;
|
||||
enum branch_track git_branch_track = BRANCH_TRACK_REMOTE;
|
||||
enum rebase_setup_type autorebase = AUTOREBASE_NEVER;
|
||||
enum push_default_type push_default = PUSH_DEFAULT_UNSPECIFIED;
|
||||
enum push_default_type push_default = PUSH_DEFAULT_MATCHING;
|
||||
#ifndef OBJECT_CREATION_MODE
|
||||
#define OBJECT_CREATION_MODE OBJECT_CREATION_USES_HARDLINKS
|
||||
#endif
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#endif
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
|
||||
#define bitsizeof(x) (CHAR_BIT * sizeof(x))
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define TYPEOF(x) (__typeof__(x))
|
||||
@@ -33,9 +34,11 @@
|
||||
#define TYPEOF(x)
|
||||
#endif
|
||||
|
||||
#define MSB(x, bits) ((x) & TYPEOF(x)(~0ULL << (sizeof(x) * 8 - (bits))))
|
||||
#define MSB(x, bits) ((x) & TYPEOF(x)(~0ULL << (bitsizeof(x) - (bits))))
|
||||
#define HAS_MULTI_BITS(i) ((i) & ((i) - 1)) /* checks if an integer has more than 1 bit set */
|
||||
|
||||
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
|
||||
|
||||
/* Approximation of the length of the decimal representation of this type. */
|
||||
#define decimal_length(x) ((int)(sizeof(x) * 2.56 + 0.5) + 1)
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@ apply_stash () {
|
||||
git diff-tree --binary $s^2^..$s^2 | git apply --cached
|
||||
test $? -ne 0 &&
|
||||
die 'Conflicts in index. Try without --index.'
|
||||
unstashed_index_tree=$(git-write-tree) ||
|
||||
unstashed_index_tree=$(git write-tree) ||
|
||||
die 'Could not save index tree'
|
||||
git reset
|
||||
fi
|
||||
@@ -219,7 +219,7 @@ apply_stash () {
|
||||
then
|
||||
export GIT_MERGE_VERBOSITY=0
|
||||
fi
|
||||
if git-merge-recursive $b_tree -- $c_tree $w_tree
|
||||
if git merge-recursive $b_tree -- $c_tree $w_tree
|
||||
then
|
||||
# No conflict
|
||||
if test -n "$unstashed_index_tree"
|
||||
@@ -297,7 +297,7 @@ apply_to_branch () {
|
||||
fi
|
||||
stash=$2
|
||||
|
||||
git-checkout -b $branch $stash^ &&
|
||||
git checkout -b $branch $stash^ &&
|
||||
apply_stash --index $stash &&
|
||||
drop_stash $stash
|
||||
}
|
||||
|
||||
@@ -4525,10 +4525,12 @@ sub gs_do_switch {
|
||||
|
||||
my $full_url = $self->{url};
|
||||
my $old_url = $full_url;
|
||||
$full_url .= '/' . escape_uri_only($path) if length $path;
|
||||
$full_url .= '/' . $path if length $path;
|
||||
my ($ra, $reparented);
|
||||
|
||||
if ($old_url =~ m#^svn(\+ssh)?://#) {
|
||||
if ($old_url =~ m#^svn(\+ssh)?://# ||
|
||||
($full_url =~ m#^https?://# &&
|
||||
escape_url($full_url) ne $full_url)) {
|
||||
$_[0] = undef;
|
||||
$self = undef;
|
||||
$RA = undef;
|
||||
|
||||
2
graph.c
2
graph.c
@@ -893,7 +893,7 @@ static struct column *find_new_column_by_commit(struct git_graph *graph,
|
||||
if (graph->new_columns[i].commit == commit)
|
||||
return &graph->new_columns[i];
|
||||
}
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void graph_output_post_merge_line(struct git_graph *graph, struct strbuf *sb)
|
||||
|
||||
2
help.c
2
help.c
@@ -100,7 +100,7 @@ static void pretty_print_string_list(struct cmdnames *cmds, int longest)
|
||||
|
||||
if (space < max_cols)
|
||||
cols = max_cols / space;
|
||||
rows = (cmds->cnt + cols - 1) / cols;
|
||||
rows = DIV_ROUND_UP(cmds->cnt, cols);
|
||||
|
||||
for (i = 0; i < rows; i++) {
|
||||
printf(" ");
|
||||
|
||||
@@ -149,8 +149,7 @@ void discard_revindex(void)
|
||||
if (pack_revindex_hashsz) {
|
||||
int i;
|
||||
for (i = 0; i < pack_revindex_hashsz; i++)
|
||||
if (pack_revindex[i].revindex)
|
||||
free(pack_revindex[i].revindex);
|
||||
free(pack_revindex[i].revindex);
|
||||
free(pack_revindex);
|
||||
pack_revindex_hashsz = 0;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ static void preload_index(struct index_state *index, const char **pathspec)
|
||||
if (threads > MAX_PARALLEL)
|
||||
threads = MAX_PARALLEL;
|
||||
offset = 0;
|
||||
work = (index->cache_nr + threads - 1) / threads;
|
||||
work = DIV_ROUND_UP(index->cache_nr, threads);
|
||||
for (i = 0; i < threads; i++) {
|
||||
struct thread_data *p = data+i;
|
||||
p->index = index;
|
||||
|
||||
4
refs.c
4
refs.c
@@ -1525,8 +1525,10 @@ int for_each_recent_reflog_ent(const char *ref, each_reflog_ent_fn fn, long ofs,
|
||||
if (fstat(fileno(logfp), &statbuf) ||
|
||||
statbuf.st_size < ofs ||
|
||||
fseek(logfp, -ofs, SEEK_END) ||
|
||||
fgets(buf, sizeof(buf), logfp))
|
||||
fgets(buf, sizeof(buf), logfp)) {
|
||||
fclose(logfp);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), logfp)) {
|
||||
|
||||
@@ -1170,7 +1170,7 @@ unsigned long unpack_object_header_buffer(const unsigned char *buf,
|
||||
size = c & 15;
|
||||
shift = 4;
|
||||
while (c & 0x80) {
|
||||
if (len <= used || sizeof(long) * 8 <= shift) {
|
||||
if (len <= used || bitsizeof(long) <= shift) {
|
||||
error("bad object header");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -777,8 +777,6 @@ int interpret_branch_name(const char *name, struct strbuf *buf)
|
||||
for_each_recent_reflog_ent("HEAD", grab_nth_branch_switch, 40960, &cb);
|
||||
if (cb.cnt < nth) {
|
||||
cb.cnt = 0;
|
||||
for (i = 0; i < nth; i++)
|
||||
strbuf_release(&cb.buf[i]);
|
||||
for_each_reflog_ent("HEAD", grab_nth_branch_switch, &cb);
|
||||
}
|
||||
if (cb.cnt < nth)
|
||||
|
||||
84
t/t4038-diff-combined.sh
Executable file
84
t/t4038-diff-combined.sh
Executable file
@@ -0,0 +1,84 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='combined diff'
|
||||
|
||||
. ./test-lib.sh
|
||||
|
||||
setup_helper () {
|
||||
one=$1 branch=$2 side=$3 &&
|
||||
|
||||
git branch $side $branch &&
|
||||
for l in $one two three fyra
|
||||
do
|
||||
echo $l
|
||||
done >file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m $branch &&
|
||||
git checkout $side &&
|
||||
for l in $one two three quatro
|
||||
do
|
||||
echo $l
|
||||
done >file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m $side &&
|
||||
test_must_fail git merge $branch &&
|
||||
for l in $one three four
|
||||
do
|
||||
echo $l
|
||||
done >file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m "merge $branch into $side"
|
||||
}
|
||||
|
||||
verify_helper () {
|
||||
it=$1 &&
|
||||
|
||||
# Ignore lines that were removed only from the other parent
|
||||
sed -e '
|
||||
1,/^@@@/d
|
||||
/^ -/d
|
||||
s/^\(.\)./\1/
|
||||
' "$it" >"$it.actual.1" &&
|
||||
sed -e '
|
||||
1,/^@@@/d
|
||||
/^- /d
|
||||
s/^.\(.\)/\1/
|
||||
' "$it" >"$it.actual.2" &&
|
||||
|
||||
git diff "$it^" "$it" -- | sed -e '1,/^@@/d' >"$it.expect.1" &&
|
||||
test_cmp "$it.expect.1" "$it.actual.1" &&
|
||||
|
||||
git diff "$it^2" "$it" -- | sed -e '1,/^@@/d' >"$it.expect.2" &&
|
||||
test_cmp "$it.expect.2" "$it.actual.2"
|
||||
}
|
||||
|
||||
test_expect_success setup '
|
||||
>file &&
|
||||
git add file &&
|
||||
test_tick &&
|
||||
git commit -m initial &&
|
||||
|
||||
git branch withone &&
|
||||
git branch sansone &&
|
||||
|
||||
git checkout withone &&
|
||||
setup_helper one withone sidewithone &&
|
||||
|
||||
git checkout sansone &&
|
||||
setup_helper "" sansone sidesansone
|
||||
'
|
||||
|
||||
test_expect_success 'check combined output (1)' '
|
||||
git show sidewithone -- >sidewithone &&
|
||||
verify_helper sidewithone
|
||||
'
|
||||
|
||||
test_expect_failure 'check combined output (2)' '
|
||||
git show sidesansone -- >sidesansone &&
|
||||
verify_helper sidesansone
|
||||
'
|
||||
|
||||
test_done
|
||||
@@ -148,4 +148,22 @@ do
|
||||
done
|
||||
done
|
||||
|
||||
create_patch () {
|
||||
sed -e "s/_/ /" <<-\EOF
|
||||
diff --git a/target b/target
|
||||
index e69de29..8bd6648 100644
|
||||
--- a/target
|
||||
+++ b/target
|
||||
@@ -0,0 +1 @@
|
||||
+A line with trailing whitespace and no newline_
|
||||
\ No newline at end of file
|
||||
EOF
|
||||
}
|
||||
|
||||
test_expect_success 'trailing whitespace & no newline at the end of file' '
|
||||
>target &&
|
||||
create_patch | git apply --whitespace=fix - &&
|
||||
grep "newline$" target
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -149,6 +149,26 @@ test_expect_success 'git log --follow' '
|
||||
|
||||
'
|
||||
|
||||
cat > expect << EOF
|
||||
804a787 sixth
|
||||
394ef78 fifth
|
||||
5d31159 fourth
|
||||
EOF
|
||||
test_expect_success 'git log --no-walk <commits> sorts by commit time' '
|
||||
git log --no-walk --oneline 5d31159 804a787 394ef78 > actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
cat > expect << EOF
|
||||
5d31159 fourth
|
||||
804a787 sixth
|
||||
394ef78 fifth
|
||||
EOF
|
||||
test_expect_success 'git show <commits> leaves list of commits as given' '
|
||||
git show --oneline -s 5d31159 804a787 394ef78 > actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'setup case sensitivity tests' '
|
||||
echo case >one &&
|
||||
test_tick &&
|
||||
|
||||
@@ -288,6 +288,27 @@ test_expect_success 'check files before directories' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 're-commit a removed filename which remains in CVS attic' '
|
||||
|
||||
(cd "$CVSWORK" &&
|
||||
echo >attic_gremlin &&
|
||||
cvs -Q add attic_gremlin &&
|
||||
cvs -Q ci -m "added attic_gremlin" &&
|
||||
rm attic_gremlin &&
|
||||
cvs -Q rm attic_gremlin &&
|
||||
cvs -Q ci -m "removed attic_gremlin") &&
|
||||
|
||||
echo > attic_gremlin &&
|
||||
git add attic_gremlin &&
|
||||
git commit -m "Added attic_gremlin" &&
|
||||
git cvsexportcommit -w "$CVSWORK" -c HEAD &&
|
||||
(cd "$CVSWORK"; cvs -Q update -d) &&
|
||||
test -f "$CVSWORK/attic_gremlin"
|
||||
'
|
||||
|
||||
# the state of the CVS sandbox may be indeterminate for ' space'
|
||||
# after this test on some platforms / with some versions of CVS
|
||||
# consider adding new tests above this point
|
||||
test_expect_success 'commit a file with leading spaces in the name' '
|
||||
|
||||
echo space > " space" &&
|
||||
@@ -295,7 +316,7 @@ test_expect_success 'commit a file with leading spaces in the name' '
|
||||
git commit -m "Add a file with a leading space" &&
|
||||
id=$(git rev-parse HEAD) &&
|
||||
git cvsexportcommit -w "$CVSWORK" -c $id &&
|
||||
check_entries "$CVSWORK" " space/1.1/|DS/1.1/|release-notes/1.2/" &&
|
||||
check_entries "$CVSWORK" " space/1.1/|DS/1.1/|attic_gremlin/1.3/|release-notes/1.2/" &&
|
||||
test_cmp "$CVSWORK/ space" " space"
|
||||
|
||||
'
|
||||
@@ -317,22 +338,4 @@ test_expect_success 'use the same checkout for Git and CVS' '
|
||||
|
||||
'
|
||||
|
||||
test_expect_success 're-commit a removed filename which remains in CVS attic' '
|
||||
|
||||
(cd "$CVSWORK" &&
|
||||
echo >attic_gremlin &&
|
||||
cvs -Q add attic_gremlin &&
|
||||
cvs -Q ci -m "added attic_gremlin" &&
|
||||
rm attic_gremlin &&
|
||||
cvs -Q rm attic_gremlin &&
|
||||
cvs -Q ci -m "removed attic_gremlin") &&
|
||||
|
||||
echo > attic_gremlin &&
|
||||
git add attic_gremlin &&
|
||||
git commit -m "Added attic_gremlin" &&
|
||||
git cvsexportcommit -w "$CVSWORK" -c HEAD &&
|
||||
(cd "$CVSWORK"; cvs -Q update -d) &&
|
||||
test -f "$CVSWORK/attic_gremlin"
|
||||
'
|
||||
|
||||
test_done
|
||||
|
||||
@@ -999,7 +999,7 @@ int oneway_merge(struct cache_entry **src, struct unpack_trees_options *o)
|
||||
return error("Cannot do a oneway merge of %d trees",
|
||||
o->merge_size);
|
||||
|
||||
if (!a)
|
||||
if (!a || a == o->df_conflict_entry)
|
||||
return deleted_entry(old, old, o);
|
||||
|
||||
if (old && same(old, a)) {
|
||||
|
||||
2
walker.c
2
walker.c
@@ -245,7 +245,7 @@ void walker_targets_free(int targets, char **target, const char **write_ref)
|
||||
{
|
||||
while (targets--) {
|
||||
free(target[targets]);
|
||||
if (write_ref && write_ref[targets])
|
||||
if (write_ref)
|
||||
free((char *) write_ref[targets]);
|
||||
}
|
||||
}
|
||||
|
||||
5
ws.c
5
ws.c
@@ -261,9 +261,8 @@ int ws_fix_copy(char *dst, const char *src, int len, unsigned ws_rule, int *erro
|
||||
/*
|
||||
* Strip trailing whitespace
|
||||
*/
|
||||
if ((ws_rule & WS_TRAILING_SPACE) &&
|
||||
(2 <= len && isspace(src[len-2]))) {
|
||||
if (src[len - 1] == '\n') {
|
||||
if (ws_rule & WS_TRAILING_SPACE) {
|
||||
if (1 < len && src[len - 1] == '\n') {
|
||||
add_nl_to_tail = 1;
|
||||
len--;
|
||||
if (1 < len && src[len - 1] == '\r') {
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#define XDL_MAX_COST_MIN 256
|
||||
#define XDL_HEUR_MIN_COST 256
|
||||
#define XDL_LINE_MAX (long)((1UL << (8 * sizeof(long) - 1)) - 1)
|
||||
#define XDL_LINE_MAX (long)((1UL << (CHAR_BIT * sizeof(long) - 1)) - 1)
|
||||
#define XDL_SNAKE_CNT 20
|
||||
#define XDL_K_HEUR 4
|
||||
|
||||
|
||||
Reference in New Issue
Block a user