Junio C Hamano [Fri, 15 Aug 2014 22:09:12 +0000 (15:09 -0700)]
Git 2.1
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Fri, 15 Aug 2014 17:02:46 +0000 (10:02 -0700)]
config.mak.uname: add hint on uname_R for MacOS X
I always have to scratch my head every time I see this cryptic
pattern "[15678]\."; leave a short note to remind the maintainer
and the reviewers.
Signed-off-by: Junio C Hamano <redacted>
Kyle J. McKay [Fri, 15 Aug 2014 07:46:11 +0000 (00:46 -0700)]
config.mak.uname: set NO_APPLE_COMMON_CRYPTO on older systems
Older MacOS systems prior to 10.5 do not have the CommonCrypto
support Git uses so set NO_APPLE_COMMON_CRYPTO on those systems.
Signed-off-by: Kyle J. McKay <redacted>
Signed-off-by: Junio C Hamano <redacted>
Johannes Sixt [Wed, 13 Aug 2014 19:30:11 +0000 (21:30 +0200)]
tests: fix negated test_i18ngrep calls
The helper function test_i18ngrep pretends that it found the expected
results when it is running under GETTEXT_POISON. For this reason, it must
not be used negated like so
! test_i18ngrep foo bar
because the test case would fail under GETTEXT_POISON. The function offers
a special syntax to test that a pattern is *not* found:
test_i18ngrep ! foo bar
Convert incorrect uses to this syntax.
Signed-off-by: Johannes Sixt <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Wed, 13 Aug 2014 08:22:02 +0000 (01:22 -0700)]
builtin/apply.c: replace `git_config()` with `git_config_get_string_const()`
Use `git_config_get_string_const()` instead of `git_config()` to take
advantage of the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Wed, 13 Aug 2014 08:22:01 +0000 (01:22 -0700)]
merge-recursive.c: replace `git_config()` with `git_config_get_int()`
Use `git_config_get_int()` instead of `git_config()` to take advantage
of the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Wed, 13 Aug 2014 12:43:04 +0000 (18:13 +0530)]
ll-merge.c: refactor `read_merge_config()` to use `git_config_string()`
There is one slight behavior change, previously "merge.default"
silently ignored a NULL value and didn't raise any error. But,
in the same function, all other values raise an error on a NULL
value. So to conform with other call sites in Git, a NULL value
for "merge.default" raises an error.
The the new config-set API is not very useful here, because much of
the function is dedicated to processing "merge.<name>.variable",
which the new API does not handle well. If it were for variables
like, "merge.summary", "merge.tool", and "merge.verbosity", we could
use the new API.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Wed, 13 Aug 2014 12:22:56 +0000 (17:52 +0530)]
fast-import.c: replace `git_config()` with `git_config_get_*()` family
Use `git_config_get_*()` family instead of `git_config()` to take
advantage of the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jonathan Nieder [Wed, 13 Aug 2014 00:00:45 +0000 (17:00 -0700)]
unpack-trees: use 'cuddled' style for if-else cascade
Match the predominant style in git by following K&R style for if/else
cascades. Documentation/CodingStyle from linux.git explains:
Note that the closing brace is empty on a line of its own, _except_ in
the cases where it is followed by a continuation of the same statement,
ie a "while" in a do-statement or an "else" in an if-statement, like
this:
if (x == y) {
..
} else if (x > y) {
...
} else {
....
}
Rationale: K&R.
Also, note that this brace-placement also minimizes the number of empty
(or almost empty) lines, without any loss of readability.
Signed-off-by: Jonathan Nieder <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Tue, 12 Aug 2014 23:59:31 +0000 (16:59 -0700)]
unpack-trees: simplify 'all other failures' case
In the 'if (current)' block of twoway_merge, we handle the boring
errors by checking if the entry from the old tree, current index, and
new tree are present, to get a pathname for the error message from one
of them:
if (oldtree)
return o->gently ? -1 : reject_merge(oldtree, o);
if (current)
return o->gently ? -1 : reject_merge(current, o);
if (newtree)
return o->gently ? -1 : reject_merge(newtree, o);
return -1;
Since this is guarded by 'if (current)', the second test is guaranteed
to succeed. Moreover, any of the three entries, if present, would
have the same path because there is no rename detection in this code
path. Even if some day in the future the entries' paths differ, the
'current' path used in the index and worktree would presumably be the
most recognizable for the end user.
Simplify by just using 'current'.
Noticed by coverity, Id:290002
Signed-off-by: Stefan Beller <redacted>
Improved-by: Junio C Hamano <redacted>
Signed-off-by: Jonathan Nieder <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Tue, 12 Aug 2014 21:21:27 +0000 (23:21 +0200)]
mailsplit.c: remove dead code
This was found by coverity. (Id: 290001)
The variable 'output' is assigned to a value
after all gotos to the corrupt label.
Remove the goto by moving the errorhandling code to the
condition, which detects the error.
Signed-off-by: Stefan Beller <redacted>
Helped-by: René Scharfe <redacted>
Signed-off-by: Junio C Hamano <redacted>
Sergey Organov [Mon, 11 Aug 2014 20:22:48 +0000 (00:22 +0400)]
Documentation/git-rebase.txt: -f forces a rebase that would otherwise be a no-op
"Current branch is a descendant of the commit you are rebasing onto"
does not necessarily mean "rebase" requires "--force". For a plain
vanilla "history flattening" rebase, the rebase can be done without
forcing if there is a merge between the tip of the branch being
rebased and the commit you are rebasing onto, even if the tip is
descendant of the other.
[jc: reworded both the text and the log description]
Signed-off-by: Sergey Organov <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff King [Tue, 12 Aug 2014 04:34:53 +0000 (00:34 -0400)]
pack-objects: turn off bitmaps when we see --shallow lines
Reachability bitmaps do not work with shallow operations,
because they cache a view of the object reachability that
represents the true objects. Whereas a shallow repository
(or a shallow operation in a repository) is inherently
cutting off the object graph with a graft.
We explicitly disallow the use of bitmaps in shallow
repositories by checking is_repository_shallow(), and we
should continue to do that. However, we also want to
disallow bitmaps when we are serving a fetch to a shallow
client, since we momentarily take on their grafted view of
the world.
It used to be enough to call is_repository_shallow at the
start of pack-objects. Upload-pack wrote the other side's
shallow state to a temporary file and pointed the whole
pack-objects process at this state with "git --shallow-file",
and from the perspective of pack-objects, we really were
in a shallow repo. But since
b790e0f (upload-pack: send
shallow info over stdin to pack-objects, 2014-03-11), we do
it differently: we send --shallow lines to pack-objects over
stdin, and it registers them itself.
This means that our is_repository_shallow check is way too
early (we have not been told about the shallowness yet), and
that it is insufficient (calling is_repository_shallow is
not enough, as the shallow grafts we register do not change
its return value). Instead, we can just turn off bitmaps
explicitly when we see these lines.
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Sun, 10 Aug 2014 21:33:25 +0000 (23:33 +0200)]
builtin/blame.c: add translation to warning about failed revision walk
Signed-off-by: Stefan Beller <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Sun, 10 Aug 2014 21:33:26 +0000 (23:33 +0200)]
prepare_revision_walk(): check for return value in all places
Even the documentation tells us:
You should check if it returns any error (non-zero return
code) and if it does not, you can start using get_revision()
to do the iteration.
In preparation for this commit, I grepped all occurrences of
prepare_revision_walk and added error messages, when there were none.
Signed-off-by: Stefan Beller <redacted>
Signed-off-by: Junio C Hamano <redacted>
Nguyễn Thái Ngọc Duy [Sun, 10 Aug 2014 07:05:21 +0000 (14:05 +0700)]
utf8.c: fix strbuf_utf8_replace() consuming data beyond input string
The main loop in strbuf_utf8_replace() could summed up as:
while ('src' is still valid) {
1) advance 'src' to copy ANSI escape sequences
2) advance 'src' to copy/replace visible characters
}
The problem is after #1, 'src' may have reached the end of the string
(so 'src' points to NUL) and #2 will continue to copy that NUL as if
it's a normal character. Because the output is stored in a strbuf,
this NUL accounted in the 'len' field as well. Check after #1 and
break the loop if necessary.
The test does not look obvious, but the combination of %>>() should
make a call trace like this
show_log()
pretty_print_commit()
format_commit_message()
strbuf_expand()
format_commit_item()
format_and_pad_commit()
strbuf_utf8_replace()
where %C(auto)%d would insert a color reset escape sequence in the end
of the string given to strbuf_utf8_replace() and show_log() uses
fwrite() to send everything to stdout (including the incorrect NUL
inserted by strbuf_utf8_replace)
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Nguyễn Thái Ngọc Duy [Sun, 10 Aug 2014 02:29:30 +0000 (09:29 +0700)]
mv: flatten error handling code block
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Nguyễn Thái Ngọc Duy [Sun, 10 Aug 2014 02:29:29 +0000 (09:29 +0700)]
mv: mark strings for translations
Signed-off-by: Nguyễn Thái Ngọc Duy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Sun, 10 Aug 2014 13:57:56 +0000 (15:57 +0200)]
clone.c: don't leak memory in cmd_clone
Free the refspec.
Found by scan.coverity.com (Id:
1127806)
Signed-off-by: Stefan Beller <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Sun, 10 Aug 2014 19:43:33 +0000 (21:43 +0200)]
remote.c: don't leak the base branch name in format_tracking_info
Found by scan.coverity.com (Id:
1127809)
Signed-off-by: Stefan Beller <redacted>
Signed-off-by: Junio C Hamano <redacted>
René Scharfe [Sat, 9 Aug 2014 17:43:29 +0000 (19:43 +0200)]
read-cache: check for leading symlinks when refreshing index
Don't add paths with leading symlinks to the index while refreshing; we
only track those symlinks themselves. We already ignore them while
preloading (see read_index_preload.c).
Reported-by: Nikolay Avdeev <redacted>
Signed-off-by: Rene Scharfe <redacted>
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Sun, 10 Aug 2014 18:03:03 +0000 (11:03 -0700)]
Merge branch 'master' of git://ozlabs.org/~paulus/gitk
* 'master' of git://ozlabs.org/~paulus/gitk:
gitk: Updated Bulgarian translation (302t,0f,0u)
gitk: Add keybinding to switch to parent commit
David Turner [Mon, 21 Jul 2014 20:41:38 +0000 (16:41 -0400)]
git-gui: Make git-gui lib dir configurable at runime
Introduce the GIT_GUI_LIB_DIR environment variable, to tell git-gui
where to look for TCL libs. This allows a git-gui which has been
built with a prefix of /foo to be run out of directory /bar. This is
the equivalent of GIT_EXEC_PATH or GITPERLLIB but for git-gui's TCL
libraries.
Signed-off-by: David Turner <redacted>
Signed-off-by: Pat Thoyts <redacted>
Alexander Shopov [Fri, 8 Aug 2014 06:10:03 +0000 (09:10 +0300)]
git-gui i18n: Updated Bulgarian translation (520t,0f,0u)
Signed-off-by: Alexander Shopov <redacted>
Signed-off-by: Pat Thoyts <redacted>
Junio C Hamano [Fri, 8 Aug 2014 20:52:16 +0000 (13:52 -0700)]
Git 2.1-rc2
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:20 +0000 (10:29 -0700)]
Documentation: git-init: flesh out example
Add a third step `git commit` after adding files for the first time.
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:19 +0000 (10:29 -0700)]
Documentation: git-init: template directory: reword and cross-reference
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:18 +0000 (10:29 -0700)]
Documentation: git-init: reword parenthetical statements
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:17 +0000 (10:29 -0700)]
Documentation: git-init: --separate-git-dir: clarify
Use shorter sentences to describe what actually happens. We describe
what the term "Git symbolic link" actually means.
Also, we separate out the description of the behavioral change upon
reinitialization into its own paragraph.
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:16 +0000 (10:29 -0700)]
Documentation: git-init: template directory: reword
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:15 +0000 (10:29 -0700)]
Documentation: git-init: list items facelift
No textual change.
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Linus Arver [Fri, 8 Aug 2014 17:29:14 +0000 (10:29 -0700)]
Documentation: git-init: typographical fixes
Use backticks when we quote something that the user should literally
use.
Signed-off-by: Linus Arver <redacted>
Signed-off-by: Junio C Hamano <redacted>
Alexander Shopov [Sun, 3 Aug 2014 12:36:43 +0000 (15:36 +0300)]
gitk: Updated Bulgarian translation (302t,0f,0u)
Signed-off-by: Alexander Shopov <redacted>
Signed-off-by: Paul Mackerras <redacted>
Max Kirillov [Tue, 8 Jul 2014 20:45:35 +0000 (23:45 +0300)]
gitk: Add keybinding to switch to parent commit
Signed-off-by: Max Kirillov <redacted>
Signed-off-by: Paul Mackerras <redacted>
Lukas Fleischer [Sat, 2 Aug 2014 08:39:06 +0000 (10:39 +0200)]
bundle: fix exclusion of annotated tags
In commit
c9a42c4 (bundle: allow rev-list options to exclude annotated
tags, 2009-01-02), support for excluding annotated tags outside the
specified date range was added. However, the wrong order of parameters
was chosen when calling memchr().
Fix this by swapping the character to search for with the maximum length
parameter. Also cover this behavior with an additional test.
Signed-off-by: Lukas Fleischer <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff King [Wed, 6 Aug 2014 18:35:25 +0000 (14:35 -0400)]
stash: default listing to working-tree diff
When you list stashes, you can provide arbitrary git-log
options to change the display. However, adding just "-p"
does nothing, because each stash is actually a merge commit.
This implementation detail is easy to forget, leading to
confused users who think "-p" is not working. We can make
this easier by defaulting to "--first-parent -m", which will
show the diff against the working tree. This omits the
index portion of the stash entirely, but it's simple and it
matches what "git stash show" provides.
People who are more clueful about stash's true form can use
"--cc" to override the "-m", and the "--first-parent" will
then do nothing. For diffs, it only affects non-combined
diffs, so "--cc" overrides it. And for the traversal, we are
walking the linear reflog anyway, so we do not even care
about the parents.
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 17:56:42 +0000 (23:26 +0530)]
branch.c: replace `git_config()` with `git_config_get_string()
Use `git_config_get_string()` instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow. While we are at
it, return -1 if we find no value for the queried variable. Original code
returned 0 for all cases, which was checked by `add_branch_desc()` in
fmt-merge-msg.c resulting in addition of a spurious newline to the `out`
strbuf. Now, the newline addition is skipped as -1 is returned to the caller
if no value is found.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:25 +0000 (09:21 -0700)]
alias.c: replace `git_config()` with `git_config_get_string()`
Use `git_config_get_string()` instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:24 +0000 (09:21 -0700)]
imap-send.c: replace `git_config()` with `git_config_get_*()` family
Use `git_config_get_*()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:23 +0000 (09:21 -0700)]
pager.c: replace `git_config()` with `git_config_get_value()`
Use `git_config_get_value()` instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:22 +0000 (09:21 -0700)]
builtin/gc.c: replace `git_config()` with `git_config_get_*()` family
Use `git_config_get_*()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:21 +0000 (09:21 -0700)]
rerere.c: replace `git_config()` with `git_config_get_*()` family
Use `git_config_get_*()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:20 +0000 (09:21 -0700)]
fetchpack.c: replace `git_config()` with `git_config_get_*()` family
Use `git_config_get_*()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:19 +0000 (09:21 -0700)]
archive.c: replace `git_config()` with `git_config_get_bool()` family
Use `git_config_get_bool()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:18 +0000 (09:21 -0700)]
read-cache.c: replace `git_config()` with `git_config_get_*()` family
Use `git_config_get_*()` family instead of `git_config()` to take
advantage of the config-set API which provides a cleaner control flow.
Use an intermediate value, as `version` can not be used directly in
git_config_get_int() due to incompatible type.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:17 +0000 (09:21 -0700)]
http-backend.c: replace `git_config()` with `git_config_get_bool()` family
Use `git_config_get_bool()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 16:21:16 +0000 (09:21 -0700)]
daemon.c: replace `git_config()` with `git_config_get_bool()` family
Use `git_config_get_bool()` family instead of `git_config()` to take advantage of
the config-set API which provides a cleaner control flow.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Matthieu Moy [Thu, 7 Aug 2014 17:13:37 +0000 (19:13 +0200)]
builtin/log.c: fix minor memory leak
Signed-off-by: Matthieu Moy <redacted>
Reviewed-by: Jonathan Nieder <redacted>
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Wed, 6 Aug 2014 20:09:05 +0000 (13:09 -0700)]
apply: omit ws check for excluded paths
Whitespace breakages are checked while the patch is being parsed.
Disable them at the beginning of parse_chunk(), where each
individual patch is parsed, immediately after we learn the name of
the file the patch applies to and before we start parsing the diff
contained in the patch.
One may naively think that we should be able to not just skip the
whitespace checks but simply fast-forward to the next patch without
doing anything once use_patch() tells us that this patch is not
going to be used. But in reality we cannot really skip much of the
parsing in order to do such a "fast-forward", primarily because
parsing "@@ -k,l +m,n @@" lines and counting the input lines is how
we determine the boundaries of individual patches.
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Wed, 6 Aug 2014 20:11:17 +0000 (13:11 -0700)]
apply: hoist use_patch() helper for path exclusion up
We will be adding a caller to the function a bit earlier in this
file in a later patch.
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Wed, 6 Aug 2014 21:26:24 +0000 (14:26 -0700)]
apply: use the right attribute for paths in non-Git patches
We parse each patchfile and find the name of the path the patch
applies to, and then use that name to consult the attribute system
to find the whitespace rules to be used, and also the target file
(either in the working tree or in the index) to replay the changes
against.
Unlike a Git-generated patch, a non-Git patch is taken to have the
pathnames relative to the current working directory. The names
found in such a patch are modified by prepending the prefix by the
prefix_patches() helper function introduced in
56185f49 (git-apply:
require -p<n> when working in a subdirectory., 2007-02-19).
However, this prefixing is done after the patch is fully parsed and
affects only what target files are patched. Because the attributes
are checked against the names found in the patch during the parsing,
not against the final pathname, the whitespace check that is done
during parsing ends up using attributes for a wrong path for non-Git
patches.
Fix this by doing the prefix much earlier, immediately after the
header part of each patch is parsed and we learn the name of the
path the patch affects.
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 11:59:19 +0000 (04:59 -0700)]
add tests for `git_config_get_string_const()`
Add tests for `git_config_get_string_const()`, check whether it
dies printing the line number and the file name if a NULL
value is retrieved for the given key.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 11:59:18 +0000 (04:59 -0700)]
add a test for semantic errors in config files
Semantic errors (for example, for alias.* variables NULL values are
not allowed) in configuration files cause a die printing the line
number and file name of the offending value.
Add a test documenting that such errors cause a die printing the
accurate line number and file name.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 11:59:17 +0000 (04:59 -0700)]
rewrite git_config() to use the config-set API
Of all the functions in `git_config*()` family, `git_config()` has the
most invocations in the whole code base. Each `git_config()` invocation
causes config file rereads which can be avoided using the config-set API.
Use the config-set API to rewrite `git_config()` to use the config caching
layer to avoid config file rereads on each invocation during a git process
lifetime. First invocation constructs the cache, and after that for each
successive invocation, `git_config()` feeds values from the config cache
instead of rereading the configuration files.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 11:59:16 +0000 (04:59 -0700)]
config: add `git_die_config()` to the config-set API
Add `git_die_config` that dies printing the line number and the file name
of the highest priority value for the configuration variable `key`. A custom
error message is also printed before dying, specified by the caller, which can
be skipped if `err` argument is set to NULL.
It has usage in non-callback based config value retrieval where we can
raise an error and die if there is a semantic error.
For example,
if (!git_config_get_value(key, &value)){
if (!strcmp(value, "foo"))
git_config_die(key, "value: `%s` is illegal", value);
else
/* do work */
}
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 11:59:15 +0000 (04:59 -0700)]
change `git_config()` return value to void
Currently `git_config()` returns an integer signifying an error code.
During rewrites of the function most of the code was shifted to
`git_config_with_options()`. `git_config_with_options()` normally
returns positive values if its `config_source` parameter is set as NULL,
as most errors are fatal, and non-fatal potential errors are guarded
by "if" statements that are entered only when no error is possible.
Still a negative value can be returned in case of race condition between
`access_or_die()` & `git_config_from_file()`. Also, all callers of
`git_config()` ignore the return value except for one case in branch.c.
Change `git_config()` return value to void and make it die if it receives
a negative value from `git_config_with_options()`.
Original-patch-by: Matthieu Moy <redacted>
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Thu, 7 Aug 2014 11:59:14 +0000 (04:59 -0700)]
add line number and file name info to `config_set`
Store file name and line number for each key-value pair in the cache
during parsing of the configuration files.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Matthieu Moy [Thu, 7 Aug 2014 11:59:13 +0000 (04:59 -0700)]
config.c: fix accuracy of line number in errors
If a callback returns a negative value to `git_config*()` family,
they call `die()` while printing the line number and the file name.
Currently the printed line number is off by one, thus printing the
wrong line number.
Make `linenr` point to the line we just parsed during the call
to callback to get accurate line number in error messages.
Commit-message-by: Tanay Abhra <redacted>
Signed-off-by: Tanay Abhra <redacted>
Signed-off-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Matthieu Moy [Thu, 7 Aug 2014 11:59:12 +0000 (04:59 -0700)]
config.c: mark error and warnings strings for translation
Signed-off-by: Matthieu Moy <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Thu, 7 Aug 2014 16:44:17 +0000 (09:44 -0700)]
Merge branch 'mb/relnotes-2.1'
* mb/relnotes-2.1:
Release notes: grammatical fixes
RelNotes: no more check_ref_format micro-optimization
Marc Branchaud [Tue, 5 Aug 2014 16:50:45 +0000 (12:50 -0400)]
Release notes: grammatical fixes
Signed-off-by: Marc Branchaud <redacted>
Signed-off-by: Junio C Hamano <redacted>
Stefan Beller [Thu, 7 Aug 2014 14:27:12 +0000 (16:27 +0200)]
various contrib: Fix links in man pages
Inspired by
2147fa7e (2014-07-31 git-push: fix link in man page),
I grepped through the whole tree searching for 'gitlink:' occurrences.
Signed-off-by: Stefan Beller <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jean-Noel Avila [Tue, 5 Aug 2014 17:23:50 +0000 (19:23 +0200)]
l10n: fr.po (2257t) update for version 2.1.0
Signed-off-by: Jean-Noel Avila <redacted>
brian m. carlson [Tue, 5 Aug 2014 02:56:50 +0000 (02:56 +0000)]
imap-send doc: omit confusing "to use imap-send" modifier
It wouldn't make sense for these configuration variables to be
required for Git in general to function. 'Required' in this context
means required for git imap-send to work.
Noticed while trying to figure out what the sentence describing
imap.tunnel meant.
[jn: expanded to also simplify explanation of imap.folder and
imap.host in the same way]
Signed-off-by: brian m. carlson <redacted>
Signed-off-by: Jonathan Nieder <redacted>
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Tue, 5 Aug 2014 18:44:23 +0000 (11:44 -0700)]
RelNotes: no more check_ref_format micro-optimization
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Mon, 4 Aug 2014 22:40:19 +0000 (15:40 -0700)]
config: teach "git -c" to recognize an empty string
In a config file, you can do:
[foo]
bar
to turn the "foo.bar" boolean flag on, and you can do:
[foo]
bar=
to set "foo.bar" to the empty string. However, git's "-c"
parameter treats both:
git -c foo.bar
and
git -c foo.bar=
as the boolean flag, and there is no way to set a variable
to the empty string. This patch enables the latter form to
do that.
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jiang Xin [Tue, 5 Aug 2014 15:07:22 +0000 (23:07 +0800)]
Merge remote-tracking branch 'l10n/vi/vnwildman/master'
* l10n/vi/vnwildman/master:
l10n: vi.po (2257t): Update translation
Jiang Xin [Tue, 5 Aug 2014 14:41:00 +0000 (22:41 +0800)]
Merge branch 'master' of github.com:alshopov/git-po
* 'master' of github.com:alshopov/git-po:
l10n: Updated Bulgarian translation of git (2257t,0f,0u)
Peter Krefting [Tue, 5 Aug 2014 12:49:51 +0000 (13:49 +0100)]
l10n: sv.po: Update Swedish translation (2257t0f0u)
Signed-off-by: Peter Krefting <redacted>
Tran Ngoc Quan [Tue, 5 Aug 2014 00:35:56 +0000 (07:35 +0700)]
l10n: vi.po (2257t): Update translation
Signed-off-by: Tran Ngoc Quan <redacted>
Junio C Hamano [Mon, 4 Aug 2014 21:05:06 +0000 (14:05 -0700)]
Git 2.1.0-rc1
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Mon, 4 Aug 2014 21:03:45 +0000 (14:03 -0700)]
Merge branch 'tf/maint-doc-push'
* tf/maint-doc-push:
git-push: fix link in man page
Junio C Hamano [Mon, 4 Aug 2014 21:03:25 +0000 (14:03 -0700)]
Merge branch 'ta/doc-config'
* ta/doc-config:
add documentation for writing config files
Tanay Abhra [Mon, 4 Aug 2014 14:41:15 +0000 (07:41 -0700)]
pretty.c: make git_pretty_formats_config return -1 on git_config_string failure
`git_pretty_formats_config()` continues without checking git_config_string's
return value which can lead to a SEGFAULT. Instead return -1 when
git_config_string fails signalling `git_config()` to die printing the location
of the erroneous variable.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
brian m. carlson [Sun, 3 Aug 2014 03:02:03 +0000 (03:02 +0000)]
archive: honor tar.umask even for pax headers
git archive's tar format uses extended pax headers to encode metadata
into the archive. Most tar implementations correctly treat these as
metadata, but some that do not understand the pax format extract these
as files instead. Apply the tar.umask setting to these entries to
prevent tampering by other users.
Signed-off-by: brian m. carlson <redacted>
Signed-off-by: Junio C Hamano <redacted>
Alexander Shopov [Sun, 3 Aug 2014 10:04:51 +0000 (13:04 +0300)]
l10n: Updated Bulgarian translation of git (2257t,0f,0u)
Sync with tags v2.1.0-rc1 and v2.0.4
Signed-off-by: Alexander Shopov <redacted>
Jiang Xin [Mon, 4 Aug 2014 08:23:15 +0000 (16:23 +0800)]
l10n: zh_CN: translations for git v2.1.0-rc0
Translate 37 new messages (2257t0f0u) for git v2.1.0-rc0.
Signed-off-by: Jiang Xin <redacted>
Jiang Xin [Mon, 4 Aug 2014 08:38:00 +0000 (16:38 +0800)]
Merge commit 'bg/alshopov/master'
* commit 'bg/alshopov/master':
l10n: Updated Bulgarian translation of git (2247t,0f,0u)
l10n: Updated Bulgarian translation of git (2228t,0f,0u)
Jiang Xin [Mon, 4 Aug 2014 08:33:18 +0000 (16:33 +0800)]
Merge remote-tracking branch 'sv/nafmo/master'
* sv/nafmo/master:
l10n: Fix more typos in the Swedish translations
Jiang Xin [Mon, 4 Aug 2014 06:51:24 +0000 (14:51 +0800)]
l10n: git.pot: v2.1.0 round 1 (38 new, 9 removed)
Generate po/git.pot from v2.1.0-rc0 for git v2.1.0 l10n round 1.
Signed-off-by: Jiang Xin <redacted>
Alexander Shopov [Sun, 3 Aug 2014 08:16:24 +0000 (11:16 +0300)]
l10n: Updated Bulgarian translation of git (2247t,0f,0u)
Used make po/git.pot from git-l10n/git-po/master
Signed-off-by: Alexander Shopov <redacted>
Alexander Shopov [Fri, 27 Jun 2014 12:04:51 +0000 (15:04 +0300)]
l10n: Updated Bulgarian translation of git (2228t,0f,0u)
Used po/git.pot from git-l10n/git-po/master
Signed-off-by: Alexander Shopov <redacted>
Tony Finch [Thu, 31 Jul 2014 08:14:30 +0000 (09:14 +0100)]
imap-send: clarify CRAM-MD5 vs LOGIN documentation
Explicitly mention that leaving imap.authMethod unset makes
git imap-send use the basic IMAP plaintext LOGIN command.
Signed-off-by: Tony Finch <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tony Finch [Thu, 31 Jul 2014 15:06:28 +0000 (16:06 +0100)]
git-push: fix link in man page
Signed-off-by: Tony Finch <redacted>
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Wed, 30 Jul 2014 21:25:46 +0000 (14:25 -0700)]
Sync with 2.0.4
* maint:
Git 2.0.4
commit --amend: test specifies authorship but forgets to check
Junio C Hamano [Wed, 30 Jul 2014 21:25:14 +0000 (14:25 -0700)]
Update draft release notes to 2.1
Signed-off-by: Junio C Hamano <redacted>
Junio C Hamano [Wed, 30 Jul 2014 21:21:13 +0000 (14:21 -0700)]
Merge branch 'jk/more-push-completion'
* jk/more-push-completion:
completion: complete `git push --force-with-lease=`
completion: add some missing options to `git push`
completion: complete "unstuck" `git push --recurse-submodules`
Junio C Hamano [Wed, 30 Jul 2014 21:21:12 +0000 (14:21 -0700)]
Merge branch 'sk/mingw-tests-workaround'
Make tests pass on msysgit by mostly disabling ones that are
infeasible on that platform.
* sk/mingw-tests-workaround:
t800[12]: work around MSys limitation
t9902: mingw-specific fix for gitfile link files
t4210: skip command-line encoding tests on mingw
MinGW: disable legacy encoding tests
t0110/MinGW: skip tests that pass arbitrary bytes on the command line
MinGW: Skip test redirecting to fd 4
Junio C Hamano [Wed, 30 Jul 2014 21:21:09 +0000 (14:21 -0700)]
Merge branch 'sk/mingw-uni-fix-more'
Most of these are battle-tested in msysgit and are needed to
complete what has been merged to 'master' already.
* sk/mingw-uni-fix-more:
Win32: enable color output in Windows cmd.exe
Win32: patch Windows environment on startup
Win32: keep the environment sorted
Win32: use low-level memory allocation during initialization
Win32: reduce environment array reallocations
Win32: don't copy the environment twice when spawning child processes
Win32: factor out environment block creation
Win32: unify environment function names
Win32: unify environment case-sensitivity
Win32: fix environment memory leaks
Win32: Unicode environment (incoming)
Win32: Unicode environment (outgoing)
Revert "Windows: teach getenv to do a case-sensitive search"
tests: do not pass iso8859-1 encoded parameter
Junio C Hamano [Wed, 30 Jul 2014 21:21:05 +0000 (14:21 -0700)]
Merge branch 'ep/avoid-test-a-o'
* ep/avoid-test-a-o:
t9814: fix misconversion from test $a -o $b to test $a || test $b
Junio C Hamano [Wed, 30 Jul 2014 21:19:53 +0000 (14:19 -0700)]
Git 2.0.4
Signed-off-by: Junio C Hamano <redacted>
Jeff King [Tue, 29 Jul 2014 17:56:48 +0000 (13:56 -0400)]
pretty: make empty userformats truly empty
If the user provides an empty format with "--format=", we
end up putting in extra whitespace that the user cannot
prevent. This comes from two places:
1. If the format is missing a terminating newline, we add
one automatically. This makes sense for --format=%h, but
not for a truly empty format.
2. We add an extra newline between the pretty-printed
format and a diff or diffstat. If the format is empty,
there's no point in doing so if there's nothing to
separate.
With this patch, one can get a diff with no other cruft out
of "diff-tree --format= $commit".
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff King [Tue, 29 Jul 2014 17:54:46 +0000 (13:54 -0400)]
pretty: treat "--format=" as an empty userformat
Until now, we treated "--pretty=" or "--format=" as "give me
the default format". This was not planned nor documented,
but only what happened to work due to our parsing of
"--pretty" (which should give the default format).
Let's instead let these be an actual empty userformat.
Otherwise one must write out the annoyingly long
"--pretty=tformat:" to get the same behavior.
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Jeff King [Tue, 29 Jul 2014 17:53:40 +0000 (13:53 -0400)]
revision: drop useless string offset when parsing "--pretty"
Once upon a time, we parsed pretty options by looking for
"--pretty" at the start of the string, and then feeding the
rest (including an "=") to get_commit_format. Later, commit
48ded91 (log --pretty: do not accept bogus "--prettyshort",
2008-05-25) split this into a separate check for "--pretty"
versus "--pretty=".
However, when parsing "--pretty", we still passed "arg+8" to
get_commit_format. This is useless, since it will always
point to the NUL terminator at the end of the string. We can
simply pass NULL instead; both parameters are treated the
same by get_commit_format.
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Mon, 28 Jul 2014 10:42:26 +0000 (03:42 -0700)]
add documentation for writing config files
Replace TODO introduced in commit 9c3c22 with documentation
explaining Git config API functions for writing configuration
files.
Signed-off-by: Tanay Abhra <redacted>
Reviewed-by: Matthieu Moy <redacted>
Signed-off-by: Junio C Hamano <redacted>
Fabian Ruch [Wed, 30 Jul 2014 09:45:11 +0000 (11:45 +0200)]
commit --amend: test specifies authorship but forgets to check
The test case "--amend option copies authorship" specifies that the
git-commit option `--amend` uses the authorship of the replaced
commit for the new commit. Add the omitted check that this property
actually holds.
Signed-off-by: Fabian Ruch <redacted>
Signed-off-by: Junio C Hamano <redacted>
Patrick Reynolds [Tue, 29 Jul 2014 14:43:39 +0000 (14:43 +0000)]
use a hashmap to make remotes faster
Remotes are stored as an array, so looking one up or adding one without
duplication is an O(n) operation. Reading an entire config file full of
remotes is O(n^2) in the number of remotes. For a repository with tens of
thousands of remotes, the running time can hit multiple minutes.
Hash tables are way faster. So we add a hashmap from remote name to
struct remote and use it for all lookups. The time to add a new remote to
a repo that already has 50,000 remotes drops from ~2 minutes to < 1
second.
We retain the old array of remotes so iterators proceed in config-file
order.
Signed-off-by: Patrick Reynolds <redacted>
Reviewed-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Mon, 28 Jul 2014 10:10:39 +0000 (03:10 -0700)]
test-config: add tests for the config_set API
Expose the `config_set` C API as a set of simple commands in order to
facilitate testing. Add tests for the `config_set` API as well as for
`git_config_get_*()` family for the usual config files.
Signed-off-by: Matthieu Moy <redacted>
Signed-off-by: Tanay Abhra <redacted>
Signed-off-by: Junio C Hamano <redacted>
Tanay Abhra [Mon, 28 Jul 2014 10:10:38 +0000 (03:10 -0700)]
add `config_set` API for caching config-like files
Currently `git_config()` uses a callback mechanism and file rereads for
config values. Due to this approach, it is not uncommon for the config
files to be parsed several times during the run of a git program, with
different callbacks picking out different variables useful to themselves.
Add a `config_set`, that can be used to construct an in-memory cache for
config-like files that the caller specifies (i.e., files like `.gitmodules`,
`~/.gitconfig` etc.). Add two external functions `git_configset_get_value`
and `git_configset_get_value_multi` for querying from the config sets.
`git_configset_get_value` follows `last one wins` semantic (i.e. if there
are multiple matches for the queried key in the files of the configset the
value returned will be the last entry in `value_list`).
`git_configset_get_value_multi` returns a list of values sorted in order of
increasing priority (i.e. last match will be at the end of the list). Add
type specific query functions like `git_configset_get_bool` and similar.
Add a default `config_set`, `the_config_set` to cache all key-value pairs
read from usual config files (repo specific .git/config, user wide
~/.gitconfig, XDG config and the global /etc/gitconfig). `the_config_set`
is populated using `git_config()`.
Add two external functions `git_config_get_value` and
`git_config_get_value_multi` for querying in a non-callback manner from
`the_config_set`. Also, add type specific query functions that are
implemented as a thin wrapper around the `config_set` API.
Signed-off-by: Matthieu Moy <redacted>
Signed-off-by: Tanay Abhra <redacted>
Signed-off-by: Junio C Hamano <redacted>
René Scharfe [Mon, 28 Jul 2014 18:42:05 +0000 (20:42 +0200)]
init: avoid superfluous real_path() calls
Feeding the result of a real_path() call to real_path() again doesn't
change that result -- the returned path won't get any more real. Avoid
such a double call in set_git_dir_init() and for the same reason stop
calling real_path() before feeding paths to set_git_work_tree(), as the
latter already takes care of that.
Signed-off-by: Rene Scharfe <redacted>
Signed-off-by: Junio C Hamano <redacted>