mirror of
https://github.com/git/git.git
synced 2024-11-24 18:33:43 +08:00
Merge branch 'maint-1.7.7' into maint
* maint-1.7.7: Git 1.7.7.5 Git 1.7.6.5 blame: don't overflow time buffer fetch: create status table using strbuf checkout,merge: loosen overwriting untracked file check based on info/exclude cast variable in call to free() in builtin/diff.c and submodule.c apply: get rid of useless x < 0 comparison on a size_t type Conflicts: Documentation/git.txt GIT-VERSION-GEN RelNotes builtin/fetch.c
This commit is contained in:
commit
8311158c66
26
Documentation/RelNotes/1.7.6.5.txt
Normal file
26
Documentation/RelNotes/1.7.6.5.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Git v1.7.6.5 Release Notes
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Fixes since v1.7.6.4
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
* The date parser did not accept timezone designators that lack minutes
|
||||||
|
part and also has a colon between "hh:mm".
|
||||||
|
|
||||||
|
* After fetching from a remote that has very long refname, the reporting
|
||||||
|
output could have corrupted by overrunning a static buffer.
|
||||||
|
|
||||||
|
* "git mergetool" did not use its arguments as pathspec, but as a path to
|
||||||
|
the file that may not even have any conflict.
|
||||||
|
|
||||||
|
* "git name-rev --all" tried to name all _objects_, naturally failing to
|
||||||
|
describe many blobs and trees, instead of showing only commits as
|
||||||
|
advertised in its documentation.
|
||||||
|
|
||||||
|
* "git remote rename $a $b" were not careful to match the remote name
|
||||||
|
against $a (i.e. source side of the remote nickname).
|
||||||
|
|
||||||
|
* "gitweb" used to produce a non-working link while showing the contents
|
||||||
|
of a blob, when JavaScript actions are enabled.
|
||||||
|
|
||||||
|
Also contains minor fixes and documentation updates.
|
14
Documentation/RelNotes/1.7.7.5.txt
Normal file
14
Documentation/RelNotes/1.7.7.5.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Git v1.7.7.5 Release Notes
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Fixes since v1.7.7.4
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
* After fetching from a remote that has very long refname, the reporting
|
||||||
|
output could have corrupted by overrunning a static buffer.
|
||||||
|
|
||||||
|
* "git checkout" and "git merge" treated in-tree .gitignore and exclude
|
||||||
|
file in $GIT_DIR/info/ directory inconsistently when deciding which
|
||||||
|
untracked files are ignored and expendable.
|
||||||
|
|
||||||
|
Also contains minor fixes and documentation updates.
|
@ -49,15 +49,20 @@ Documentation for older releases are available here:
|
|||||||
* release notes for
|
* release notes for
|
||||||
link:RelNotes/1.7.8.txt[1.7.8].
|
link:RelNotes/1.7.8.txt[1.7.8].
|
||||||
|
|
||||||
* link:v1.7.7.1/git.html[documentation for release 1.7.7.1]
|
* link:v1.7.7.5/git.html[documentation for release 1.7.7.5]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes/1.7.7.5.txt[1.7.7.5],
|
||||||
|
link:RelNotes/1.7.7.4.txt[1.7.7.4],
|
||||||
|
link:RelNotes/1.7.7.3.txt[1.7.7.3],
|
||||||
|
link:RelNotes/1.7.7.2.txt[1.7.7.2],
|
||||||
link:RelNotes/1.7.7.1.txt[1.7.7.1],
|
link:RelNotes/1.7.7.1.txt[1.7.7.1],
|
||||||
link:RelNotes/1.7.7.txt[1.7.7].
|
link:RelNotes/1.7.7.txt[1.7.7].
|
||||||
|
|
||||||
* link:v1.7.6.4/git.html[documentation for release 1.7.6.4]
|
* link:v1.7.6.5/git.html[documentation for release 1.7.6.5]
|
||||||
|
|
||||||
* release notes for
|
* release notes for
|
||||||
|
link:RelNotes/1.7.6.5.txt[1.7.6.5],
|
||||||
link:RelNotes/1.7.6.4.txt[1.7.6.4],
|
link:RelNotes/1.7.6.4.txt[1.7.6.4],
|
||||||
link:RelNotes/1.7.6.3.txt[1.7.6.3],
|
link:RelNotes/1.7.6.3.txt[1.7.6.3],
|
||||||
link:RelNotes/1.7.6.2.txt[1.7.6.2],
|
link:RelNotes/1.7.6.2.txt[1.7.6.2],
|
||||||
|
@ -250,9 +250,6 @@ static int fuzzy_matchlines(const char *s1, size_t n1,
|
|||||||
const char *last2 = s2 + n2 - 1;
|
const char *last2 = s2 + n2 - 1;
|
||||||
int result = 0;
|
int result = 0;
|
||||||
|
|
||||||
if (n1 < 0 || n2 < 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* ignore line endings */
|
/* ignore line endings */
|
||||||
while ((*last1 == '\r') || (*last1 == '\n'))
|
while ((*last1 == '\r') || (*last1 == '\n'))
|
||||||
last1--;
|
last1--;
|
||||||
|
@ -1598,7 +1598,7 @@ static const char *format_time(unsigned long time, const char *tz_str,
|
|||||||
int tz;
|
int tz;
|
||||||
|
|
||||||
if (show_raw_time) {
|
if (show_raw_time) {
|
||||||
sprintf(time_buf, "%lu %s", time, tz_str);
|
snprintf(time_buf, sizeof(time_buf), "%lu %s", time, tz_str);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
tz = atoi(tz_str);
|
tz = atoi(tz_str);
|
||||||
|
@ -411,7 +411,7 @@ static int merge_working_tree(struct checkout_opts *opts,
|
|||||||
topts.fn = twoway_merge;
|
topts.fn = twoway_merge;
|
||||||
topts.dir = xcalloc(1, sizeof(*topts.dir));
|
topts.dir = xcalloc(1, sizeof(*topts.dir));
|
||||||
topts.dir->flags |= DIR_SHOW_IGNORED;
|
topts.dir->flags |= DIR_SHOW_IGNORED;
|
||||||
topts.dir->exclude_per_dir = ".gitignore";
|
setup_standard_excludes(topts.dir);
|
||||||
tree = parse_tree_indirect(old->commit ?
|
tree = parse_tree_indirect(old->commit ?
|
||||||
old->commit->object.sha1 :
|
old->commit->object.sha1 :
|
||||||
EMPTY_TREE_SHA1_BIN);
|
EMPTY_TREE_SHA1_BIN);
|
||||||
|
@ -182,7 +182,7 @@ static int builtin_diff_combined(struct rev_info *revs,
|
|||||||
hashcpy((unsigned char *)(parent + i), ent[i].item->sha1);
|
hashcpy((unsigned char *)(parent + i), ent[i].item->sha1);
|
||||||
diff_tree_combined(parent[0], parent + 1, ents - 1,
|
diff_tree_combined(parent[0], parent + 1, ents - 1,
|
||||||
revs->dense_combined_merges, revs);
|
revs->dense_combined_merges, revs);
|
||||||
free(parent);
|
free((void *)parent);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -240,23 +240,23 @@ static int s_update_ref(const char *action,
|
|||||||
|
|
||||||
static int update_local_ref(struct ref *ref,
|
static int update_local_ref(struct ref *ref,
|
||||||
const char *remote,
|
const char *remote,
|
||||||
char *display)
|
struct strbuf *display)
|
||||||
{
|
{
|
||||||
struct commit *current = NULL, *updated;
|
struct commit *current = NULL, *updated;
|
||||||
enum object_type type;
|
enum object_type type;
|
||||||
struct branch *current_branch = branch_get(NULL);
|
struct branch *current_branch = branch_get(NULL);
|
||||||
const char *pretty_ref = prettify_refname(ref->name);
|
const char *pretty_ref = prettify_refname(ref->name);
|
||||||
|
|
||||||
*display = 0;
|
|
||||||
type = sha1_object_info(ref->new_sha1, NULL);
|
type = sha1_object_info(ref->new_sha1, NULL);
|
||||||
if (type < 0)
|
if (type < 0)
|
||||||
die(_("object %s not found"), sha1_to_hex(ref->new_sha1));
|
die(_("object %s not found"), sha1_to_hex(ref->new_sha1));
|
||||||
|
|
||||||
if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
|
if (!hashcmp(ref->old_sha1, ref->new_sha1)) {
|
||||||
if (verbosity > 0)
|
if (verbosity > 0)
|
||||||
sprintf(display, "= %-*s %-*s -> %s", TRANSPORT_SUMMARY_WIDTH,
|
strbuf_addf(display, "= %-*s %-*s -> %s",
|
||||||
_("[up to date]"), REFCOL_WIDTH, remote,
|
TRANSPORT_SUMMARY_WIDTH,
|
||||||
pretty_ref);
|
_("[up to date]"), REFCOL_WIDTH,
|
||||||
|
remote, pretty_ref);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,9 +268,10 @@ static int update_local_ref(struct ref *ref,
|
|||||||
* If this is the head, and it's not okay to update
|
* If this is the head, and it's not okay to update
|
||||||
* the head, and the old value of the head isn't empty...
|
* the head, and the old value of the head isn't empty...
|
||||||
*/
|
*/
|
||||||
sprintf(display, _("! %-*s %-*s -> %s (can't fetch in current branch)"),
|
strbuf_addf(display,
|
||||||
TRANSPORT_SUMMARY_WIDTH, _("[rejected]"), REFCOL_WIDTH, remote,
|
_("! %-*s %-*s -> %s (can't fetch in current branch)"),
|
||||||
pretty_ref);
|
TRANSPORT_SUMMARY_WIDTH, _("[rejected]"),
|
||||||
|
REFCOL_WIDTH, remote, pretty_ref);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,9 +279,11 @@ static int update_local_ref(struct ref *ref,
|
|||||||
!prefixcmp(ref->name, "refs/tags/")) {
|
!prefixcmp(ref->name, "refs/tags/")) {
|
||||||
int r;
|
int r;
|
||||||
r = s_update_ref("updating tag", ref, 0);
|
r = s_update_ref("updating tag", ref, 0);
|
||||||
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '-',
|
strbuf_addf(display, "%c %-*s %-*s -> %s%s",
|
||||||
TRANSPORT_SUMMARY_WIDTH, _("[tag update]"), REFCOL_WIDTH, remote,
|
r ? '!' : '-',
|
||||||
pretty_ref, r ? _(" (unable to update local ref)") : "");
|
TRANSPORT_SUMMARY_WIDTH, _("[tag update]"),
|
||||||
|
REFCOL_WIDTH, remote, pretty_ref,
|
||||||
|
r ? _(" (unable to update local ref)") : "");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,9 +306,11 @@ static int update_local_ref(struct ref *ref,
|
|||||||
}
|
}
|
||||||
|
|
||||||
r = s_update_ref(msg, ref, 0);
|
r = s_update_ref(msg, ref, 0);
|
||||||
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : '*',
|
strbuf_addf(display, "%c %-*s %-*s -> %s%s",
|
||||||
TRANSPORT_SUMMARY_WIDTH, what, REFCOL_WIDTH, remote, pretty_ref,
|
r ? '!' : '*',
|
||||||
r ? _(" (unable to update local ref)") : "");
|
TRANSPORT_SUMMARY_WIDTH, what,
|
||||||
|
REFCOL_WIDTH, remote, pretty_ref,
|
||||||
|
r ? _(" (unable to update local ref)") : "");
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,9 +324,11 @@ static int update_local_ref(struct ref *ref,
|
|||||||
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
||||||
check_for_new_submodule_commits(ref->new_sha1);
|
check_for_new_submodule_commits(ref->new_sha1);
|
||||||
r = s_update_ref("fast-forward", ref, 1);
|
r = s_update_ref("fast-forward", ref, 1);
|
||||||
sprintf(display, "%c %-*s %-*s -> %s%s", r ? '!' : ' ',
|
strbuf_addf(display, "%c %-*s %-*s -> %s%s",
|
||||||
TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
|
r ? '!' : ' ',
|
||||||
pretty_ref, r ? _(" (unable to update local ref)") : "");
|
TRANSPORT_SUMMARY_WIDTH, quickref,
|
||||||
|
REFCOL_WIDTH, remote, pretty_ref,
|
||||||
|
r ? _(" (unable to update local ref)") : "");
|
||||||
return r;
|
return r;
|
||||||
} else if (force || ref->force) {
|
} else if (force || ref->force) {
|
||||||
char quickref[84];
|
char quickref[84];
|
||||||
@ -333,15 +340,17 @@ static int update_local_ref(struct ref *ref,
|
|||||||
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
(recurse_submodules != RECURSE_SUBMODULES_ON))
|
||||||
check_for_new_submodule_commits(ref->new_sha1);
|
check_for_new_submodule_commits(ref->new_sha1);
|
||||||
r = s_update_ref("forced-update", ref, 1);
|
r = s_update_ref("forced-update", ref, 1);
|
||||||
sprintf(display, "%c %-*s %-*s -> %s (%s)", r ? '!' : '+',
|
strbuf_addf(display, "%c %-*s %-*s -> %s (%s)",
|
||||||
TRANSPORT_SUMMARY_WIDTH, quickref, REFCOL_WIDTH, remote,
|
r ? '!' : '+',
|
||||||
pretty_ref,
|
TRANSPORT_SUMMARY_WIDTH, quickref,
|
||||||
r ? _("unable to update local ref") : _("forced update"));
|
REFCOL_WIDTH, remote, pretty_ref,
|
||||||
|
r ? _("unable to update local ref") : _("forced update"));
|
||||||
return r;
|
return r;
|
||||||
} else {
|
} else {
|
||||||
sprintf(display, "! %-*s %-*s -> %s %s",
|
strbuf_addf(display, "! %-*s %-*s -> %s %s",
|
||||||
TRANSPORT_SUMMARY_WIDTH, _("[rejected]"), REFCOL_WIDTH, remote,
|
TRANSPORT_SUMMARY_WIDTH, _("[rejected]"),
|
||||||
pretty_ref, _("(non-fast-forward)"));
|
REFCOL_WIDTH, remote, pretty_ref,
|
||||||
|
_("(non-fast-forward)"));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -363,8 +372,8 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
int url_len, i, note_len, shown_url = 0, rc = 0;
|
int url_len, i, shown_url = 0, rc = 0;
|
||||||
char note[1024];
|
struct strbuf note = STRBUF_INIT;
|
||||||
const char *what, *kind;
|
const char *what, *kind;
|
||||||
struct ref *rm;
|
struct ref *rm;
|
||||||
char *url, *filename = dry_run ? "/dev/null" : git_path("FETCH_HEAD");
|
char *url, *filename = dry_run ? "/dev/null" : git_path("FETCH_HEAD");
|
||||||
@ -427,19 +436,17 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
|||||||
if (4 < i && !strncmp(".git", url + i - 3, 4))
|
if (4 < i && !strncmp(".git", url + i - 3, 4))
|
||||||
url_len = i - 3;
|
url_len = i - 3;
|
||||||
|
|
||||||
note_len = 0;
|
strbuf_reset(¬e);
|
||||||
if (*what) {
|
if (*what) {
|
||||||
if (*kind)
|
if (*kind)
|
||||||
note_len += sprintf(note + note_len, "%s ",
|
strbuf_addf(¬e, "%s ", kind);
|
||||||
kind);
|
strbuf_addf(¬e, "'%s' of ", what);
|
||||||
note_len += sprintf(note + note_len, "'%s' of ", what);
|
|
||||||
}
|
}
|
||||||
note[note_len] = '\0';
|
|
||||||
fprintf(fp, "%s\t%s\t%s",
|
fprintf(fp, "%s\t%s\t%s",
|
||||||
sha1_to_hex(commit ? commit->object.sha1 :
|
sha1_to_hex(commit ? commit->object.sha1 :
|
||||||
rm->old_sha1),
|
rm->old_sha1),
|
||||||
rm->merge ? "" : "not-for-merge",
|
rm->merge ? "" : "not-for-merge",
|
||||||
note);
|
note.buf);
|
||||||
for (i = 0; i < url_len; ++i)
|
for (i = 0; i < url_len; ++i)
|
||||||
if ('\n' == url[i])
|
if ('\n' == url[i])
|
||||||
fputs("\\n", fp);
|
fputs("\\n", fp);
|
||||||
@ -447,21 +454,24 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
|||||||
fputc(url[i], fp);
|
fputc(url[i], fp);
|
||||||
fputc('\n', fp);
|
fputc('\n', fp);
|
||||||
|
|
||||||
|
strbuf_reset(¬e);
|
||||||
if (ref) {
|
if (ref) {
|
||||||
rc |= update_local_ref(ref, what, note);
|
rc |= update_local_ref(ref, what, ¬e);
|
||||||
free(ref);
|
free(ref);
|
||||||
} else
|
} else
|
||||||
sprintf(note, "* %-*s %-*s -> FETCH_HEAD",
|
strbuf_addf(¬e, "* %-*s %-*s -> FETCH_HEAD",
|
||||||
TRANSPORT_SUMMARY_WIDTH, *kind ? kind : "branch",
|
TRANSPORT_SUMMARY_WIDTH,
|
||||||
REFCOL_WIDTH, *what ? what : "HEAD");
|
*kind ? kind : "branch",
|
||||||
if (*note) {
|
REFCOL_WIDTH,
|
||||||
|
*what ? what : "HEAD");
|
||||||
|
if (note.len) {
|
||||||
if (verbosity >= 0 && !shown_url) {
|
if (verbosity >= 0 && !shown_url) {
|
||||||
fprintf(stderr, _("From %.*s\n"),
|
fprintf(stderr, _("From %.*s\n"),
|
||||||
url_len, url);
|
url_len, url);
|
||||||
shown_url = 1;
|
shown_url = 1;
|
||||||
}
|
}
|
||||||
if (verbosity >= 0)
|
if (verbosity >= 0)
|
||||||
fprintf(stderr, " %s\n", note);
|
fprintf(stderr, " %s\n", note.buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,6 +481,7 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
|
|||||||
"branches"), remote_name);
|
"branches"), remote_name);
|
||||||
|
|
||||||
abort:
|
abort:
|
||||||
|
strbuf_release(¬e);
|
||||||
free(url);
|
free(url);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -775,7 +775,7 @@ int checkout_fast_forward(const unsigned char *head, const unsigned char *remote
|
|||||||
memset(&t, 0, sizeof(t));
|
memset(&t, 0, sizeof(t));
|
||||||
memset(&dir, 0, sizeof(dir));
|
memset(&dir, 0, sizeof(dir));
|
||||||
dir.flags |= DIR_SHOW_IGNORED;
|
dir.flags |= DIR_SHOW_IGNORED;
|
||||||
dir.exclude_per_dir = ".gitignore";
|
setup_standard_excludes(&dir);
|
||||||
opts.dir = &dir;
|
opts.dir = &dir;
|
||||||
|
|
||||||
opts.head_idx = 1;
|
opts.head_idx = 1;
|
||||||
|
@ -391,7 +391,7 @@ static void commit_need_pushing(struct commit *commit, struct commit_list *paren
|
|||||||
rev.diffopt.format_callback_data = needs_pushing;
|
rev.diffopt.format_callback_data = needs_pushing;
|
||||||
diff_tree_combined(commit->object.sha1, parents, n, 1, &rev);
|
diff_tree_combined(commit->object.sha1, parents, n, 1, &rev);
|
||||||
|
|
||||||
free(parents);
|
free((void *)parents);
|
||||||
}
|
}
|
||||||
|
|
||||||
int check_submodule_needs_pushing(unsigned char new_sha1[20], const char *remotes_name)
|
int check_submodule_needs_pushing(unsigned char new_sha1[20], const char *remotes_name)
|
||||||
|
Loading…
Reference in New Issue
Block a user