summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.mailmap1
-rw-r--r--Documentation/RelNotes/2.3.2.txt2
-rw-r--r--Documentation/RelNotes/2.3.5.txt44
-rw-r--r--Documentation/RelNotes/2.4.0.txt9
-rw-r--r--Documentation/git-pull.txt5
-rw-r--r--Documentation/git-push.txt14
-rw-r--r--Documentation/git-rebase.txt4
-rw-r--r--Documentation/git.txt3
-rw-r--r--Documentation/technical/api-error-handling.txt2
-rwxr-xr-xGIT-VERSION-GEN2
-rw-r--r--builtin/apply.c4
-rw-r--r--builtin/commit.c6
-rw-r--r--builtin/update-index.c1
-rw-r--r--http-push.c1
-rw-r--r--http.c1
-rw-r--r--merge-blobs.c4
-rw-r--r--merge-recursive.c3
-rw-r--r--read-cache.c22
-rw-r--r--send-pack.c2
19 files changed, 95 insertions, 35 deletions
diff --git a/.mailmap b/.mailmap
index bb6f52ecd9..ece2951a2b 100644
--- a/.mailmap
+++ b/.mailmap
@@ -13,6 +13,7 @@ Alex Riesen <raa.lkml@gmail.com> <raa@limbo.localdomain>
Alex Riesen <raa.lkml@gmail.com> <raa@steel.home>
Alex Vandiver <alex@chmrr.net> <alexmv@MIT.EDU>
Alexander Gavrilov <angavrilov@gmail.com>
+Alexander Kuleshov <kuleshovmail@gmail.com>
Alexey Shumkin <alex.crezoff@gmail.com> <zapped@mail.ru>
Alexey Shumkin <alex.crezoff@gmail.com> <Alex.Crezoff@gmail.com>
Anders Kaseorg <andersk@MIT.EDU> <andersk@ksplice.com>
diff --git a/Documentation/RelNotes/2.3.2.txt b/Documentation/RelNotes/2.3.2.txt
index f4caf54927..93462e45c2 100644
--- a/Documentation/RelNotes/2.3.2.txt
+++ b/Documentation/RelNotes/2.3.2.txt
@@ -24,7 +24,7 @@ Fixes since v2.3.1
"curl-config --vernum", which confused our build system.
* An earlier workaround to squelch unhelpful deprecation warnings
- from the complier on Mac OSX unnecessarily set minimum required
+ from the compiler on Mac OSX unnecessarily set minimum required
version of the OS, which the user might want to raise (or lower)
for other reasons.
diff --git a/Documentation/RelNotes/2.3.5.txt b/Documentation/RelNotes/2.3.5.txt
new file mode 100644
index 0000000000..5b309db689
--- /dev/null
+++ b/Documentation/RelNotes/2.3.5.txt
@@ -0,0 +1,44 @@
+Git v2.3.5 Release Notes
+========================
+
+Fixes since v2.3.4
+------------------
+
+ * The prompt script (in contrib/) did not show the untracked sign
+ when working in a subdirectory without any untracked files.
+
+ * Even though "git grep --quiet" is run merely to ask for the exit
+ status, we spawned the pager regardless. Stop doing that.
+
+ * Recommend format-patch and send-email for those who want to submit
+ patches to this project.
+
+ * An failure early in the "git clone" that started creating the
+ working tree and repository could have resulted in some directories
+ and files left without getting cleaned up.
+
+ * "git fetch" that fetches a commit using the allow-tip-sha1-in-want
+ extension could have failed to fetch all the requested refs.
+
+ * The split-index mode introduced at v2.3.0-rc0~41 was broken in the
+ codepath to protect us against a broken reimplementation of Git
+ that writes an invalid index with duplicated index entries, etc.
+
+ * "git prune" used to largely ignore broken refs when deciding which
+ objects are still being used, which could spread an existing small
+ damage and make it a larger one.
+
+ * "git tag -h" used to show the "--column" and "--sort" options
+ that are about listing in a wrong section.
+
+ * The transfer.hiderefs support did not quite work for smart-http
+ transport.
+
+ * The code that reads from the ctags file in the completion script
+ (in contrib/) did not spell ${param/pattern/string} substitution
+ correctly, which happened to work with bash but not with zsh.
+
+ * The explanation on "rebase --preserve-merges", "pull --rebase=preserve",
+ and "push --force-with-lease" in the documentation was unclear.
+
+Also contains typofixes, documentation updates and trivial code clean-ups.
diff --git a/Documentation/RelNotes/2.4.0.txt b/Documentation/RelNotes/2.4.0.txt
index 53c91270e7..21df61c3be 100644
--- a/Documentation/RelNotes/2.4.0.txt
+++ b/Documentation/RelNotes/2.4.0.txt
@@ -5,7 +5,8 @@ Backward compatibility warning(s)
---------------------------------
This release has a few changes in the user-visible output from
-Porcelain commands, which the users may want to be aware of.
+Porcelain commands. These are not meant to be parsed by scripts, but
+the users still may want to be aware of the changes:
* Output from "git log --decorate" (and "%d" format specifier used in
the userformat "--format=<string>" parameter "git log" family of
@@ -216,7 +217,7 @@ notes for details).
(merge 339de50 dk/format-patch-ignore-diff-submodule later to maint).
* After attempting and failing a password-less authentication
- (e.g. kerberos), libcURL refuses to fall back to password based
+ (e.g. Kerberos), libcURL refuses to fall back to password based
Basic authentication without a bit of help/encouragement.
(merge 4dbe664 bc/http-fallback-to-password-after-krb-fails later to maint).
@@ -301,7 +302,7 @@ notes for details).
(merge 35840a3 jc/conf-var-doc later to maint).
* An earlier workaround to squelch unhelpful deprecation warnings
- from the complier on Mac OSX unnecessarily set minimum required
+ from the compiler on Mac OSX unnecessarily set minimum required
version of the OS, which the user might want to raise (or lower)
for other reasons.
(merge 88c03eb es/squelch-openssl-warnings-on-macosx later to maint).
@@ -471,3 +472,5 @@ notes for details).
(merge 599d223 jk/simplify-csum-file-sha1fd-check later to maint).
(merge 260d585 sg/completion-gitcomp-nl-for-refs later to maint).
(merge 777c55a jc/report-path-error-to-dir later to maint).
+ (merge fddfaf8 ph/push-doc-cas later to maint).
+ (merge 129260c ss/pull-rebase-preserve later to maint).
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt
index d3d236cd1f..712ab4baed 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.txt
@@ -111,9 +111,8 @@ include::merge-options.txt[]
was rebased since last fetched, the rebase uses that information
to avoid rebasing non-local changes.
+
-When preserve, also rebase the current branch on top of the upstream
-branch, but pass `--preserve-merges` along to `git rebase` so that
-locally created merge commits will not be flattened.
+When set to preserve, rebase with the `--preserve-merges` option passed
+to `git rebase` so that locally created merge commits will not be flattened.
+
When false, merge the current branch into the upstream branch.
+
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 5171086181..863c30c4c2 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -157,9 +157,8 @@ already exists on the remote side.
Usually, "git push" refuses to update a remote ref that is
not an ancestor of the local ref used to overwrite it.
+
-This option bypasses the check, but instead requires that the
-current value of the ref to be the expected value. "git push"
-fails otherwise.
+This option overrides this restriction if the current value of the
+remote ref is the expected value. "git push" fails otherwise.
+
Imagine that you have to rebase what you have already published.
You will have to bypass the "must fast-forward" rule in order to
@@ -171,15 +170,14 @@ commit, and blindly pushing with `--force` will lose her work.
This option allows you to say that you expect the history you are
updating is what you rebased and want to replace. If the remote ref
still points at the commit you specified, you can be sure that no
-other people did anything to the ref (it is like taking a "lease" on
-the ref without explicitly locking it, and you update the ref while
-making sure that your earlier "lease" is still valid).
+other people did anything to the ref. It is like taking a "lease" on
+the ref without explicitly locking it, and the remote ref is updated
+only if the "lease" is still valid.
+
`--force-with-lease` alone, without specifying the details, will protect
all remote refs that are going to be updated by requiring their
current value to be the same as the remote-tracking branch we have
-for them, unless specified with a `--force-with-lease=<refname>:<expect>`
-option that explicitly states what the expected value is.
+for them.
+
`--force-with-lease=<refname>`, without specifying the expected value, will
protect the named ref (alone), if it is going to be updated, by
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index d728030590..47984e84ed 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -362,7 +362,9 @@ default is `--no-fork-point`, otherwise the default is `--fork-point`.
-p::
--preserve-merges::
- Instead of ignoring merges, try to recreate them.
+ Recreate merge commits instead of flattening the history by replaying
+ commits a merge commit introduces. Merge conflict resolutions or manual
+ amendments to merge commits are not preserved.
+
This uses the `--interactive` machinery internally, but combining it
with the `--interactive` option explicitly is generally not a good
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 8837862908..59e8335055 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -43,9 +43,10 @@ unreleased) version of Git, that is available from the 'master'
branch of the `git.git` repository.
Documentation for older releases are available here:
-* link:v2.3.4/git.html[documentation for release 2.3.4]
+* link:v2.3.5/git.html[documentation for release 2.3.5]
* release notes for
+ link:RelNotes/2.3.5.txt[2.3.5],
link:RelNotes/2.3.4.txt[2.3.4],
link:RelNotes/2.3.3.txt[2.3.3],
link:RelNotes/2.3.2.txt[2.3.2],
diff --git a/Documentation/technical/api-error-handling.txt b/Documentation/technical/api-error-handling.txt
index fc68db126e..ceeedd485c 100644
--- a/Documentation/technical/api-error-handling.txt
+++ b/Documentation/technical/api-error-handling.txt
@@ -58,7 +58,7 @@ to `die` or `error` as-is. For example:
if (ref_transaction_commit(transaction, &err))
die("%s", err.buf);
-The 'err' parameter will be untouched if no error occured, so multiple
+The 'err' parameter will be untouched if no error occurred, so multiple
function calls can be chained:
t = ref_transaction_begin(&err);
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 730b3f9fe7..40f8841678 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.4.0-rc0
+DEF_VER=v2.4.0-rc1
LF='
'
diff --git a/builtin/apply.c b/builtin/apply.c
index 65b97eee69..0769b09287 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -2776,7 +2776,8 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
default:
if (apply_verbosely)
error(_("invalid start of line: '%c'"), first);
- return -1;
+ applied_pos = -1;
+ goto out;
}
if (added_blank_line) {
if (!new_blank_lines_at_end)
@@ -2915,6 +2916,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
(int)(old - oldlines), oldlines);
}
+out:
free(oldlines);
strbuf_release(&newlines);
free(preimage.line_allocated);
diff --git a/builtin/commit.c b/builtin/commit.c
index 961e467242..da79ac4bc7 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -229,7 +229,7 @@ static int commit_index_files(void)
static int list_paths(struct string_list *list, const char *with_tree,
const char *prefix, const struct pathspec *pattern)
{
- int i;
+ int i, ret;
char *m;
if (!pattern->nr)
@@ -256,7 +256,9 @@ static int list_paths(struct string_list *list, const char *with_tree,
item->util = item; /* better a valid pointer than a fake one */
}
- return report_path_error(m, pattern, prefix);
+ ret = report_path_error(m, pattern, prefix);
+ free(m);
+ return ret;
}
static void add_remove_files(struct string_list *list)
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 587898624c..6271b54adc 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -584,6 +584,7 @@ static int do_reupdate(int ac, const char **av,
path = xstrdup(ce->name);
update_one(path);
free(path);
+ free(old);
if (save_nr != active_nr)
goto redo;
}
diff --git a/http-push.c b/http-push.c
index bfb1c9605b..c98dad23df 100644
--- a/http-push.c
+++ b/http-push.c
@@ -316,7 +316,6 @@ static void start_fetch_packed(struct transfer_request *request)
preq = new_http_pack_request(target, repo->url);
if (preq == NULL) {
- release_http_pack_request(preq);
repo->can_update_info_refs = 0;
return;
}
diff --git a/http.c b/http.c
index 9c825afefd..4b179f6fc8 100644
--- a/http.c
+++ b/http.c
@@ -1462,6 +1462,7 @@ void release_http_pack_request(struct http_pack_request *preq)
}
preq->slot = NULL;
free(preq->url);
+ free(preq);
}
int finish_http_pack_request(struct http_pack_request *preq)
diff --git a/merge-blobs.c b/merge-blobs.c
index 57211bccb7..7abb894c68 100644
--- a/merge-blobs.c
+++ b/merge-blobs.c
@@ -14,8 +14,10 @@ static int fill_mmfile_blob(mmfile_t *f, struct blob *obj)
buf = read_sha1_file(obj->object.sha1, &type, &size);
if (!buf)
return -1;
- if (type != OBJ_BLOB)
+ if (type != OBJ_BLOB) {
+ free(buf);
return -1;
+ }
f->ptr = buf;
f->size = size;
return 0;
diff --git a/merge-recursive.c b/merge-recursive.c
index 771f5e21b0..1c9c30db6c 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1858,6 +1858,9 @@ int merge_trees(struct merge_options *o,
string_list_clear(re_head, 0);
string_list_clear(entries, 1);
+ free(re_merge);
+ free(re_head);
+ free(entries);
}
else
clean = 1;
diff --git a/read-cache.c b/read-cache.c
index 1bf78a445f..36ff89f29e 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -681,15 +681,18 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
alias = index_file_exists(istate, ce->name, ce_namelen(ce), ignore_case);
if (alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) {
/* Nothing changed, really */
- free(ce);
if (!S_ISGITLINK(alias->ce_mode))
ce_mark_uptodate(alias);
alias->ce_flags |= CE_ADDED;
+
+ free(ce);
return 0;
}
if (!intent_only) {
- if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT))
+ if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT)) {
+ free(ce);
return error("unable to index file %s", path);
+ }
} else
set_object_name_for_intent_to_add_entry(ce);
@@ -704,9 +707,11 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
ce->ce_mode == alias->ce_mode);
if (pretend)
- ;
- else if (add_index_entry(istate, ce, add_option))
- return error("unable to add %s to index",path);
+ free(ce);
+ else if (add_index_entry(istate, ce, add_option)) {
+ free(ce);
+ return error("unable to add %s to index", path);
+ }
if (verbose && !was_same)
printf("add '%s'\n", path);
return 0;
@@ -743,12 +748,9 @@ struct cache_entry *make_cache_entry(unsigned int mode,
ce->ce_mode = create_ce_mode(mode);
ret = refresh_cache_entry(ce, refresh_options);
- if (!ret) {
+ if (ret != ce)
free(ce);
- return NULL;
- } else {
- return ret;
- }
+ return ret;
}
int ce_same_name(const struct cache_entry *a, const struct cache_entry *b)
diff --git a/send-pack.c b/send-pack.c
index 9d2b0c52ed..189bdde0c2 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -363,7 +363,7 @@ int send_pack(struct send_pack_args *args,
return 0;
}
if (args->atomic && !atomic_supported)
- die(_("server does not support --atomic push"));
+ die(_("the receiving end does not support --atomic push"));
use_atomic = atomic_supported && args->atomic;