summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--Documentation/CodingGuidelines5
-rw-r--r--Documentation/RelNotes/2.4.11.txt11
-rw-r--r--Documentation/RelNotes/2.5.5.txt11
-rw-r--r--Documentation/RelNotes/2.6.6.txt11
-rw-r--r--Documentation/RelNotes/2.7.3.txt62
-rw-r--r--Documentation/RelNotes/2.7.4.txt11
-rw-r--r--Documentation/RelNotes/2.8.0.txt231
-rw-r--r--Documentation/config.txt14
-rw-r--r--Documentation/fetch-options.txt8
-rw-r--r--Documentation/git-config.txt16
-rw-r--r--Documentation/git-credential-cache.txt2
-rw-r--r--Documentation/git-for-each-ref.txt20
-rw-r--r--Documentation/git-ls-files.txt2
-rw-r--r--Documentation/git-p4.txt10
-rw-r--r--Documentation/git-push.txt14
-rw-r--r--Documentation/git-rebase.txt2
-rw-r--r--Documentation/git-svn.txt12
-rw-r--r--Documentation/git.txt19
-rw-r--r--Documentation/githooks.txt2
-rw-r--r--Documentation/merge-strategies.txt12
-rw-r--r--Documentation/technical/api-argv-array.txt7
-rw-r--r--Documentation/user-manual.txt2
-rwxr-xr-xGIT-VERSION-GEN2
-rw-r--r--Makefile18
-rw-r--r--alias.c2
-rw-r--r--archive.c4
-rw-r--r--argv-array.c11
-rw-r--r--argv-array.h1
-rw-r--r--attr.c6
-rw-r--r--bisect.c4
-rw-r--r--branch.c50
-rw-r--r--branch.h3
-rw-r--r--builtin/am.c2
-rw-r--r--builtin/apply.c2
-rw-r--r--builtin/blame.c7
-rw-r--r--builtin/branch.c5
-rw-r--r--builtin/check-ref-format.c2
-rw-r--r--builtin/checkout.c5
-rw-r--r--builtin/clean.c4
-rw-r--r--builtin/clone.c18
-rw-r--r--builtin/config.c64
-rw-r--r--builtin/fast-export.c2
-rw-r--r--builtin/fetch-pack.c27
-rw-r--r--builtin/fetch.c13
-rw-r--r--builtin/grep.c10
-rw-r--r--builtin/help.c9
-rw-r--r--builtin/index-pack.c9
-rw-r--r--builtin/init-db.c2
-rw-r--r--builtin/merge-base.c2
-rw-r--r--builtin/merge-tree.c2
-rw-r--r--builtin/merge.c2
-rw-r--r--builtin/mktree.c9
-rw-r--r--builtin/mv.c7
-rw-r--r--builtin/pack-objects.c22
-rw-r--r--builtin/pack-redundant.c2
-rw-r--r--builtin/push.c40
-rw-r--r--builtin/receive-pack.c19
-rw-r--r--builtin/reflog.c13
-rw-r--r--builtin/remote-ext.c26
-rw-r--r--builtin/remote.c93
-rw-r--r--builtin/rev-list.c12
-rw-r--r--builtin/rev-parse.c3
-rw-r--r--builtin/submodule--helper.c14
-rw-r--r--builtin/worktree.c17
-rw-r--r--cache-tree.c4
-rw-r--r--cache.h33
-rw-r--r--column.c5
-rw-r--r--combine-diff.c26
-rw-r--r--commit.c4
-rw-r--r--compat/mingw.c10
-rw-r--r--compat/mingw.h6
-rw-r--r--compat/precompose_utf8.c3
-rw-r--r--compat/qsort.c2
-rw-r--r--compat/setenv.c2
-rw-r--r--compat/win32/pthread.h2
-rw-r--r--compat/win32/syslog.c4
-rw-r--r--config.c92
-rw-r--r--config.mak.uname1
-rw-r--r--configure.ac7
-rw-r--r--connect.c12
-rw-r--r--connect.h2
-rw-r--r--convert.c190
-rw-r--r--credential-cache--daemon.c38
-rw-r--r--daemon.c12
-rw-r--r--diff.c28
-rw-r--r--diff.h20
-rw-r--r--diffcore-delta.c6
-rw-r--r--diffcore-order.c4
-rw-r--r--diffcore-rename.c2
-rw-r--r--dir.c37
-rw-r--r--entry.c2
-rw-r--r--ewah/bitmap.c20
-rw-r--r--ewah/ewah_bitmap.c10
-rw-r--r--ewah/ewah_io.c12
-rw-r--r--ewah/ewok.h10
-rw-r--r--exec_cmd.c34
-rw-r--r--exec_cmd.h4
-rw-r--r--fast-import.c12
-rw-r--r--fetch-pack.c6
-rw-r--r--fsck.c3
-rw-r--r--git-compat-util.h112
-rwxr-xr-xgit-merge-one-file.sh3
-rw-r--r--git-rebase--interactive.sh3
-rw-r--r--git-sh-setup.sh4
-rwxr-xr-xgit-submodule.sh29
-rwxr-xr-xgit-svn.perl14
-rw-r--r--git.c40
-rwxr-xr-xgitk-git/gitk8
-rw-r--r--gitk-git/po/bg.po656
-rw-r--r--gitk-git/po/de.po79
-rw-r--r--gitk-git/po/fr.po849
-rw-r--r--graph.c10
-rw-r--r--grep.c3
-rw-r--r--hashmap.c3
-rw-r--r--help.c6
-rw-r--r--http-push.c23
-rw-r--r--http.c44
-rw-r--r--http.h1
-rw-r--r--imap-send.c5
-rw-r--r--khash.h2
-rw-r--r--levenshtein.c8
-rw-r--r--line-log.c30
-rw-r--r--list-objects.c40
-rw-r--r--list-objects.h2
-rw-r--r--ll-merge.c2
-rw-r--r--log-tree.c5
-rw-r--r--merge-blobs.c38
-rw-r--r--merge-recursive.c14
-rw-r--r--merge-recursive.h1
-rw-r--r--name-hash.c3
-rw-r--r--notes.c2
-rw-r--r--pack-bitmap-write.c3
-rw-r--r--pack-bitmap.c13
-rw-r--r--pack-check.c2
-rw-r--r--pack-revindex.c12
-rw-r--r--pager.c19
-rw-r--r--path.c3
-rw-r--r--pathspec.c5
-rw-r--r--perl/Git/SVN/GlobSpec.pm18
-rw-r--r--po/TEAMS2
-rw-r--r--po/ca.po2946
-rw-r--r--po/de.po3141
-rw-r--r--po/fr.po3041
-rw-r--r--po/git.pot2881
-rw-r--r--po/ko.po3112
-rw-r--r--po/pt_PT.po12193
-rw-r--r--po/ru.po3022
-rw-r--r--po/sv.po3038
-rw-r--r--po/vi.po3039
-rw-r--r--po/zh_CN.po3011
-rw-r--r--progress.c2
-rw-r--r--reachable.c5
-rw-r--r--ref-filter.c464
-rw-r--r--refs.c10
-rw-r--r--refs.h12
-rw-r--r--refs/files-backend.c19
-rw-r--r--remote-curl.c55
-rw-r--r--remote.c95
-rw-r--r--remote.h3
-rw-r--r--revision.c66
-rw-r--r--revision.h11
-rw-r--r--run-command.c94
-rw-r--r--run-command.h10
-rw-r--r--sequencer.c29
-rw-r--r--setup.c11
-rw-r--r--sha1_file.c41
-rw-r--r--sha1_name.c9
-rw-r--r--shallow.c8
-rw-r--r--show-index.c3
-rw-r--r--strbuf.c2
-rw-r--r--submodule-config.c4
-rw-r--r--submodule.c23
-rw-r--r--t/lib-httpd/apache.conf3
-rwxr-xr-xt/t0001-init.sh20
-rwxr-xr-xt/t0027-auto-crlf.sh314
-rwxr-xr-xt/t1300-repo-config.sh166
-rwxr-xr-xt/t1308-config-set.sh15
-rwxr-xr-xt/t1501-work-tree.sh (renamed from t/t1501-worktree.sh)0
-rwxr-xr-xt/t1509-root-work-tree.sh (renamed from t/t1509-root-worktree.sh)0
-rwxr-xr-xt/t2019-checkout-ambiguous-ref.sh26
-rwxr-xr-xt/t2025-worktree-add.sh15
-rwxr-xr-xt/t2027-worktree-list.sh10
-rwxr-xr-xt/t3032-merge-recursive-space-options.sh (renamed from t/t3032-merge-recursive-options.sh)2
-rwxr-xr-xt/t3034-merge-recursive-rename-options.sh312
-rwxr-xr-xt/t3200-branch.sh16
-rwxr-xr-xt/t5313-pack-bounds-checks.sh179
-rwxr-xr-xt/t5504-fetch-receive-strict.sh5
-rwxr-xr-xt/t5505-remote.sh42
-rwxr-xr-xt/t5510-fetch.sh10
-rwxr-xr-xt/t6133-pathspec-rev-dwim.sh48
-rwxr-xr-xt/t6302-for-each-ref-filter.sh42
-rwxr-xr-xt/t7008-grep-binary.sh3
-rwxr-xr-xt/t7400-submodule-basic.sh38
-rwxr-xr-xt/t7409-submodule-detached-work-tree.sh (renamed from t/t7409-submodule-detached-worktree.sh)0
-rwxr-xr-xt/t8005-blame-i18n.sh28
-rwxr-xr-xt/t9108-git-svn-glob.sh9
-rwxr-xr-xt/t9109-git-svn-multi-glob.sh9
-rwxr-xr-xt/t9115-git-svn-dcommit-funky-renames.sh4
-rwxr-xr-xt/t9117-git-svn-init-clone.sh6
-rwxr-xr-xt/t9168-git-svn-partially-globbed-names.sh223
-rwxr-xr-xt/t9200-git-cvsexportcommit.sh2
-rwxr-xr-xt/t9700/test.pl8
-rw-r--r--t/test-lib-functions.sh2
-rwxr-xr-xtemplates/hooks--update.sample2
-rw-r--r--test-path-utils.c15
-rw-r--r--test-run-command.c1
-rw-r--r--trailer.c2
-rw-r--r--transport-helper.c15
-rw-r--r--transport.c21
-rw-r--r--transport.h8
-rw-r--r--tree-diff.c4
-rw-r--r--userdiff.h4
-rw-r--r--wrapper.c3
-rw-r--r--write_or_die.c4
-rw-r--r--wt-status.c4
-rw-r--r--xdiff-interface.c2
-rw-r--r--xdiff/xdiff.h1
-rw-r--r--xdiff/xemit.c18
-rw-r--r--xdiff/xmerge.c9
220 files changed, 28654 insertions, 17248 deletions
diff --git a/.travis.yml b/.travis.yml
index f8b73ec..78e433b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -21,12 +21,12 @@ addons:
env:
global:
+ - DEVELOPER=1
- P4_VERSION="15.2"
- GIT_LFS_VERSION="1.1.0"
- DEFAULT_TEST_TARGET=prove
- GIT_PROVE_OPTS="--timer --jobs 3 --state=failed,slow,save"
- GIT_TEST_OPTS="--verbose --tee"
- - CFLAGS="-g -O2 -Wall -Werror"
- GIT_TEST_CLONE_2GB=YesPlease
# t9810 occasionally fails on Travis CI OS X
# t9816 occasionally fails with "TAP out of sequence errors" on Travis CI OS X
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines
index c6e536f..0ddd368 100644
--- a/Documentation/CodingGuidelines
+++ b/Documentation/CodingGuidelines
@@ -171,6 +171,11 @@ For C programs:
- We try to keep to at most 80 characters per line.
+ - As a Git developer we assume you have a reasonably modern compiler
+ and we recommend you to enable the DEVELOPER makefile knob to
+ ensure your patch is clear of all compiler warnings we care about,
+ by e.g. "echo DEVELOPER=1 >>config.mak".
+
- We try to support a wide range of C compilers to compile Git with,
including old ones. That means that you should not use C99
initializers, even if a lot of compilers grok it.
diff --git a/Documentation/RelNotes/2.4.11.txt b/Documentation/RelNotes/2.4.11.txt
new file mode 100644
index 0000000..7233602
--- /dev/null
+++ b/Documentation/RelNotes/2.4.11.txt
@@ -0,0 +1,11 @@
+Git v2.4.11 Release Notes
+=========================
+
+Fixes since v2.4.10
+-------------------
+
+ * Bugfix patches were backported from the 'master' front to plug heap
+ corruption holes, to catch integer overflow in the computation of
+ pathname lengths, and to get rid of the name_path API. Both of
+ these would have resulted in writing over an under-allocated buffer
+ when formulating pathnames while tree traversal.
diff --git a/Documentation/RelNotes/2.5.5.txt b/Documentation/RelNotes/2.5.5.txt
new file mode 100644
index 0000000..37eae9a
--- /dev/null
+++ b/Documentation/RelNotes/2.5.5.txt
@@ -0,0 +1,11 @@
+Git v2.5.5 Release Notes
+========================
+
+Fixes since v2.5.4
+------------------
+
+ * Bugfix patches were backported from the 'master' front to plug heap
+ corruption holes, to catch integer overflow in the computation of
+ pathname lengths, and to get rid of the name_path API. Both of
+ these would have resulted in writing over an under-allocated buffer
+ when formulating pathnames while tree traversal.
diff --git a/Documentation/RelNotes/2.6.6.txt b/Documentation/RelNotes/2.6.6.txt
new file mode 100644
index 0000000..023ad85
--- /dev/null
+++ b/Documentation/RelNotes/2.6.6.txt
@@ -0,0 +1,11 @@
+Git v2.6.6 Release Notes
+========================
+
+Fixes since v2.6.5
+------------------
+
+ * Bugfix patches were backported from the 'master' front to plug heap
+ corruption holes, to catch integer overflow in the computation of
+ pathname lengths, and to get rid of the name_path API. Both of
+ these would have resulted in writing over an under-allocated buffer
+ when formulating pathnames while tree traversal.
diff --git a/Documentation/RelNotes/2.7.3.txt b/Documentation/RelNotes/2.7.3.txt
new file mode 100644
index 0000000..6adf038
--- /dev/null
+++ b/Documentation/RelNotes/2.7.3.txt
@@ -0,0 +1,62 @@
+Git v2.7.3 Release Notes
+========================
+
+Fixes since v2.7.2
+------------------
+
+ * Traditionally, the tests that try commands that work on the
+ contents in the working tree were named with "worktree" in their
+ filenames, but with the recent addition of "git worktree"
+ subcommand, whose tests are also named similarly, it has become
+ harder to tell them apart. The traditional tests have been renamed
+ to use "work-tree" instead in an attempt to differentiate them.
+
+ * Many codepaths forget to check return value from git_config_set();
+ the function is made to die() to make sure we do not proceed when
+ setting a configuration variable failed.
+
+ * Handling of errors while writing into our internal asynchronous
+ process has been made more robust, which reduces flakiness in our
+ tests.
+
+ * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
+ rev, i.e. the object named by the the pathname with wildcard
+ characters in a tree object.
+
+ * "git rev-parse --git-common-dir" used in the worktree feature
+ misbehaved when run from a subdirectory.
+
+ * The "v(iew)" subcommand of the interactive "git am -i" command was
+ broken in 2.6.0 timeframe when the command was rewritten in C.
+
+ * "git merge-tree" used to mishandle "both sides added" conflict with
+ its own "create a fake ancestor file that has the common parts of
+ what both sides have added and do a 3-way merge" logic; this has
+ been updated to use the usual "3-way merge with an empty blob as
+ the fake common ancestor file" approach used in the rest of the
+ system.
+
+ * The memory ownership rule of fill_textconv() API, which was a bit
+ tricky, has been documented a bit better.
+
+ * The documentation did not clearly state that the 'simple' mode is
+ now the default for "git push" when push.default configuration is
+ not set.
+
+ * Recent versions of GNU grep are pickier when their input contains
+ arbitrary binary data, which some of our tests uses. Rewrite the
+ tests to sidestep the problem.
+
+ * A helper function "git submodule" uses since v2.7.0 to list the
+ modules that match the pathspec argument given to its subcommands
+ (e.g. "submodule add <repo> <path>") has been fixed.
+
+ * "git config section.var value" to set a value in per-repository
+ configuration file failed when it was run outside any repository,
+ but didn't say the reason correctly.
+
+ * The code to read the pack data using the offsets stored in the pack
+ idx file has been made more carefully check the validity of the
+ data in the idx.
+
+Also includes documentation and test updates.
diff --git a/Documentation/RelNotes/2.7.4.txt b/Documentation/RelNotes/2.7.4.txt
new file mode 100644
index 0000000..883ae89
--- /dev/null
+++ b/Documentation/RelNotes/2.7.4.txt
@@ -0,0 +1,11 @@
+Git v2.7.4 Release Notes
+========================
+
+Fixes since v2.7.3
+------------------
+
+ * Bugfix patches were backported from the 'master' front to plug heap
+ corruption holes, to catch integer overflow in the computation of
+ pathname lengths, and to get rid of the name_path API. Both of
+ these would have resulted in writing over an under-allocated buffer
+ when formulating pathnames while tree traversal.
diff --git a/Documentation/RelNotes/2.8.0.txt b/Documentation/RelNotes/2.8.0.txt
index dd540d0..2507971 100644
--- a/Documentation/RelNotes/2.8.0.txt
+++ b/Documentation/RelNotes/2.8.0.txt
@@ -16,7 +16,9 @@ UI, Workflows & Features
the source repository has packed references for a long time, and
nobody noticed nor complained about it.
- * "branch --delete" has "branch -d" but "push --delete" does not.
+ * "push" learned that its "--delete" option can be shortened to
+ "-d", just like "branch --delete" and "branch -d" are the same
+ thing.
* "git blame" learned to produce the progress eye-candy when it takes
too much time before emitting the first line of the result.
@@ -32,7 +34,7 @@ UI, Workflows & Features
have a place to store the updated notes tree, iow, a ref).
* "git grep" by default does not fall back to its "--no-index"
- behaviour outside a directory under Git's control (otherwise the
+ behavior outside a directory under Git's control (otherwise the
user may by mistake end up running a huge recursive search); with a
new configuration (set in $HOME/.gitconfig--by definition this
cannot be set in the config file per project), this safety can be
@@ -53,7 +55,7 @@ UI, Workflows & Features
* Many commands that read files that are expected to contain text
that is generated (or can be edited) by the end user to control
- their behaviour (e.g. "git grep -f <filename>") have been updated
+ their behavior (e.g. "git grep -f <filename>") have been updated
to be more tolerant to lines that are terminated with CRLF (they
used to treat such a line to contain payload that ends with CR,
which is usually not what the users expect).
@@ -98,14 +100,53 @@ UI, Workflows & Features
variables, serving as a reminder for those who work on multiple
projects and do not want to put these in their $HOME/.gitconfig.
+ * "git fetch" and friends that make network connections can now be
+ told to only use ipv4 (or ipv6).
+
+ * Some authentication methods do not need username or password, but
+ libcurl needs some hint that it needs to perform authentication.
+ Supplying an empty username and password string is a valid way to
+ do so, but you can set the http.[<url>.]emptyAuth configuration
+ variable to achieve the same, if you find it cleaner.
+
+ * You can now set http.[<url>.]pinnedpubkey to specify the pinned
+ public key when building with recent enough versions of libcURL.
+
+ * The configuration system has been taught to phrase where it found a
+ bad configuration variable in a better way in its error messages.
+ "git config" learnt a new "--show-origin" option to indicate where
+ the values come from.
+
+ * The "credential-cache" daemon process used to run in whatever
+ directory it happened to start in, but this made umount(2)ing the
+ filesystem that houses the repository harder; now the process
+ chdir()s to the directory that house its own socket on startup.
+
+ * When "git submodule update" did not result in fetching the commit
+ object in the submodule that is referenced by the superproject, the
+ command learned to retry another fetch, specifically asking for
+ that commit that may not be connected to the refs it usually
+ fetches.
+
+ * "git merge-recursive" learned "--no-renames" option to disable its
+ rename detection logic.
+
+ * Across the transition at around Git version 2.0, the user used to
+ get a pretty loud warning when running "git push" without setting
+ push.default configuration variable. We no longer warn because the
+ transition was completed a long time ago.
+
+ * README has been renamed to README.md and its contents got tweaked
+ slightly to make it easier on the eyes.
+
Performance, Internal Implementation, Development Support etc.
* Add a framework to spawn a group of processes in parallel, and use
it to run "git fetch --recurse-submodules" in parallel.
- * A slight update to the Makefile to mark "phoney" targets
- as such correctly.
+ * A slight update to the Makefile to mark ".PHONY" targets as such
+ correctly.
* In-core storage of the reverse index for .pack files (which lets
you go from a pack offset to an object name) has been streamlined.
@@ -146,16 +187,72 @@ Performance, Internal Implementation, Development Support etc.
with expectations that are not satisfiable on Git for Windows.
* Some calls to strcpy(3) triggers a false warning from static
- analysers that are less intelligent than humans, and reducing the
+ analyzers that are less intelligent than humans, and reducing the
number of these false hits helps us notice real issues. A few
- calls to strcpy(3) in test-path-utils that are already safe has
- been rewritten to avoid false wanings.
+ calls to strcpy(3) in a couple of protrams that are already safe
+ has been rewritten to avoid false warnings.
+
+ * The "name_path" API was an attempt to reduce the need to construct
+ the full path out of a series of path components while walking a
+ tree hierarchy, but over time made less efficient because the path
+ needs to be flattened, e.g. to be compared with another path that
+ is already flat. The API has been removed and its users have been
+ rewritten to simplify the overall code complexity.
+
+ * Help those who debug http(s) part of the system.
+ (merge 0054045 sp/remote-curl-ssl-strerror later to maint).
+
+ * The internal API to interact with "remote.*" configuration
+ variables has been streamlined.
+
+ * The ref-filter's format-parsing code has been refactored, in
+ preparation for "branch --format" and friends.
+
+ * Traditionally, the tests that try commands that work on the
+ contents in the working tree were named with "worktree" in their
+ filenames, but with the recent addition of "git worktree"
+ subcommand, whose tests are also named similarly, it has become
+ harder to tell them apart. The traditional tests have been renamed
+ to use "work-tree" instead in an attempt to differentiate them.
+ (merge 5549029 mg/work-tree-tests later to maint).
+
+ * Many codepaths forget to check return value from git_config_set();
+ the function is made to die() to make sure we do not proceed when
+ setting a configuration variable failed.
+ (merge 3d18064 ps/config-error later to maint).
+
+ * Handling of errors while writing into our internal asynchronous
+ process has been made more robust, which reduces flakiness in our
+ tests.
+ (merge 43f3afc jk/epipe-in-async later to maint).
+
+ * There is a new DEVELOPER knob that enables many compiler warning
+ options in the Makefile.
+
+ * The way the test scripts configure the Apache web server has been
+ updated to work also for Apache 2.4 running on RedHat derived
+ distros.
+
+ * Out of maintenance gcc on OSX 10.6 fails to compile the code in
+ 'master'; work it around by using clang by default on the platform.
+
+ * The "name_path" API was an attempt to reduce the need to construct
+ the full path out of a series of path components while walking a
+ tree hierarchy, but over time made less efficient because the path
+ needs to be flattened, e.g. to be compared with another path that
+ is already flat, in many cases. The API has been removed and its
+ users have been rewritten to simplify the overall code complexity.
+ This incidentally also closes some heap-corruption holes.
+
+ * Recent versions of GNU grep is pickier than before to decide if a
+ file is "binary" and refuse to give line-oriented hits when we
+ expect it to, unless explicitly told with "-a" option. As our
+ scripted Porcelains use sane_grep wrapper for line-oriented data,
+ even when the line may contain non-ASCII payload we took from
+ end-user data, use "grep -a" to implement sane_grep wrapper when
+ using an implementation of "grep" that takes the "-a" option.
+
- * Some calls to strcpy(3) triggers a false warning from static
- analysers that are less intelligent than humans, and reducing the
- number of these false hits helps us notice real issues. A few
- calls to strcpy(3) in "git rerere" that are already safe has been
- rewritten to avoid false wanings.
Also contains various documentation updates and code clean-ups.
@@ -171,39 +268,31 @@ notes for details).
exporting GIT_WORK_TREE to point at the root of the working tree,
interfering when they tried to use a different working tree without
setting GIT_WORK_TREE environment themselves.
- (merge df1e6ea nd/stop-setenv-work-tree later to maint).
* The "exclude_list" structure has the usual "alloc, nr" pair of
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
to reset 'alloc' to 0 when it cleared 'nr' to discard the managed
array.
- (merge 2653a8c nd/dir-exclude-cleanup later to maint).
* Paths that have been told the index about with "add -N" are not
quite yet in the index, but a few commands behaved as if they
already are in a harmful way.
- (merge 4d55200 nd/ita-cleanup later to maint).
* "git send-email" was confused by escaped quotes stored in the alias
files saved by "mutt", which has been corrected.
- (merge 2c510f2 ew/send-email-mutt-alias-fix later to maint).
- * A few unportable C construct have been spotted by clang compiler
+ * A few non-portable C construct have been spotted by clang compiler
and have been fixed.
- (merge a0df2e5 jk/clang-pedantic later to maint).
* The documentation has been updated to hint the connection between
the '--signoff' option and DCO.
- (merge b2c150d dw/signoff-doc later to maint).
* "git reflog" incorrectly assumed that all objects that used to be
at the tip of a ref must be commits, which caused it to segfault.
- (merge aecad37 dk/reflog-walk-with-non-commit later to maint).
* The ignore mechanism saw a few regressions around untracked file
listing and sparse checkout selection areas in 2.7.0; the change
that is responsible for the regression has been reverted.
- (merge 8c72236 nd/exclusion-regression-fix later to maint).
* Some codepaths used fopen(3) when opening a fixed path in $GIT_DIR
(e.g. COMMIT_EDITMSG) that is meant to be left after the command is
@@ -211,7 +300,6 @@ notes for details).
be shared with core.sharedRepository and the umask of the previous
user is tighter. They have been made to work better by calling
unlink(2) and retrying after fopen(3) fails with EPERM.
- (merge ea56518 js/fopen-harder later to maint).
* Asking gitweb for a nonexistent commit left a warning in the server
log.
@@ -219,100 +307,133 @@ notes for details).
Somebody may want to follow this up with an additional test, perhaps?
IIRC, we do test that no Perl warnings are given to the server log,
so this should have been caught if our test coverage were good.
- (merge a9eb90a ho/gitweb-squelch-undef-warning later to maint).
* "git rebase", unlike all other callers of "gc --auto", did not
ignore the exit code from "gc --auto".
- (merge 8c24f5b jk/ok-to-fail-gc-auto-in-rebase later to maint).
* Many codepaths that run "gc --auto" before exiting kept packfiles
mapped and left the file descriptors to them open, which was not
friendly to systems that cannot remove files that are open. They
now close the packs before doing so.
- (merge d562102 js/close-packs-before-gc later to maint).
* A recent optimization to filter-branch in v2.7.0 introduced a
regression when --prune-empty filter is used, which has been
corrected.
- (merge 1dc413e jk/filter-branch-no-index later to maint).
* The description for SANITY prerequisite the test suite uses has
been clarified both in the comment and in the implementation.
- (merge 719c3da jk/sanity later to maint).
* "git tag" started listing a tag "foo" as "tags/foo" when a branch
named "foo" exists in the same repository; remove this unnecessary
disambiguation, which is a regression introduced in v2.7.0.
- (merge 0571979 jk/list-tag-2.7-regression later to maint).
* The way "git svn" uses auth parameter was broken by Subversion
1.9.0 and later.
- (merge 0b66415 ew/svn-1.9.0-auth later to maint).
* The "split" subcommand of "git subtree" (in contrib/) incorrectly
skipped merges when it shouldn't, which was corrected.
- (merge 933cfeb dw/subtree-split-do-not-drop-merge later to maint).
* A few options of "git diff" did not work well when the command was
run from a subdirectory.
- (merge a97262c nd/diff-with-path-params later to maint).
* The command line completion learned a handful of additional options
and command specific syntax.
- (merge fa4b5e3 jk/completion-rebase later to maint).
- (merge f7c2e1a pw/completion-show-branch later to maint).
- (merge d7d4ca8 pw/completion-stash later to maint).
- (merge e6414b4 tb/complete-word-diff-regex later to maint).
* dirname() emulation has been added, as Msys2 lacks it.
- (merge e7d5ce8 js/dirname-basename later to maint).
* The underlying machinery used by "ls-files -o" and other commands
- have been taught not to create empty submodule ref cache for a
+ has been taught not to create empty submodule ref cache for a
directory that is not a submodule. This removes a ton of wasted
CPU cycles.
- (merge a2d5156 jk/ref-cache-non-repository-optim later to maint).
* "git worktree" had a broken code that attempted to auto-fix
possible inconsistency that results from end-users moving a
worktree to different places without telling Git (the original
- repository needs to maintain backpointers to its worktrees, but
- "mv" run by end-users who are not familiar with that fact will
- obviously not adjust them), which actually made things worse
- when triggered.
- (merge 618244e nd/do-not-move-worktree-manually later to maint).
+ repository needs to maintain back-pointers to its worktrees,
+ but "mv" run by end-users who are not familiar with that fact
+ will obviously not adjust them), which actually made things
+ worse when triggered.
* The low-level merge machinery has been taught to use CRLF line
termination when inserting conflict markers to merged contents that
are themselves CRLF line-terminated.
- (merge 15980de js/xmerge-marker-eol later to maint).
* "git push --force-with-lease" has been taught to report if the push
needed to force (or fast-forwarded).
- (merge b2e93f8 aw/push-force-with-lease-reporting later to maint).
* The emulated "yes" command used in our test scripts has been
tweaked not to spend too much time generating unnecessary output
that is not used, to help those who test on Windows where it would
not stop until it fills the pipe buffer due to lack of SIGPIPE.
- (merge 6129c93 js/test-lib-windows-emulated-yes later to maint).
* The documentation for "git clean" has been corrected; it mentioned
that .git/modules/* are removed by giving two "-f", which has never
been the case.
- (merge 31e3c2d mm/clean-doc-fix later to maint).
* The vimdiff backend for "git mergetool" has been tweaked to arrange
and number buffers in the order that would match the expectation of
majority of people who read left to right, then top down and assign
buffers 1 2 3 4 "mentally" to local base remote merge windows based
on that order.
- (merge 2300328 dw/mergetool-vim-window-shuffle later to maint).
+
+ * "git show 'HEAD:Foo[BAR]Baz'" did not interpret the argument as a
+ rev, i.e. the object named by the the pathname with wildcard
+ characters in a tree object.
+ (merge aac4fac nd/dwim-wildcards-as-pathspecs later to maint).
+
+ * "git rev-parse --git-common-dir" used in the worktree feature
+ misbehaved when run from a subdirectory.
+ (merge 17f1365 nd/git-common-dir-fix later to maint).
+
+ * "git worktree add -B <branchname>" did not work.
+
+ * The "v(iew)" subcommand of the interactive "git am -i" command was
+ broken in 2.6.0 timeframe when the command was rewritten in C.
+ (merge 708b8cc jc/am-i-v-fix later to maint).
+
+ * "git merge-tree" used to mishandle "both sides added" conflict with
+ its own "create a fake ancestor file that has the common parts of
+ what both sides have added and do a 3-way merge" logic; this has
+ been updated to use the usual "3-way merge with an empty blob as
+ the fake common ancestor file" approach used in the rest of the
+ system.
+ (merge 907681e jk/no-diff-emit-common later to maint).
+
+ * The memory ownership rule of fill_textconv() API, which was a bit
+ tricky, has been documented a bit better.
+ (merge a64e6a4 jk/more-comments-on-textconv later to maint).
+
+ * Update various codepaths to avoid manually-counted malloc().
+ (merge 08c95df jk/tighten-alloc later to maint).
+
+ * The documentation did not clearly state that the 'simple' mode is
+ now the default for "git push" when push.default configuration is
+ not set.
+ (merge f6b1fb3 mm/push-simple-doc later to maint).
+
+ * Recent versions of GNU grep are pickier when their input contains
+ arbitrary binary data, which some of our tests uses. Rewrite the
+ tests to sidestep the problem.
+ (merge 3b1442d jk/grep-binary-workaround-in-test later to maint).
+
+ * A helper function "git submodule" uses since v2.7.0 to list the
+ modules that match the pathspec argument given to its subcommands
+ (e.g. "submodule add <repo> <path>") has been fixed.
+ (merge 2b56bb7 sb/submodule-module-list-fix later to maint).
+
+ * "git config section.var value" to set a value in per-repository
+ configuration file failed when it was run outside any repository,
+ but didn't say the reason correctly.
+ (merge 638fa62 js/config-set-in-non-repository later to maint).
+
+ * The code to read the pack data using the offsets stored in the pack
+ idx file has been made more carefully check the validity of the
+ data in the idx.
+ (merge 7465feb jk/pack-idx-corruption-safety later to maint).
* Other minor clean-ups and documentation updates
- (merge 99487cf ss/user-manual later to maint).
- (merge e914ef0 ew/for-each-ref-doc later to maint).
- (merge 36fc7d8 sg/t6050-failing-editor-test-fix later to maint).
- (merge 60253a6 ss/clone-depth-single-doc later to maint).
- (merge bd02e97 lv/add-doc-working-tree later to maint).
- (merge f562d7d ah/stripspace-optstring later to maint).
+ (merge f459823 ak/extract-argv0-last-dir-sep later to maint).
+ (merge 63ca1c0 ak/git-strip-extension-from-dashed-command later to maint).
+ (merge 4867f11 ps/plug-xdl-merge-leak later to maint).
+ (merge 4938686 dt/initial-ref-xn-commit-doc later to maint).
+ (merge 9537f21 ma/update-hooks-sample-typofix later to maint).
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 01cca0a..2cd6bdd 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1648,6 +1648,12 @@ http.proxyAuthMethod::
* `ntlm` - NTLM authentication (compare the --ntlm option of `curl(1)`)
--
+http.emptyAuth::
+ Attempt authentication without seeking a username or password. This
+ can be used to attempt GSS-Negotiate authentication without specifying
+ a username in the URL, as libcurl normally requires a username for
+ authentication.
+
http.cookieFile::
File containing previously stored cookie lines which should be used
in the Git http session, if they match the server. The file format
@@ -1727,6 +1733,14 @@ http.sslCAPath::
with when fetching or pushing over HTTPS. Can be overridden
by the 'GIT_SSL_CAPATH' environment variable.
+http.pinnedpubkey::
+ Public key of the https service. It may either be the filename of
+ a PEM or DER encoded public key file or a string starting with
+ 'sha256//' followed by the base64 encoded sha256 hash of the
+ public key. See also libcurl 'CURLOPT_PINNEDPUBLICKEY'. git will
+ exit with an error if this option is set but not supported by
+ cURL.
+
http.sslTry::
Attempt to use AUTH SSL/TLS and encrypted data transfers
when connecting via regular FTP protocol. This might be needed
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt
index 952dfdf..036edfb 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.txt
@@ -158,3 +158,11 @@ endif::git-pull[]
by default when it is attached to a terminal, unless -q
is specified. This flag forces progress status even if the
standard error stream is not directed to a terminal.
+
+-4::
+--ipv4::
+ Use IPv4 addresses only, ignoring IPv6 addresses.
+
+-6::
+--ipv6::
+ Use IPv6 addresses only, ignoring IPv4 addresses.
diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt
index 242fa5d..153b2d8 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.txt
@@ -9,18 +9,18 @@ git-config - Get and set repository or global options
SYNOPSIS
--------
[verse]
-'git config' [<file-option>] [type] [-z|--null] name [value [value_regex]]
+'git config' [<file-option>] [type] [--show-origin] [-z|--null] name [value [value_regex]]
'git config' [<file-option>] [type] --add name value
'git config' [<file-option>] [type] --replace-all name value [value_regex]
-'git config' [<file-option>] [type] [-z|--null] --get name [value_regex]
-'git config' [<file-option>] [type] [-z|--null] --get-all name [value_regex]
-'git config' [<file-option>] [type] [-z|--null] [--name-only] --get-regexp name_regex [value_regex]
+'git config' [<file-option>] [type] [--show-origin] [-z|--null] --get name [value_regex]
+'git config' [<file-option>] [type] [--show-origin] [-z|--null] --get-all name [value_regex]
+'git config' [<file-option>] [type] [--show-origin] [-z|--null] [--name-only] --get-regexp name_regex [value_regex]
'git config' [<file-option>] [type] [-z|--null] --get-urlmatch name URL
'git config' [<file-option>] --unset name [value_regex]
'git config' [<file-option>] --unset-all name [value_regex]
'git config' [<file-option>] --rename-section old_name new_name
'git config' [<file-option>] --remove-section name
-'git config' [<file-option>] [-z|--null] [--name-only] -l | --list
+'git config' [<file-option>] [--show-origin] [-z|--null] [--name-only] -l | --list
'git config' [<file-option>] --get-color name [default]
'git config' [<file-option>] --get-colorbool name [stdout-is-tty]
'git config' [<file-option>] -e | --edit
@@ -194,6 +194,12 @@ See also <<FILES>>.
Output only the names of config variables for `--list` or
`--get-regexp`.
+--show-origin::
+ Augment the output of all queried config options with the
+ origin type (file, standard input, blob, command line) and
+ the actual origin (config file path, ref, or blob id if
+ applicable).
+
--get-colorbool name [stdout-is-tty]::
Find the color setting for `name` (e.g. `color.diff`) and output
diff --git a/Documentation/git-credential-cache.txt b/Documentation/git-credential-cache.txt
index 89b7306..96208f8 100644
--- a/Documentation/git-credential-cache.txt
+++ b/Documentation/git-credential-cache.txt
@@ -36,7 +36,7 @@ OPTIONS
cache daemon if one is not started). Defaults to
`~/.git-credential-cache/socket`. If your home directory is on a
network-mounted filesystem, you may need to change this to a
- local filesystem.
+ local filesystem. You must specify an absolute path.
CONTROLLING THE DAEMON
----------------------
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt
index 2e3e96f..012e8f9 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.txt
@@ -133,14 +133,18 @@ color::
align::
Left-, middle-, or right-align the content between
- %(align:...) and %(end). The "align:" is followed by `<width>`
- and `<position>` in any order separated by a comma, where the
- `<position>` is either left, right or middle, default being
- left and `<width>` is the total length of the content with
- alignment. If the contents length is more than the width then
- no alignment is performed. If used with '--quote' everything
- in between %(align:...) and %(end) is quoted, but if nested
- then only the topmost level performs quoting.
+ %(align:...) and %(end). The "align:" is followed by
+ `width=<width>` and `position=<position>` in any order
+ separated by a comma, where the `<position>` is either left,
+ right or middle, default being left and `<width>` is the total
+ length of the content with alignment. For brevity, the
+ "width=" and/or "position=" prefixes may be omitted, and bare
+ <width> and <position> used instead. For instance,
+ `%(align:<width>,<position>)`. If the contents length is more
+ than the width then no alignment is performed. If used with
+ '--quote' everything in between %(align:...) and %(end) is
+ quoted, but if nested then only the topmost level performs
+ quoting.
In addition to the above, for commit and tag objects, the header
field names (`tree`, `parent`, `object`, `type`, and `tag`) can
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt
index 0e08f56..75c3f41 100644
--- a/Documentation/git-ls-files.txt
+++ b/Documentation/git-ls-files.txt
@@ -155,7 +155,7 @@ a space) at the start of each line:
<eolinfo> is either "-text", "none", "lf", "crlf", "mixed" or "".
+
"" means the file is not a regular file, it is not in the index or
-not accessable in the working tree.
+not accessible in the working tree.
+
<eolattr> is the attribute that is used when checking out or committing,
it is either "", "-text", "text", "text=auto", "text eol=lf", "text eol=crlf".
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt
index 738cfde..35e3170 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.txt
@@ -515,20 +515,18 @@ git-p4.pathEncoding::
Git expects paths encoded as UTF-8. Use this config to tell git-p4
what encoding Perforce had used for the paths. This encoding is used
to transcode the paths to UTF-8. As an example, Perforce on Windows
- often uses “cp1252” to encode path names.
+ often uses "cp1252" to encode path names.
git-p4.largeFileSystem::
Specify the system that is used for large (binary) files. Please note
that large file systems do not support the 'git p4 submit' command.
- Only Git LFS [1] is implemented right now. Download
- and install the Git LFS command line extension to use this option
- and configure it like this:
+ Only Git LFS is implemented right now (see https://git-lfs.github.com/
+ for more information). Download and install the Git LFS command line
+ extension to use this option and configure it like this:
+
-------------
git config git-p4.largeFileSystem GitLFS
-------------
-+
- [1] https://git-lfs.github.com/
git-p4.largeFileExtensions::
All files matching a file extension in the list will be processed
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index 32482ce..cf6ee4a 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -37,6 +37,13 @@ the default `<refspec>` by consulting `remote.*.push` configuration,
and if it is not found, honors `push.default` configuration to decide
what to push (See linkgit:git-config[1] for the meaning of `push.default`).
+When neither the command-line nor the configuration specify what to
+push, the default behavior is used, which corresponds to the `simple`
+value for `push.default`: the current branch is pushed to the
+corresponding upstream branch, but as a safety measure, the push is
+aborted if the upstream branch does not have the same name as the
+local one.
+
OPTIONS[[OPTIONS]]
------------------
@@ -277,6 +284,13 @@ origin +master` to force a push to the `master` branch). See the
default is --verify, giving the hook a chance to prevent the
push. With --no-verify, the hook is bypassed completely.
+-4::
+--ipv4::
+ Use IPv4 addresses only, ignoring IPv6 addresses.
+
+-6::
+--ipv6::
+ Use IPv6 addresses only, ignoring IPv4 addresses.
include::urls-remotes.txt[]
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index 6cca8bb..6ed610a 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -3,7 +3,7 @@ git-rebase(1)
NAME
----
-git-rebase - Forward-port local commits to the updated upstream head
+git-rebase - Reapply commits on top of another base tip
SYNOPSIS
--------
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 0c0f60b..fb23a98 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -1034,6 +1034,8 @@ listed below are allowed:
url = http://server.org/svn
fetch = trunk/project-a:refs/remotes/project-a/trunk
branches = branches/*/project-a:refs/remotes/project-a/branches/*
+ branches = branches/release_*:refs/remotes/project-a/branches/release_*
+ branches = branches/re*se:refs/remotes/project-a/branches/*
tags = tags/*/project-a:refs/remotes/project-a/tags/*
------------------------------------------------------------------------
@@ -1044,6 +1046,16 @@ independent path component (surrounded by '/' or EOL). This
type of configuration is not automatically created by 'init' and
should be manually entered with a text-editor or using 'git config'.
+Also note that only one asterisk is allowed per word. For example:
+
+ branches = branches/re*se:refs/remotes/project-a/branches/*
+
+will match branches 'release', 'rese', 're123se', however
+
+ branches = branches/re*s*e:refs/remotes/project-a/branches/*
+
+will produce an error.
+
It is also possible to fetch a subset of branches or tags by using a
comma-separated list of names within braces. For example:
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 9dffb4c..adc940b 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
@@ -43,16 +43,23 @@ 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.7.2/git.html[documentation for release 2.7.2]
+* link:v2.8.0/git.html[documentation for release 2.8]
* release notes for
+ link:RelNotes/2.8.0.txt[2.8].
+
+* link:v2.7.3/git.html[documentation for release 2.7.3]
+
+* release notes for
+ link:RelNotes/2.7.3.txt[2.7.3],
link:RelNotes/2.7.2.txt[2.7.2],
link:RelNotes/2.7.1.txt[2.7.1],
link:RelNotes/2.7.0.txt[2.7].
-* link:v2.6.5/git.html[documentation for release 2.6.5]
+* link:v2.6.6/git.html[documentation for release 2.6.6]
* release notes for
+ link:RelNotes/2.6.6.txt[2.6.6],
link:RelNotes/2.6.5.txt[2.6.5],
link:RelNotes/2.6.4.txt[2.6.4],
link:RelNotes/2.6.3.txt[2.6.3],
@@ -60,18 +67,20 @@ Documentation for older releases are available here:
link:RelNotes/2.6.1.txt[2.6.1],
link:RelNotes/2.6.0.txt[2.6].
-* link:v2.5.4/git.html[documentation for release 2.5.4]
+* link:v2.5.5/git.html[documentation for release 2.5.5]
* release notes for
+ link:RelNotes/2.5.5.txt[2.5.5],
link:RelNotes/2.5.4.txt[2.5.4],
link:RelNotes/2.5.3.txt[2.5.3],
link:RelNotes/2.5.2.txt[2.5.2],
link:RelNotes/2.5.1.txt[2.5.1],
link:RelNotes/2.5.0.txt[2.5].
-* link:v2.4.10/git.html[documentation for release 2.4.10]
+* link:v2.4.11/git.html[documentation for release 2.4.11]
* release notes for
+ link:RelNotes/2.4.11.txt[2.4.11],
link:RelNotes/2.4.10.txt[2.4.10],
link:RelNotes/2.4.9.txt[2.4.9],
link:RelNotes/2.4.8.txt[2.4.8],
@@ -1123,7 +1132,7 @@ of clones and fetches.
connection (or proxy, if configured)
- `ssh`: git over ssh (including `host:path` syntax,
- `git+ssh://`, etc).
+ `ssh://`, etc).
- `http`: git over http, both "smart http" and "dumb http".
Note that this does _not_ include `https`; if you want both,
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index 7ba0ac9..a2f59b1 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -397,7 +397,7 @@ preceding SP is also omitted. Currently, no commands pass any
'extra-info'.
The hook always runs after the automatic note copying (see
-"notes.rewrite.<command>" in linkgit:git-config.txt[1]) has happened, and
+"notes.rewrite.<command>" in linkgit:git-config[1]) has happened, and
thus has access to these notes.
The following command-specific comments apply:
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.txt
index 7bbd19b..2eb92b9 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.txt
@@ -81,9 +81,17 @@ no-renormalize;;
Disables the `renormalize` option. This overrides the
`merge.renormalize` configuration variable.
+no-renames;;
+ Turn off rename detection.
+ See also linkgit:git-diff[1] `--no-renames`.
+
+find-renames[=<n>];;
+ Turn on rename detection, optionally setting the similarity
+ threshold. This is the default.
+ See also linkgit:git-diff[1] `--find-renames`.
+
rename-threshold=<n>;;
- Controls the similarity threshold used for rename detection.
- See also linkgit:git-diff[1] `-M`.
+ Deprecated synonym for `find-renames=<n>`.
subtree[=<path>];;
This option is a more advanced form of 'subtree' strategy, where
diff --git a/Documentation/technical/api-argv-array.txt b/Documentation/technical/api-argv-array.txt
index 8076172..cfc0630 100644
--- a/Documentation/technical/api-argv-array.txt
+++ b/Documentation/technical/api-argv-array.txt
@@ -56,3 +56,10 @@ Functions
`argv_array_clear`::
Free all memory associated with the array and return it to the
initial, empty state.
+
+`argv_array_detach`::
+ Disconnect the `argv` member from the `argv_array` struct and
+ return it. The caller is responsible for freeing the memory used
+ by the array, and by the strings it references. After detaching,
+ the `argv_array` is in a reinitialized state and can be pushed
+ into again.
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index ec6bacf..5e07454 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -2134,7 +2134,7 @@ browsing the repository using gitweb. The default server when using
instaweb is lighttpd.
See the file gitweb/INSTALL in the Git source tree and
-linkgit:gitweb[1] for instructions on details setting up a permament
+linkgit:gitweb[1] for instructions on details setting up a permanent
installation with a CGI or Perl capable server.
[[how-to-get-a-git-repository-with-minimal-history]]
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 5873f16..4e9450b 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.7.0.GIT
+DEF_VER=v2.8.0
LF='
'
diff --git a/Makefile b/Makefile
index 10566d6..2742a69 100644
--- a/Makefile
+++ b/Makefile
@@ -264,6 +264,9 @@ all::
#
# Define NO_TCLTK if you do not want Tcl/Tk GUI.
#
+# Define SANE_TEXT_GREP to "-a" if you use recent versions of GNU grep
+# and egrep that are pickier when their input contains non-ASCII data.
+#
# The TCL_PATH variable governs the location of the Tcl interpreter
# used to optimize git-gui for your system. Only used if NO_TCLTK
# is not set. Defaults to the bare 'tclsh'.
@@ -380,6 +383,18 @@ ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS)
ALL_LDFLAGS = $(LDFLAGS)
STRIP ?= strip
+ifdef DEVELOPER
+CFLAGS += -Werror \
+ -Wdeclaration-after-statement \
+ -Wno-format-zero-length \
+ -Wold-style-definition \
+ -Woverflow \
+ -Wpointer-arith \
+ -Wstrict-prototypes \
+ -Wunused \
+ -Wvla
+endif
+
# Create as necessary, replace existing, make ranlib unneeded.
ARFLAGS = rcs
@@ -1728,7 +1743,7 @@ common-cmds.h: $(wildcard Documentation/git-*.txt)
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):$(GIT_VERSION):\
$(localedir_SQ):$(NO_CURL):$(USE_GETTEXT_SCHEME):$(SANE_TOOL_PATH_SQ):\
- $(gitwebdir_SQ):$(PERL_PATH_SQ)
+ $(gitwebdir_SQ):$(PERL_PATH_SQ):$(SANE_TEXT_GREP)
define cmd_munge_script
$(RM) $@ $@+ && \
sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
@@ -1740,6 +1755,7 @@ sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
-e $(BROKEN_PATH_FIX) \
-e 's|@@GITWEBDIR@@|$(gitwebdir_SQ)|g' \
-e 's|@@PERL@@|$(PERL_PATH_SQ)|g' \
+ -e 's|@@SANE_TEXT_GREP@@|$(SANE_TEXT_GREP)|g' \
$@.sh >$@+
endef
diff --git a/alias.c b/alias.c
index a11229d..3b90397 100644
--- a/alias.c
+++ b/alias.c
@@ -23,7 +23,7 @@ int split_cmdline(char *cmdline, const char ***argv)
int src, dst, count = 0, size = 16;
char quoted = 0;
- *argv = xmalloc(sizeof(**argv) * size);
+ ALLOC_ARRAY(*argv, size);
/* split alias_string */
(*argv)[count++] = cmdline;
diff --git a/archive.c b/archive.c
index 0687afa..5d735ae 100644
--- a/archive.c
+++ b/archive.c
@@ -171,8 +171,8 @@ static void queue_directory(const unsigned char *sha1,
unsigned mode, int stage, struct archiver_context *c)
{
struct directory *d;
- size_t len = base->len + 1 + strlen(filename) + 1;
- d = xmalloc(sizeof(*d) + len);
+ size_t len = st_add4(base->len, 1, strlen(filename), 1);
+ d = xmalloc(st_add(sizeof(*d), len));
d->up = c->bottom;
d->baselen = base->len;
d->mode = mode;
diff --git a/argv-array.c b/argv-array.c
index eaed477..5d370fa 100644
--- a/argv-array.c
+++ b/argv-array.c
@@ -74,3 +74,14 @@ void argv_array_clear(struct argv_array *array)
}
argv_array_init(array);
}
+
+const char **argv_array_detach(struct argv_array *array)
+{
+ if (array->argv == empty_argv)
+ return xcalloc(1, sizeof(const char *));
+ else {
+ const char **ret = array->argv;
+ argv_array_init(array);
+ return ret;
+ }
+}
diff --git a/argv-array.h b/argv-array.h
index a2fa0aa..29056e4 100644
--- a/argv-array.h
+++ b/argv-array.h
@@ -20,5 +20,6 @@ void argv_array_pushl(struct argv_array *, ...);
void argv_array_pushv(struct argv_array *, const char **);
void argv_array_pop(struct argv_array *);
void argv_array_clear(struct argv_array *);
+const char **argv_array_detach(struct argv_array *);
#endif /* ARGV_ARRAY_H */
diff --git a/attr.c b/attr.c
index 086c08d..6537a43 100644
--- a/attr.c
+++ b/attr.c
@@ -93,9 +93,7 @@ static struct git_attr *git_attr_internal(const char *name, int len)
if (invalid_attr_name(name, len))
return NULL;
- a = xmalloc(sizeof(*a) + len + 1);
- memcpy(a->name, name, len);
- a->name[len] = 0;
+ FLEX_ALLOC_MEM(a, name, name, len);
a->h = hval;
a->next = git_attr_hash[pos];
a->attr_nr = attr_nr++;
@@ -799,7 +797,7 @@ int git_all_attrs(const char *path, int *num, struct git_attr_check **check)
++count;
}
*num = count;
- *check = xmalloc(sizeof(**check) * count);
+ ALLOC_ARRAY(*check, count);
j = 0;
for (i = 0; i < attr_nr; i++) {
const char *value = check_all_attr[i].value;
diff --git a/bisect.c b/bisect.c
index 06ec54e..7996c29 100644
--- a/bisect.c
+++ b/bisect.c
@@ -708,10 +708,10 @@ static struct commit *get_commit_reference(const unsigned char *sha1)
static struct commit **get_bad_and_good_commits(int *rev_nr)
{
- int len = 1 + good_revs.nr;
- struct commit **rev = xmalloc(len * sizeof(*rev));
+ struct commit **rev;
int i, n = 0;
+ ALLOC_ARRAY(rev, 1 + good_revs.nr);
rev[n++] = get_commit_reference(current_bad_oid->hash);
for (i = 0; i < good_revs.nr; i++)
rev[n++] = get_commit_reference(good_revs.sha1[i]);
diff --git a/branch.c b/branch.c
index 7ff3f20..c50ea42 100644
--- a/branch.c
+++ b/branch.c
@@ -49,7 +49,13 @@ static int should_setup_rebase(const char *origin)
return 0;
}
-void install_branch_config(int flag, const char *local, const char *origin, const char *remote)
+static const char tracking_advice[] =
+N_("\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\".");
+
+int install_branch_config(int flag, const char *local, const char *origin, const char *remote)
{
const char *shortname = NULL;
struct strbuf key = STRBUF_INIT;
@@ -60,20 +66,23 @@ void install_branch_config(int flag, const char *local, const char *origin, cons
&& !origin) {
warning(_("Not setting branch %s as its own upstream."),
local);
- return;
+ return 0;
}
strbuf_addf(&key, "branch.%s.remote", local);
- git_config_set(key.buf, origin ? origin : ".");
+ if (git_config_set_gently(key.buf, origin ? origin : ".") < 0)
+ goto out_err;
strbuf_reset(&key);
strbuf_addf(&key, "branch.%s.merge", local);
- git_config_set(key.buf, remote);
+ if (git_config_set_gently(key.buf, remote) < 0)
+ goto out_err;
if (rebasing) {
strbuf_reset(&key);
strbuf_addf(&key, "branch.%s.rebase", local);
- git_config_set(key.buf, "true");
+ if (git_config_set_gently(key.buf, "true") < 0)
+ goto out_err;
}
strbuf_release(&key);
@@ -102,6 +111,19 @@ void install_branch_config(int flag, const char *local, const char *origin, cons
local, remote);
}
}
+
+ return 0;
+
+out_err:
+ strbuf_release(&key);
+ error(_("Unable to write upstream branch configuration"));
+
+ advise(_(tracking_advice),
+ origin ? origin : "",
+ origin ? "/" : "",
+ shortname ? shortname : remote);
+
+ return -1;
}
/*
@@ -109,8 +131,8 @@ void install_branch_config(int flag, const char *local, const char *origin, cons
* to infer the settings for branch.<new_ref>.{remote,merge} from the
* config.
*/
-static int setup_tracking(const char *new_ref, const char *orig_ref,
- enum branch_track track, int quiet)
+static void setup_tracking(const char *new_ref, const char *orig_ref,
+ enum branch_track track, int quiet)
{
struct tracking tracking;
int config_flags = quiet ? 0 : BRANCH_CONFIG_VERBOSE;
@@ -118,7 +140,7 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
memset(&tracking, 0, sizeof(tracking));
tracking.spec.dst = (char *)orig_ref;
if (for_each_remote(find_tracked_branch, &tracking))
- return 1;
+ return;
if (!tracking.matches)
switch (track) {
@@ -127,18 +149,18 @@ static int setup_tracking(const char *new_ref, const char *orig_ref,
case BRANCH_TRACK_OVERRIDE:
break;
default:
- return 1;
+ return;
}
if (tracking.matches > 1)
- return error(_("Not tracking: ambiguous information for ref %s"),
- orig_ref);
+ die(_("Not tracking: ambiguous information for ref %s"),
+ orig_ref);
- install_branch_config(config_flags, new_ref, tracking.remote,
- tracking.src ? tracking.src : orig_ref);
+ if (install_branch_config(config_flags, new_ref, tracking.remote,
+ tracking.src ? tracking.src : orig_ref) < 0)
+ exit(-1);
free(tracking.src);
- return 0;
}
int read_branch_desc(struct strbuf *buf, const char *branch_name)
diff --git a/branch.h b/branch.h
index 58aa45f..78ad438 100644
--- a/branch.h
+++ b/branch.h
@@ -43,9 +43,10 @@ void remove_branch_state(void);
/*
* Configure local branch "local" as downstream to branch "remote"
* from remote "origin". Used by git branch --set-upstream.
+ * Returns 0 on success.
*/
#define BRANCH_CONFIG_VERBOSE 01
-extern void install_branch_config(int flag, const char *local, const char *origin, const char *remote);
+extern int install_branch_config(int flag, const char *local, const char *origin, const char *remote);
/*
* Read branch description
diff --git a/builtin/am.c b/builtin/am.c
index 259dc1c..d003939 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1806,7 +1806,7 @@ static int do_interactive(struct am_state *state)
if (!pager)
pager = "cat";
- argv_array_push(&cp.args, pager);
+ prepare_pager_args(&cp, pager);
argv_array_push(&cp.args, am_path(state, "patch"));
run_command(&cp);
}
diff --git a/builtin/apply.c b/builtin/apply.c
index d61ac65..42c610e 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -2632,7 +2632,7 @@ static void update_image(struct image *img,
insert_count = postimage->len;
/* Adjust the contents */
- result = xmalloc(img->len + insert_count - remove_count + 1);
+ result = xmalloc(st_add3(st_sub(img->len, remove_count), insert_count, 1));
memcpy(result, img->buf, applied_at);
memcpy(result + applied_at, postimage->buf, postimage->len);
memcpy(result + applied_at + postimage->len,
diff --git a/builtin/blame.c b/builtin/blame.c
index 55bf5fa..e982fb8 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -466,13 +466,11 @@ static void queue_blames(struct scoreboard *sb, struct origin *porigin,
static struct origin *make_origin(struct commit *commit, const char *path)
{
struct origin *o;
- size_t pathlen = strlen(path) + 1;
- o = xcalloc(1, sizeof(*o) + pathlen);
+ FLEX_ALLOC_STR(o, path, path);
o->commit = commit;
o->refcnt = 1;
o->next = commit->util;
commit->util = o;
- memcpy(o->path, path, pathlen); /* includes NUL */
return o;
}
@@ -2059,7 +2057,8 @@ static int prepare_lines(struct scoreboard *sb)
for (p = buf; p < end; p = get_next_line(p, end))
num++;
- sb->lineno = lineno = xmalloc(sizeof(*sb->lineno) * (num + 1));
+ ALLOC_ARRAY(sb->lineno, num + 1);
+ lineno = sb->lineno;
for (p = buf; p < end; p = get_next_line(p, end))
*lineno++ = p - buf;
diff --git a/builtin/branch.c b/builtin/branch.c
index 3f6c825..7b45b6b 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -570,7 +570,6 @@ static const char edit_description[] = "BRANCH_DESCRIPTION";
static int edit_branch_description(const char *branch_name)
{
- int status;
struct strbuf buf = STRBUF_INIT;
struct strbuf name = STRBUF_INIT;
@@ -595,11 +594,11 @@ static int edit_branch_description(const char *branch_name)
strbuf_stripspace(&buf, 1);
strbuf_addf(&name, "branch.%s.description", branch_name);
- status = git_config_set(name.buf, buf.len ? buf.buf : NULL);
+ git_config_set(name.buf, buf.len ? buf.buf : NULL);
strbuf_release(&name);
strbuf_release(&buf);
- return status;
+ return 0;
}
int cmd_branch(int argc, const char **argv, const char *prefix)
diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c
index fd915d5..eac4994 100644
--- a/builtin/check-ref-format.c
+++ b/builtin/check-ref-format.c
@@ -20,7 +20,7 @@ static const char builtin_check_ref_format_usage[] =
*/
static char *collapse_slashes(const char *refname)
{
- char *ret = xmalloc(strlen(refname) + 1);
+ char *ret = xmallocz(strlen(refname));
char ch;
char prev = '/';
char *cp = ret;
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 5af84a3..efcbd8f 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -662,7 +662,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
}
} else if (new->path) { /* Switch branches. */
if (create_symref("HEAD", new->path, msg.buf) < 0)
- die("unable to update HEAD");
+ die(_("unable to update HEAD"));
if (!opts->quiet) {
if (old->path && !strcmp(new->path, old->path)) {
if (opts->new_branch_force)
@@ -982,7 +982,8 @@ static int parse_branchname_arg(int argc, const char **argv,
*/
int recover_with_dwim = dwim_new_local_branch_ok;
- if (check_filename(NULL, arg) && !has_dash_dash)
+ if (!has_dash_dash &&
+ (check_filename(NULL, arg) || !no_wildcard(arg)))
recover_with_dwim = 0;
/*
* Accept "git checkout foo" and "git checkout foo --"
diff --git a/builtin/clean.c b/builtin/clean.c
index 7b08237..0371010 100644
--- a/builtin/clean.c
+++ b/builtin/clean.c
@@ -543,7 +543,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
int eof = 0;
int i;
- chosen = xmalloc(sizeof(int) * stuff->nr);
+ ALLOC_ARRAY(chosen, stuff->nr);
/* set chosen as uninitialized */
for (i = 0; i < stuff->nr; i++)
chosen[i] = -1;
@@ -615,7 +615,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
nr += chosen[i];
}
- result = xcalloc(nr + 1, sizeof(int));
+ result = xcalloc(st_add(nr, 1), sizeof(int));
for (i = 0; i < stuff->nr && j < nr; i++) {
if (chosen[i])
result[j++] = i;
diff --git a/builtin/clone.c b/builtin/clone.c
index bcba080..6616392 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -47,6 +47,7 @@ static const char *real_git_dir;
static char *option_upload_pack = "git-upload-pack";
static int option_verbosity;
static int option_progress = -1;
+static enum transport_family family;
static struct string_list option_config;
static struct string_list option_reference;
static int option_dissociate;
@@ -92,6 +93,10 @@ static struct option builtin_clone_options[] = {
N_("separate git dir from working tree")),
OPT_STRING_LIST('c', "config", &option_config, N_("key=value"),
N_("set config inside the new repository")),
+ OPT_SET_INT('4', "ipv4", &family, N_("use IPv4 addresses only"),
+ TRANSPORT_FAMILY_IPV4),
+ OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"),
+ TRANSPORT_FAMILY_IPV6),
OPT_END()
};
@@ -231,8 +236,8 @@ static char *guess_dir_name(const char *repo, int is_bundle, int is_bare)
strip_suffix_mem(start, &len, is_bundle ? ".bundle" : ".git");
if (!len || (len == 1 && *start == '/'))
- die("No directory name could be guessed.\n"
- "Please specify a directory on the command line");
+ die(_("No directory name could be guessed.\n"
+ "Please specify a directory on the command line"));
if (is_bare)
dir = xstrfmt("%.*s.git", (int)len, start);
@@ -639,7 +644,7 @@ static void update_remote_refs(const struct ref *refs,
if (create_symref(head_ref.buf,
remote_head_points_at->peer_ref->name,
msg) < 0)
- die("unable to update %s", head_ref.buf);
+ die(_("unable to update %s"), head_ref.buf);
strbuf_release(&head_ref);
}
}
@@ -651,7 +656,7 @@ static void update_head(const struct ref *our, const struct ref *remote,
if (our && skip_prefix(our->name, "refs/heads/", &head)) {
/* Local default branch link */
if (create_symref("HEAD", our->name, NULL) < 0)
- die("unable to update HEAD");
+ die(_("unable to update HEAD"));
if (!option_bare) {
update_ref(msg, "HEAD", our->old_oid.hash, NULL, 0,
UPDATE_REFS_DIE_ON_ERR);
@@ -735,7 +740,7 @@ static int checkout(void)
static int write_one_config(const char *key, const char *value, void *data)
{
- return git_config_set_multivar(key, value ? value : "true", "^$", 0);
+ return git_config_set_multivar_gently(key, value ? value : "true", "^$", 0);
}
static void write_config(struct string_list *config)
@@ -745,7 +750,7 @@ static void write_config(struct string_list *config)
for (i = 0; i < config->nr; i++) {
if (git_config_parse_parameter(config->items[i].string,
write_one_config, NULL) < 0)
- die("unable to write parameters to config file");
+ die(_("unable to write parameters to config file"));
}
}
@@ -970,6 +975,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
remote = remote_get(option_origin);
transport = transport_get(remote, remote->url[0]);
transport_set_verbosity(transport, option_verbosity, option_progress);
+ transport->family = family;
path = get_repo_path(remote->url[0], &is_bundle);
is_local = option_local != 0 && path && !is_bundle;
diff --git a/builtin/config.c b/builtin/config.c
index adc7727..ca9f834 100644
--- a/builtin/config.c
+++ b/builtin/config.c
@@ -3,6 +3,7 @@
#include "color.h"
#include "parse-options.h"
#include "urlmatch.h"
+#include "quote.h"
static const char *const builtin_config_usage[] = {
N_("git config [<options>]"),
@@ -27,6 +28,7 @@ static int actions, types;
static const char *get_color_slot, *get_colorbool_slot;
static int end_null;
static int respect_includes = -1;
+static int show_origin;
#define ACTION_GET (1<<0)
#define ACTION_GET_ALL (1<<1)
@@ -81,6 +83,7 @@ static struct option builtin_config_options[] = {
OPT_BOOL('z', "null", &end_null, N_("terminate values with NUL byte")),
OPT_BOOL(0, "name-only", &omit_values, N_("show variable names only")),
OPT_BOOL(0, "includes", &respect_includes, N_("respect include directives on lookup")),
+ OPT_BOOL(0, "show-origin", &show_origin, N_("show origin of config (file, standard input, blob, command line)")),
OPT_END(),
};
@@ -91,8 +94,28 @@ static void check_argc(int argc, int min, int max) {
usage_with_options(builtin_config_usage, builtin_config_options);
}
+static void show_config_origin(struct strbuf *buf)
+{
+ const char term = end_null ? '\0' : '\t';
+
+ strbuf_addstr(buf, current_config_origin_type());
+ strbuf_addch(buf, ':');
+ if (end_null)
+ strbuf_addstr(buf, current_config_name());
+ else
+ quote_c_style(current_config_name(), buf, NULL, 0);
+ strbuf_addch(buf, term);
+}
+
static int show_all_config(const char *key_, const char *value_, void *cb)
{
+ if (show_origin) {
+ struct strbuf buf = STRBUF_INIT;
+ show_config_origin(&buf);
+ /* Use fwrite as "buf" can contain \0's if "end_null" is set. */
+ fwrite(buf.buf, 1, buf.len, stdout);
+ strbuf_release(&buf);
+ }
if (!omit_values && value_)
printf("%s%c%s%c", key_, delim, value_, term);
else
@@ -108,6 +131,8 @@ struct strbuf_list {
static int format_config(struct strbuf *buf, const char *key_, const char *value_)
{
+ if (show_origin)
+ show_config_origin(buf);
if (show_keys)
strbuf_addstr(buf, key_);
if (!omit_values) {
@@ -352,6 +377,9 @@ static int get_colorbool(const char *var, int print)
static void check_write(void)
{
+ if (!given_config_source.file && !startup_info->have_repository)
+ die("not in a git directory");
+
if (given_config_source.use_stdin)
die("writing to stdin is not supported");
@@ -538,6 +566,14 @@ int cmd_config(int argc, const char **argv, const char *prefix)
error("--name-only is only applicable to --list or --get-regexp");
usage_with_options(builtin_config_usage, builtin_config_options);
}
+
+ if (show_origin && !(actions &
+ (ACTION_GET|ACTION_GET_ALL|ACTION_GET_REGEXP|ACTION_LIST))) {
+ error("--show-origin is only applicable to --get, --get-all, "
+ "--get-regexp, and --list.");
+ usage_with_options(builtin_config_usage, builtin_config_options);
+ }
+
if (actions == ACTION_LIST) {
check_argc(argc, 0, 0);
if (git_config_with_options(show_all_config, NULL,
@@ -582,7 +618,7 @@ int cmd_config(int argc, const char **argv, const char *prefix)
check_write();
check_argc(argc, 2, 2);
value = normalize_value(argv[0], argv[1]);
- ret = git_config_set_in_file(given_config_source.file, argv[0], value);
+ ret = git_config_set_in_file_gently(given_config_source.file, argv[0], value);
if (ret == CONFIG_NOTHING_SET)
error("cannot overwrite multiple values with a single value\n"
" Use a regexp, --add or --replace-all to change %s.", argv[0]);
@@ -592,23 +628,23 @@ int cmd_config(int argc, const char **argv, const char *prefix)
check_write();
check_argc(argc, 2, 3);
value = normalize_value(argv[0], argv[1]);
- return git_config_set_multivar_in_file(given_config_source.file,
- argv[0], value, argv[2], 0);
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], value, argv[2], 0);
}
else if (actions == ACTION_ADD) {
check_write();
check_argc(argc, 2, 2);
value = normalize_value(argv[0], argv[1]);
- return git_config_set_multivar_in_file(given_config_source.file,
- argv[0], value,
- CONFIG_REGEX_NONE, 0);
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], value,
+ CONFIG_REGEX_NONE, 0);
}
else if (actions == ACTION_REPLACE_ALL) {
check_write();
check_argc(argc, 2, 3);
value = normalize_value(argv[0], argv[1]);
- return git_config_set_multivar_in_file(given_config_source.file,
- argv[0], value, argv[2], 1);
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], value, argv[2], 1);
}
else if (actions == ACTION_GET) {
check_argc(argc, 1, 2);
@@ -634,17 +670,17 @@ int cmd_config(int argc, const char **argv, const char *prefix)
check_write();
check_argc(argc, 1, 2);
if (argc == 2)
- return git_config_set_multivar_in_file(given_config_source.file,
- argv[0], NULL, argv[1], 0);
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], NULL, argv[1], 0);
else
- return git_config_set_in_file(given_config_source.file,
- argv[0], NULL);
+ return git_config_set_in_file_gently(given_config_source.file,
+ argv[0], NULL);
}
else if (actions == ACTION_UNSET_ALL) {
check_write();
check_argc(argc, 1, 2);
- return git_config_set_multivar_in_file(given_config_source.file,
- argv[0], NULL, argv[1], 1);
+ return git_config_set_multivar_in_file_gently(given_config_source.file,
+ argv[0], NULL, argv[1], 1);
}
else if (actions == ACTION_RENAME_SECTION) {
int ret;
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 2471297..8164b58 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -1021,7 +1021,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
const char **refspecs_str;
int i;
- refspecs_str = xmalloc(sizeof(*refspecs_str) * refspecs_list.nr);
+ ALLOC_ARRAY(refspecs_str, refspecs_list.nr);
for (i = 0; i < refspecs_list.nr; i++)
refspecs_str[i] = refspecs_list.items[i].string;
diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c
index 9b2a514..79a611f 100644
--- a/builtin/fetch-pack.c
+++ b/builtin/fetch-pack.c
@@ -10,33 +10,24 @@ static const char fetch_pack_usage[] =
"[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
"[--no-progress] [--diag-url] [-v] [<host>:]<directory> [<refs>...]";
-static void add_sought_entry_mem(struct ref ***sought, int *nr, int *alloc,
- const char *name, int namelen)
+static void add_sought_entry(struct ref ***sought, int *nr, int *alloc,
+ const char *name)
{
- struct ref *ref = xcalloc(1, sizeof(*ref) + namelen + 1);
+ struct ref *ref;
struct object_id oid;
- const int chunksz = GIT_SHA1_HEXSZ + 1;
- if (namelen > chunksz && name[chunksz - 1] == ' ' &&
- !get_oid_hex(name, &oid)) {
- oidcpy(&ref->old_oid, &oid);
- name += chunksz;
- namelen -= chunksz;
- }
+ if (!get_oid_hex(name, &oid) && name[GIT_SHA1_HEXSZ] == ' ')
+ name += GIT_SHA1_HEXSZ + 1;
+ else
+ oidclr(&oid);
- memcpy(ref->name, name, namelen);
- ref->name[namelen] = '\0';
+ ref = alloc_ref(name);
+ oidcpy(&ref->old_oid, &oid);
(*nr)++;
ALLOC_GROW(*sought, *nr, *alloc);
(*sought)[*nr - 1] = ref;
}
-static void add_sought_entry(struct ref ***sought, int *nr, int *alloc,
- const char *string)
-{
- add_sought_entry_mem(sought, nr, alloc, string, strlen(string));
-}
-
int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
{
int i, ret;
diff --git a/builtin/fetch.c b/builtin/fetch.c
index 8e74213..e4639d8 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -38,6 +38,7 @@ static int all, append, dry_run, force, keep, multiple, update_head_ok, verbosit
static int progress = -1, recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
static int tags = TAGS_DEFAULT, unshallow, update_shallow;
static int max_children = 1;
+static enum transport_family family;
static const char *depth;
static const char *upload_pack;
static struct strbuf default_rla = STRBUF_INIT;
@@ -127,6 +128,10 @@ static struct option builtin_fetch_options[] = {
N_("accept refs that update .git/shallow")),
{ OPTION_CALLBACK, 0, "refmap", NULL, N_("refmap"),
N_("specify fetch refmap"), PARSE_OPT_NONEG, parse_refmap_arg },
+ OPT_SET_INT('4', "ipv4", &family, N_("use IPv4 addresses only"),
+ TRANSPORT_FAMILY_IPV4),
+ OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"),
+ TRANSPORT_FAMILY_IPV6),
OPT_END()
};
@@ -864,6 +869,7 @@ static struct transport *prepare_transport(struct remote *remote)
struct transport *transport;
transport = transport_get(remote, NULL);
transport_set_verbosity(transport, verbosity, progress);
+ transport->family = family;
if (upload_pack)
set_option(transport, TRANS_OPT_UPLOADPACK, upload_pack);
if (keep)
@@ -1016,10 +1022,9 @@ static int add_remote_or_group(const char *name, struct string_list *list)
git_config(get_remote_group, &g);
if (list->nr == prev_nr) {
- struct remote *remote;
- if (!remote_is_configured(name))
+ struct remote *remote = remote_get(name);
+ if (!remote_is_configured(remote))
return 0;
- remote = remote_get(name);
string_list_append(list, remote->name);
}
return 1;
@@ -1110,7 +1115,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
if (argc > 0) {
int j = 0;
int i;
- refs = xcalloc(argc + 1, sizeof(const char *));
+ refs = xcalloc(st_add(argc, 1), sizeof(const char *));
for (i = 0; i < argc; i++) {
if (!strcmp(argv[i], "tag")) {
i++;
diff --git a/builtin/grep.c b/builtin/grep.c
index 8c516a9..aa7435f 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -365,17 +365,17 @@ static void append_path(struct grep_opt *opt, const void *data, size_t len)
static void run_pager(struct grep_opt *opt, const char *prefix)
{
struct string_list *path_list = opt->output_priv;
- const char **argv = xmalloc(sizeof(const char *) * (path_list->nr + 1));
+ struct child_process child = CHILD_PROCESS_INIT;
int i, status;
for (i = 0; i < path_list->nr; i++)
- argv[i] = path_list->items[i].string;
- argv[path_list->nr] = NULL;
+ argv_array_push(&child.args, path_list->items[i].string);
+ child.dir = prefix;
+ child.use_shell = 1;
- status = run_command_v_opt_cd_env(argv, RUN_USING_SHELL, prefix, NULL);
+ status = run_command(&child);
if (status)
exit(status);
- free(argv);
}
static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int cached)
diff --git a/builtin/help.c b/builtin/help.c
index 1cd0c1e..3c55ce4 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -171,12 +171,10 @@ static void exec_man_cmd(const char *cmd, const char *page)
static void add_man_viewer(const char *name)
{
struct man_viewer_list **p = &man_viewer_list;
- size_t len = strlen(name);
while (*p)
p = &((*p)->next);
- *p = xcalloc(1, (sizeof(**p) + len + 1));
- memcpy((*p)->name, name, len); /* NUL-terminated by xcalloc */
+ FLEX_ALLOC_STR(*p, name, name);
}
static int supported_man_viewer(const char *name, size_t len)
@@ -190,9 +188,8 @@ static void do_add_man_viewer_info(const char *name,
size_t len,
const char *value)
{
- struct man_viewer_info_list *new = xcalloc(1, sizeof(*new) + len + 1);
-
- memcpy(new->name, name, len); /* NUL-terminated by xcalloc */
+ struct man_viewer_info_list *new;
+ FLEX_ALLOC_MEM(new, name, name, len);
new->info = xstrdup(value);
new->next = man_viewer_info_list;
man_viewer_info_list = new;
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 6a01509..4524519 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -1346,7 +1346,7 @@ static void fix_unresolved_deltas(struct sha1file *f)
* before deltas depending on them, a good heuristic is to start
* resolving deltas in the same order as their position in the pack.
*/
- sorted_by_pos = xmalloc(nr_ref_deltas * sizeof(*sorted_by_pos));
+ ALLOC_ARRAY(sorted_by_pos, nr_ref_deltas);
for (i = 0; i < nr_ref_deltas; i++)
sorted_by_pos[i] = &ref_deltas[i];
qsort(sorted_by_pos, nr_ref_deltas, sizeof(*sorted_by_pos), delta_pos_compare);
@@ -1514,6 +1514,7 @@ static void read_v2_anomalous_offsets(struct packed_git *p,
if (!(off & 0x80000000))
continue;
off = off & 0x7fffffff;
+ check_pack_index_ptr(p, &idx2[off * 2]);
if (idx2[off * 2])
continue;
/*
@@ -1744,9 +1745,9 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
curr_pack = open_pack_file(pack_name);
parse_pack_header();
- objects = xcalloc(nr_objects + 1, sizeof(struct object_entry));
+ objects = xcalloc(st_add(nr_objects, 1), sizeof(struct object_entry));
if (show_stat)
- obj_stat = xcalloc(nr_objects + 1, sizeof(struct object_stat));
+ obj_stat = xcalloc(st_add(nr_objects, 1), sizeof(struct object_stat));
ofs_deltas = xcalloc(nr_objects, sizeof(struct ofs_delta_entry));
parse_pack_objects(pack_sha1);
resolve_deltas();
@@ -1759,7 +1760,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
if (show_stat)
show_pack_info(stat_only);
- idx_objects = xmalloc((nr_objects) * sizeof(struct pack_idx_entry *));
+ ALLOC_ARRAY(idx_objects, nr_objects);
for (i = 0; i < nr_objects; i++)
idx_objects[i] = &objects[i].idx;
curr_index = write_idx_file(index_name, idx_objects, nr_objects, &opts, pack_sha1);
diff --git a/builtin/init-db.c b/builtin/init-db.c
index 07229d6..6223b7d 100644
--- a/builtin/init-db.c
+++ b/builtin/init-db.c
@@ -250,7 +250,7 @@ static int create_default_files(const char *template_path)
git_config_set("core.bare", "false");
/* allow template config file to override the default */
if (log_all_ref_updates == -1)
- git_config_set("core.logallrefupdates", "true");
+ git_config_set("core.logallrefupdates", "true");
if (needs_work_tree_config(get_git_dir(), work_tree))
git_config_set("core.worktree", work_tree);
}
diff --git a/builtin/merge-base.c b/builtin/merge-base.c
index a891162..c0d1822 100644
--- a/builtin/merge-base.c
+++ b/builtin/merge-base.c
@@ -252,7 +252,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
if (argc < 2)
usage_with_options(merge_base_usage, options);
- rev = xmalloc(argc * sizeof(*rev));
+ ALLOC_ARRAY(rev, argc);
while (argc-- > 0)
rev[rev_nr++] = get_commit_reference(*argv++);
return show_merge_base(rev, rev_nr, show_all);
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
index d4f0cbd..ca57004 100644
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -174,7 +174,7 @@ static struct merge_list *create_entry(unsigned stage, unsigned mode, const unsi
static char *traverse_path(const struct traverse_info *info, const struct name_entry *n)
{
- char *path = xmalloc(traverse_path_len(info, n) + 1);
+ char *path = xmallocz(traverse_path_len(info, n));
return make_traverse_path(path, info, n);
}
diff --git a/builtin/merge.c b/builtin/merge.c
index b98a348..101ffef 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -939,7 +939,7 @@ static int setup_with_upstream(const char ***argv)
if (!branch->merge_nr)
die(_("No default upstream defined for the current branch."));
- args = xcalloc(branch->merge_nr + 1, sizeof(char *));
+ args = xcalloc(st_add(branch->merge_nr, 1), sizeof(char *));
for (i = 0; i < branch->merge_nr; i++) {
if (!branch->merge[i]->dst)
die(_("No remote-tracking branch for %s from %s"),
diff --git a/builtin/mktree.c b/builtin/mktree.c
index a237caa..4282b62 100644
--- a/builtin/mktree.c
+++ b/builtin/mktree.c
@@ -19,16 +19,17 @@ static int alloc, used;
static void append_to_tree(unsigned mode, unsigned char *sha1, char *path)
{
struct treeent *ent;
- int len = strlen(path);
+ size_t len = strlen(path);
if (strchr(path, '/'))
die("path %s contains slash", path);
- ALLOC_GROW(entries, used + 1, alloc);
- ent = entries[used++] = xmalloc(sizeof(**entries) + len + 1);
+ FLEX_ALLOC_MEM(ent, name, path, len);
ent->mode = mode;
ent->len = len;
hashcpy(ent->sha1, sha1);
- memcpy(ent->name, path, len+1);
+
+ ALLOC_GROW(entries, used + 1, alloc);
+ entries[used++] = ent;
}
static int ent_compare(const void *a_, const void *b_)
diff --git a/builtin/mv.c b/builtin/mv.c
index d1d4316..aeae855 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -24,7 +24,8 @@ static const char **internal_copy_pathspec(const char *prefix,
int count, unsigned flags)
{
int i;
- const char **result = xmalloc((count + 1) * sizeof(const char *));
+ const char **result;
+ ALLOC_ARRAY(result, count + 1);
memcpy(result, pathspec, count * sizeof(const char *));
result[count] = NULL;
for (i = 0; i < count; i++) {
@@ -47,9 +48,9 @@ static const char **internal_copy_pathspec(const char *prefix,
static const char *add_slash(const char *path)
{
- int len = strlen(path);
+ size_t len = strlen(path);
if (path[len - 1] != '/') {
- char *with_slash = xmalloc(len + 2);
+ char *with_slash = xmalloc(st_add(len, 2));
memcpy(with_slash, path, len);
with_slash[len++] = '/';
with_slash[len] = 0;
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 4dae5b1..a27de5b 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -624,7 +624,7 @@ static struct object_entry **compute_write_order(void)
{
unsigned int i, wo_end, last_untagged;
- struct object_entry **wo = xmalloc(to_pack.nr_objects * sizeof(*wo));
+ struct object_entry **wo;
struct object_entry *objects = to_pack.objects;
for (i = 0; i < to_pack.nr_objects; i++) {
@@ -657,6 +657,7 @@ static struct object_entry **compute_write_order(void)
* Give the objects in the original recency order until
* we see a tagged tip.
*/
+ ALLOC_ARRAY(wo, to_pack.nr_objects);
for (i = wo_end = 0; i < to_pack.nr_objects; i++) {
if (objects[i].tagged)
break;
@@ -769,7 +770,7 @@ static void write_pack_file(void)
if (progress > pack_to_stdout)
progress_state = start_progress(_("Writing objects"), nr_result);
- written_list = xmalloc(to_pack.nr_objects * sizeof(*written_list));
+ ALLOC_ARRAY(written_list, to_pack.nr_objects);
write_order = compute_write_order();
do {
@@ -2129,7 +2130,7 @@ static void prepare_pack(int window, int depth)
if (!to_pack.nr_objects || !window || !depth)
return;
- delta_list = xmalloc(to_pack.nr_objects * sizeof(*delta_list));
+ ALLOC_ARRAY(delta_list, to_pack.nr_objects);
nr_deltas = n = 0;
for (i = 0; i < to_pack.nr_objects; i++) {
@@ -2284,21 +2285,11 @@ static void show_commit(struct commit *commit, void *data)
index_commit_for_bitmap(commit);
}
-static void show_object(struct object *obj,
- const struct name_path *path, const char *last,
- void *data)
+static void show_object(struct object *obj, const char *name, void *data)
{
- char *name = path_name(path, last);
-
add_preferred_base_object(name);
add_object_entry(obj->oid.hash, obj->type, name, 0);
obj->flags |= OBJECT_ADDED;
-
- /*
- * We will have generated the hash from the name,
- * but not saved a pointer to it - we can free it
- */
- free((char *)name);
}
static void show_edge(struct commit *commit)
@@ -2480,8 +2471,7 @@ static int get_object_list_from_bitmap(struct rev_info *revs)
}
static void record_recent_object(struct object *obj,
- const struct name_path *path,
- const char *last,
+ const char *name,
void *data)
{
sha1_array_append(&recent_objects, obj->oid.hash);
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index d0532f6..72c8158 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -53,7 +53,7 @@ static inline struct llist_item *llist_item_get(void)
free_nodes = free_nodes->next;
} else {
int i = 1;
- new = xmalloc(sizeof(struct llist_item) * BLKSIZE);
+ ALLOC_ARRAY(new, BLKSIZE);
for (; i < BLKSIZE; i++)
llist_item_put(&new[i]);
}
diff --git a/builtin/push.c b/builtin/push.c
index 960ffc3..4e9e4db 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -23,6 +23,7 @@ static const char *receivepack;
static int verbosity;
static int progress = -1;
static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
+static enum transport_family family;
static struct push_cas_option cas;
@@ -204,37 +205,6 @@ static void setup_push_current(struct remote *remote, struct branch *branch)
add_refspec(branch->name);
}
-static char warn_unspecified_push_default_msg[] =
-N_("push.default is unset; its implicit value has changed in\n"
- "Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
- "and maintain the traditional behavior, use:\n"
- "\n"
- " git config --global push.default matching\n"
- "\n"
- "To squelch this message and adopt the new behavior now, use:\n"
- "\n"
- " git config --global push.default simple\n"
- "\n"
- "When push.default is set to 'matching', git will push local branches\n"
- "to the remote branches that already exist with the same name.\n"
- "\n"
- "Since Git 2.0, Git defaults to the more conservative 'simple'\n"
- "behavior, which only pushes the current branch to the corresponding\n"
- "remote branch that 'git pull' uses to update the current branch.\n"
- "\n"
- "See 'git help config' and search for 'push.default' for further information.\n"
- "(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
- "'current' instead of 'simple' if you sometimes use older versions of Git)");
-
-static void warn_unspecified_push_default_configuration(void)
-{
- static int warn_once;
-
- if (warn_once++)
- return;
- warning("%s\n", _(warn_unspecified_push_default_msg));
-}
-
static int is_workflow_triangular(struct remote *remote)
{
struct remote *fetch_remote = remote_get(NULL);
@@ -253,9 +223,6 @@ static void setup_default_push_refspecs(struct remote *remote)
break;
case PUSH_DEFAULT_UNSPECIFIED:
- warn_unspecified_push_default_configuration();
- /* fallthru */
-
case PUSH_DEFAULT_SIMPLE:
if (triangular)
setup_push_current(remote, branch);
@@ -346,6 +313,7 @@ static int push_with_options(struct transport *transport, int flags)
unsigned int reject_reasons;
transport_set_verbosity(transport, verbosity, progress);
+ transport->family = family;
if (receivepack)
transport_set_option(transport,
@@ -565,6 +533,10 @@ int cmd_push(int argc, const char **argv, const char *prefix)
0, "signed", &push_cert, "yes|no|if-asked", N_("GPG sign the push"),
PARSE_OPT_OPTARG, option_parse_push_signed },
OPT_BIT(0, "atomic", &flags, N_("request atomic transaction on remote side"), TRANSPORT_PUSH_ATOMIC),
+ OPT_SET_INT('4', "ipv4", &family, N_("use IPv4 addresses only"),
+ TRANSPORT_FAMILY_IPV4),
+ OPT_SET_INT('6', "ipv6", &family, N_("use IPv6 addresses only"),
+ TRANSPORT_FAMILY_IPV6),
OPT_END()
};
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index f2d6761..c8e32b2 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -1031,7 +1031,6 @@ static void run_update_post_hook(struct command *commands)
{
struct command *cmd;
int argc;
- const char **argv;
struct child_process proc = CHILD_PROCESS_INIT;
const char *hook;
@@ -1044,21 +1043,16 @@ static void run_update_post_hook(struct command *commands)
if (!argc || !hook)
return;
- argv = xmalloc(sizeof(*argv) * (2 + argc));
- argv[0] = hook;
-
- for (argc = 1, cmd = commands; cmd; cmd = cmd->next) {
+ argv_array_push(&proc.args, hook);
+ for (cmd = commands; cmd; cmd = cmd->next) {
if (cmd->error_string || cmd->did_not_exist)
continue;
- argv[argc] = xstrdup(cmd->ref_name);
- argc++;
+ argv_array_push(&proc.args, cmd->ref_name);
}
- argv[argc] = NULL;
proc.no_stdin = 1;
proc.stdout_to_stderr = 1;
proc.err = use_sideband ? -1 : 0;
- proc.argv = argv;
if (!start_command(&proc)) {
if (use_sideband)
@@ -1378,7 +1372,7 @@ static struct command **queue_command(struct command **tail,
refname = line + 82;
reflen = linelen - 82;
- cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
+ cmd = xcalloc(1, st_add3(sizeof(struct command), reflen, 1));
hashcpy(cmd->old_sha1, old_sha1);
hashcpy(cmd->new_sha1, new_sha1);
memcpy(cmd->ref_name, refname, reflen);
@@ -1597,8 +1591,7 @@ static void prepare_shallow_update(struct command *commands,
{
int i, j, k, bitmap_size = (si->ref->nr + 31) / 32;
- si->used_shallow = xmalloc(sizeof(*si->used_shallow) *
- si->shallow->nr);
+ ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
si->need_reachability_test =
@@ -1664,7 +1657,7 @@ static void update_shallow_info(struct command *commands,
return;
}
- ref_status = xmalloc(sizeof(*ref_status) * ref->nr);
+ ALLOC_ARRAY(ref_status, ref->nr);
assign_shallow_commits_to_refs(si, NULL, ref_status);
for (cmd = commands; cmd; cmd = cmd->next) {
if (is_null_sha1(cmd->new_sha1))
diff --git a/builtin/reflog.c b/builtin/reflog.c
index f39960e..2d46b64 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -382,11 +382,9 @@ static int collect_reflog(const char *ref, const struct object_id *oid, int unus
{
struct collected_reflog *e;
struct collect_reflog_cb *cb = cb_data;
- size_t namelen = strlen(ref);
- e = xmalloc(sizeof(*e) + namelen + 1);
+ FLEX_ALLOC_STR(e, reflog, ref);
hashcpy(e->sha1, oid->hash);
- memcpy(e->reflog, ref, namelen + 1);
ALLOC_GROW(cb->e, cb->nr + 1, cb->alloc);
cb->e[cb->nr++] = e;
return 0;
@@ -396,7 +394,6 @@ static struct reflog_expire_cfg {
struct reflog_expire_cfg *next;
unsigned long expire_total;
unsigned long expire_unreachable;
- size_t len;
char pattern[FLEX_ARRAY];
} *reflog_expire_cfg, **reflog_expire_cfg_tail;
@@ -408,13 +405,11 @@ static struct reflog_expire_cfg *find_cfg_ent(const char *pattern, size_t len)
reflog_expire_cfg_tail = &reflog_expire_cfg;
for (ent = reflog_expire_cfg; ent; ent = ent->next)
- if (ent->len == len &&
- !memcmp(ent->pattern, pattern, len))
+ if (!strncmp(ent->pattern, pattern, len) &&
+ ent->pattern[len] == '\0')
return ent;
- ent = xcalloc(1, (sizeof(*ent) + len));
- memcpy(ent->pattern, pattern, len);
- ent->len = len;
+ FLEX_ALLOC_MEM(ent, pattern, pattern, len);
*reflog_expire_cfg_tail = ent;
reflog_expire_cfg_tail = &(ent->next);
return ent;
diff --git a/builtin/remote-ext.c b/builtin/remote-ext.c
index e3cd25d..7457c74 100644
--- a/builtin/remote-ext.c
+++ b/builtin/remote-ext.c
@@ -114,30 +114,14 @@ static char *strip_escapes(const char *str, const char *service,
}
}
-/* Should be enough... */
-#define MAXARGUMENTS 256
-
-static const char **parse_argv(const char *arg, const char *service)
+static void parse_argv(struct argv_array *out, const char *arg, const char *service)
{
- int arguments = 0;
- int i;
- const char **ret;
- char *temparray[MAXARGUMENTS + 1];
-
while (*arg) {
- char *expanded;
- if (arguments == MAXARGUMENTS)
- die("remote-ext command has too many arguments");
- expanded = strip_escapes(arg, service, &arg);
+ char *expanded = strip_escapes(arg, service, &arg);
if (expanded)
- temparray[arguments++] = expanded;
+ argv_array_push(out, expanded);
+ free(expanded);
}
-
- ret = xmalloc((arguments + 1) * sizeof(char *));
- for (i = 0; i < arguments; i++)
- ret[i] = temparray[i];
- ret[arguments] = NULL;
- return ret;
}
static void send_git_request(int stdin_fd, const char *serv, const char *repo,
@@ -158,7 +142,7 @@ static int run_child(const char *arg, const char *service)
child.in = -1;
child.out = -1;
child.err = 0;
- child.argv = parse_argv(arg, service);
+ parse_argv(&child.args, arg, service);
if (start_command(&child) < 0)
die("Can't run specified command");
diff --git a/builtin/remote.c b/builtin/remote.c
index 2b2ff9b..fda5c2e 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -108,8 +108,8 @@ enum {
#define MIRROR_PUSH 2
#define MIRROR_BOTH (MIRROR_FETCH|MIRROR_PUSH)
-static int add_branch(const char *key, const char *branchname,
- const char *remotename, int mirror, struct strbuf *tmp)
+static void add_branch(const char *key, const char *branchname,
+ const char *remotename, int mirror, struct strbuf *tmp)
{
strbuf_reset(tmp);
strbuf_addch(tmp, '+');
@@ -119,7 +119,7 @@ static int add_branch(const char *key, const char *branchname,
else
strbuf_addf(tmp, "refs/heads/%s:refs/remotes/%s/%s",
branchname, remotename, branchname);
- return git_config_set_multivar(key, tmp->buf, "^$", 0);
+ git_config_set_multivar(key, tmp->buf, "^$", 0);
}
static const char mirror_advice[] =
@@ -186,10 +186,7 @@ static int add(int argc, const char **argv)
url = argv[1];
remote = remote_get(name);
- if (remote && (remote->url_nr > 1 ||
- (strcmp(name, remote->url[0]) &&
- strcmp(url, remote->url[0])) ||
- remote->fetch_refspec_nr))
+ if (remote_is_configured(remote))
die(_("remote %s already exists."), name);
strbuf_addf(&buf2, "refs/heads/test:refs/remotes/%s/test", name);
@@ -197,8 +194,7 @@ static int add(int argc, const char **argv)
die(_("'%s' is not a valid remote name"), name);
strbuf_addf(&buf, "remote.%s.url", name);
- if (git_config_set(buf.buf, url))
- return 1;
+ git_config_set(buf.buf, url);
if (!mirror || mirror & MIRROR_FETCH) {
strbuf_reset(&buf);
@@ -206,25 +202,22 @@ static int add(int argc, const char **argv)
if (track.nr == 0)
string_list_append(&track, "*");
for (i = 0; i < track.nr; i++) {
- if (add_branch(buf.buf, track.items[i].string,
- name, mirror, &buf2))
- return 1;
+ add_branch(buf.buf, track.items[i].string,
+ name, mirror, &buf2);
}
}
if (mirror & MIRROR_PUSH) {
strbuf_reset(&buf);
strbuf_addf(&buf, "remote.%s.mirror", name);
- if (git_config_set(buf.buf, "true"))
- return 1;
+ git_config_set(buf.buf, "true");
}
if (fetch_tags != TAGS_DEFAULT) {
strbuf_reset(&buf);
strbuf_addf(&buf, "remote.%s.tagopt", name);
- if (git_config_set(buf.buf,
- fetch_tags == TAGS_SET ? "--tags" : "--no-tags"))
- return 1;
+ git_config_set(buf.buf,
+ fetch_tags == TAGS_SET ? "--tags" : "--no-tags");
}
if (fetch && fetch_remote(name))
@@ -592,25 +585,20 @@ static int migrate_file(struct remote *remote)
strbuf_addf(&buf, "remote.%s.url", remote->name);
for (i = 0; i < remote->url_nr; i++)
- if (git_config_set_multivar(buf.buf, remote->url[i], "^$", 0))
- return error(_("Could not append '%s' to '%s'"),
- remote->url[i], buf.buf);
+ git_config_set_multivar(buf.buf, remote->url[i], "^$", 0);
strbuf_reset(&buf);
strbuf_addf(&buf, "remote.%s.push", remote->name);
for (i = 0; i < remote->push_refspec_nr; i++)
- if (git_config_set_multivar(buf.buf, remote->push_refspec[i], "^$", 0))
- return error(_("Could not append '%s' to '%s'"),
- remote->push_refspec[i], buf.buf);
+ git_config_set_multivar(buf.buf, remote->push_refspec[i], "^$", 0);
strbuf_reset(&buf);
strbuf_addf(&buf, "remote.%s.fetch", remote->name);
for (i = 0; i < remote->fetch_refspec_nr; i++)
- if (git_config_set_multivar(buf.buf, remote->fetch_refspec[i], "^$", 0))
- return error(_("Could not append '%s' to '%s'"),
- remote->fetch_refspec[i], buf.buf);
+ git_config_set_multivar(buf.buf, remote->fetch_refspec[i], "^$", 0);
if (remote->origin == REMOTE_REMOTES)
unlink_or_warn(git_path("remotes/%s", remote->name));
else if (remote->origin == REMOTE_BRANCHES)
unlink_or_warn(git_path("branches/%s", remote->name));
+
return 0;
}
@@ -634,14 +622,14 @@ static int mv(int argc, const char **argv)
rename.remote_branches = &remote_branches;
oldremote = remote_get(rename.old);
- if (!oldremote)
+ if (!remote_is_configured(oldremote))
die(_("No such remote: %s"), rename.old);
if (!strcmp(rename.old, rename.new) && oldremote->origin != REMOTE_CONFIG)
return migrate_file(oldremote);
newremote = remote_get(rename.new);
- if (newremote && (newremote->url_nr > 1 || newremote->fetch_refspec_nr))
+ if (remote_is_configured(newremote))
die(_("remote %s already exists."), rename.new);
strbuf_addf(&buf, "refs/heads/test:refs/remotes/%s/test", rename.new);
@@ -657,8 +645,7 @@ static int mv(int argc, const char **argv)
strbuf_reset(&buf);
strbuf_addf(&buf, "remote.%s.fetch", rename.new);
- if (git_config_set_multivar(buf.buf, NULL, NULL, 1))
- return error(_("Could not remove config section '%s'"), buf.buf);
+ git_config_set_multivar(buf.buf, NULL, NULL, 1);
strbuf_addf(&old_remote_context, ":refs/remotes/%s/", rename.old);
for (i = 0; i < oldremote->fetch_refspec_nr; i++) {
char *ptr;
@@ -678,8 +665,7 @@ static int mv(int argc, const char **argv)
"\tPlease update the configuration manually if necessary."),
buf2.buf);
- if (git_config_set_multivar(buf.buf, buf2.buf, "^$", 0))
- return error(_("Could not append '%s'"), buf.buf);
+ git_config_set_multivar(buf.buf, buf2.buf, "^$", 0);
}
read_branches();
@@ -689,9 +675,7 @@ static int mv(int argc, const char **argv)
if (info->remote_name && !strcmp(info->remote_name, rename.old)) {
strbuf_reset(&buf);
strbuf_addf(&buf, "branch.%s.remote", item->string);
- if (git_config_set(buf.buf, rename.new)) {
- return error(_("Could not set '%s'"), buf.buf);
- }
+ git_config_set(buf.buf, rename.new);
}
}
@@ -773,7 +757,7 @@ static int rm(int argc, const char **argv)
usage_with_options(builtin_remote_rm_usage, options);
remote = remote_get(argv[1]);
- if (!remote)
+ if (!remote_is_configured(remote))
die(_("No such remote: %s"), argv[1]);
known_remotes.to_delete = remote;
@@ -789,10 +773,7 @@ static int rm(int argc, const char **argv)
strbuf_reset(&buf);
strbuf_addf(&buf, "branch.%s.%s",
item->string, *k);
- if (git_config_set(buf.buf, NULL)) {
- strbuf_release(&buf);
- return -1;
- }
+ git_config_set(buf.buf, NULL);
}
}
}
@@ -1413,24 +1394,20 @@ static int update(int argc, const char **argv)
static int remove_all_fetch_refspecs(const char *remote, const char *key)
{
- return git_config_set_multivar(key, NULL, NULL, 1);
+ return git_config_set_multivar_gently(key, NULL, NULL, 1);
}
-static int add_branches(struct remote *remote, const char **branches,
- const char *key)
+static void add_branches(struct remote *remote, const char **branches,
+ const char *key)
{
const char *remotename = remote->name;
int mirror = remote->mirror;
struct strbuf refspec = STRBUF_INIT;
for (; *branches; branches++)
- if (add_branch(key, *branches, remotename, mirror, &refspec)) {
- strbuf_release(&refspec);
- return 1;
- }
+ add_branch(key, *branches, remotename, mirror, &refspec);
strbuf_release(&refspec);
- return 0;
}
static int set_remote_branches(const char *remotename, const char **branches,
@@ -1441,18 +1418,15 @@ static int set_remote_branches(const char *remotename, const char **branches,
strbuf_addf(&key, "remote.%s.fetch", remotename);
- if (!remote_is_configured(remotename))
- die(_("No such remote '%s'"), remotename);
remote = remote_get(remotename);
+ if (!remote_is_configured(remote))
+ die(_("No such remote '%s'"), remotename);
if (!add_mode && remove_all_fetch_refspecs(remotename, key.buf)) {
strbuf_release(&key);
return 1;
}
- if (add_branches(remote, branches, key.buf)) {
- strbuf_release(&key);
- return 1;
- }
+ add_branches(remote, branches, key.buf);
strbuf_release(&key);
return 0;
@@ -1498,9 +1472,9 @@ static int get_url(int argc, const char **argv)
remotename = argv[0];
- if (!remote_is_configured(remotename))
- die(_("No such remote '%s'"), remotename);
remote = remote_get(remotename);
+ if (!remote_is_configured(remote))
+ die(_("No such remote '%s'"), remotename);
url_nr = 0;
if (push_mode) {
@@ -1566,9 +1540,9 @@ static int set_url(int argc, const char **argv)
if (delete_mode)
oldurl = newurl;
- if (!remote_is_configured(remotename))
- die(_("No such remote '%s'"), remotename);
remote = remote_get(remotename);
+ if (!remote_is_configured(remote))
+ die(_("No such remote '%s'"), remotename);
if (push_mode) {
strbuf_addf(&name_buf, "remote.%s.pushurl", remotename);
@@ -1584,10 +1558,11 @@ static int set_url(int argc, const char **argv)
if ((!oldurl && !delete_mode) || add_mode) {
if (add_mode)
git_config_set_multivar(name_buf.buf, newurl,
- "^$", 0);
+ "^$", 0);
else
git_config_set(name_buf.buf, newurl);
strbuf_release(&name_buf);
+
return 0;
}
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 3aa89a1..275da0d 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -177,9 +177,7 @@ static void finish_commit(struct commit *commit, void *data)
free_commit_buffer(commit);
}
-static void finish_object(struct object *obj,
- const struct name_path *path, const char *name,
- void *cb_data)
+static void finish_object(struct object *obj, const char *name, void *cb_data)
{
struct rev_list_info *info = cb_data;
if (obj->type == OBJ_BLOB && !has_object_file(&obj->oid))
@@ -188,15 +186,13 @@ static void finish_object(struct object *obj,
parse_object(obj->oid.hash);
}
-static void show_object(struct object *obj,
- const struct name_path *path, const char *component,
- void *cb_data)
+static void show_object(struct object *obj, const char *name, void *cb_data)
{
struct rev_list_info *info = cb_data;
- finish_object(obj, path, component, cb_data);
+ finish_object(obj, name, cb_data);
if (info->flags & REV_LIST_QUIET)
return;
- show_object_with_name(stdout, obj, path, component);
+ show_object_with_name(stdout, obj, name);
}
static void show_edge(struct commit *commit)
diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c
index bd16876..cf8487b 100644
--- a/builtin/rev-parse.c
+++ b/builtin/rev-parse.c
@@ -763,7 +763,8 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix)
continue;
}
if (!strcmp(arg, "--git-common-dir")) {
- puts(get_git_common_dir());
+ const char *pfx = prefix ? prefix : "";
+ puts(prefix_filename(pfx, strlen(pfx), get_git_common_dir()));
continue;
}
if (!strcmp(arg, "--resolve-git-dir")) {
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index f4c3eff..5295b72 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -22,17 +22,12 @@ static int module_list_compute(int argc, const char **argv,
struct module_list *list)
{
int i, result = 0;
- char *max_prefix, *ps_matched = NULL;
- int max_prefix_len;
+ char *ps_matched = NULL;
parse_pathspec(pathspec, 0,
PATHSPEC_PREFER_FULL |
PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP,
prefix, argv);
- /* Find common prefix for all pathspec's */
- max_prefix = common_prefix(pathspec);
- max_prefix_len = max_prefix ? strlen(max_prefix) : 0;
-
if (pathspec->nr)
ps_matched = xcalloc(pathspec->nr, 1);
@@ -42,9 +37,9 @@ static int module_list_compute(int argc, const char **argv,
for (i = 0; i < active_nr; i++) {
const struct cache_entry *ce = active_cache[i];
- if (!S_ISGITLINK(ce->ce_mode) ||
- !match_pathspec(pathspec, ce->name, ce_namelen(ce),
- max_prefix_len, ps_matched, 1))
+ if (!match_pathspec(pathspec, ce->name, ce_namelen(ce),
+ 0, ps_matched, 1) ||
+ !S_ISGITLINK(ce->ce_mode))
continue;
ALLOC_GROW(list->entries, list->nr + 1, list->alloc);
@@ -57,7 +52,6 @@ static int module_list_compute(int argc, const char **argv,
*/
i++;
}
- free(max_prefix);
if (ps_matched && report_path_error(ps_matched, pathspec, prefix))
result = -1;
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 475b958..38b5609 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -52,7 +52,7 @@ static int prune_worktree(const char *id, struct strbuf *reason)
return 1;
}
len = st.st_size;
- path = xmalloc(len + 1);
+ path = xmallocz(len);
read_in_full(fd, path, len);
close(fd);
while (len && (path[len - 1] == '\n' || path[len - 1] == '\r'))
@@ -201,9 +201,7 @@ static int add_worktree(const char *path, const char *refname,
die(_("'%s' already exists"), path);
/* is 'refname' a branch or commit? */
- if (opts->force_new_branch) /* definitely a branch */
- ;
- else if (!opts->detach && !strbuf_check_branch_ref(&symref, refname) &&
+ if (!opts->detach && !strbuf_check_branch_ref(&symref, refname) &&
ref_exists(symref.buf)) { /* it's a branch */
if (!opts->force)
die_if_checked_out(symref.buf);
@@ -336,9 +334,18 @@ static int add(int ac, const char **av, const char *prefix)
branch = ac < 2 ? "HEAD" : av[1];
opts.force_new_branch = !!new_branch_force;
- if (opts.force_new_branch)
+ if (opts.force_new_branch) {
+ struct strbuf symref = STRBUF_INIT;
+
opts.new_branch = new_branch_force;
+ if (!opts.force &&
+ !strbuf_check_branch_ref(&symref, opts.new_branch) &&
+ ref_exists(symref.buf))
+ die_if_checked_out(symref.buf);
+ strbuf_release(&symref);
+ }
+
if (ac < 2 && !opts.new_branch && !opts.detach) {
int n;
const char *s = worktree_basename(path, &n);
diff --git a/cache-tree.c b/cache-tree.c
index 20ee7b5..3ebf9c3 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -79,11 +79,9 @@ static struct cache_tree_sub *find_subtree(struct cache_tree *it,
ALLOC_GROW(it->down, it->subtree_nr + 1, it->subtree_alloc);
it->subtree_nr++;
- down = xmalloc(sizeof(*down) + pathlen + 1);
+ FLEX_ALLOC_MEM(down, name, path, pathlen);
down->cache_tree = NULL;
down->namelen = pathlen;
- memcpy(down->name, path, pathlen);
- down->name[pathlen] = 0;
if (pos < it->subtree_nr)
memmove(it->down + pos + 1,
diff --git a/cache.h b/cache.h
index 26640b4..b829410 100644
--- a/cache.h
+++ b/cache.h
@@ -229,7 +229,9 @@ struct cache_entry {
#error "CE_EXTENDED_FLAGS out of range"
#endif
+/* Forward structure decls */
struct pathspec;
+struct child_process;
/*
* Copy the sha1 and stat state of a cache entry from one to
@@ -1368,6 +1370,16 @@ extern void clear_delta_base_cache(void);
extern struct packed_git *add_packed_git(const char *path, size_t path_len, int local);
/*
+ * Make sure that a pointer access into an mmap'd index file is within bounds,
+ * and can provide at least 8 bytes of data.
+ *
+ * Note that this is only necessary for variable-length segments of the file
+ * (like the 64-bit extended offset table), as we compare the size to the
+ * fixed-length parts when we open the file.
+ */
+extern void check_pack_index_ptr(const struct packed_git *p, const void *ptr);
+
+/*
* Return the SHA-1 of the nth object within the specified packfile.
* Open the index if it is not already open. The return value points
* at the SHA-1 within the mmapped index. Return NULL if there is an
@@ -1487,7 +1499,7 @@ extern int update_server_info(int);
/* git_config_parse_key() returns these negated: */
#define CONFIG_INVALID_KEY 1
#define CONFIG_NO_SECTION_OR_NAME 2
-/* git_config_set(), git_config_set_multivar() return the above or these: */
+/* git_config_set_gently(), git_config_set_multivar_gently() return the above or these: */
#define CONFIG_NO_LOCK -1
#define CONFIG_INVALID_FILE 3
#define CONFIG_NO_WRITE 4
@@ -1506,8 +1518,8 @@ struct git_config_source {
typedef int (*config_fn_t)(const char *, const char *, void *);
extern int git_default_config(const char *, const char *, void *);
extern int git_config_from_file(config_fn_t fn, const char *, void *);
-extern int git_config_from_buf(config_fn_t fn, const char *name,
- const char *buf, size_t len, void *data);
+extern int git_config_from_mem(config_fn_t fn, const char *origin_type,
+ const char *name, const char *buf, size_t len, void *data);
extern void git_config_push_parameter(const char *text);
extern int git_config_from_parameters(config_fn_t fn, void *data);
extern void git_config(config_fn_t fn, void *);
@@ -1525,12 +1537,16 @@ extern int git_config_bool(const char *, const char *);
extern int git_config_maybe_bool(const char *, const char *);
extern int git_config_string(const char **, const char *, const char *);
extern int git_config_pathname(const char **, const char *, const char *);
-extern int git_config_set_in_file(const char *, const char *, const char *);
-extern int git_config_set(const char *, const char *);
+extern int git_config_set_in_file_gently(const char *, const char *, const char *);
+extern void git_config_set_in_file(const char *, const char *, const char *);
+extern int git_config_set_gently(const char *, const char *);
+extern void git_config_set(const char *, const char *);
extern int git_config_parse_key(const char *, char **, int *);
extern int git_config_key_is_valid(const char *key);
-extern int git_config_set_multivar(const char *, const char *, const char *, int);
-extern int git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
+extern int git_config_set_multivar_gently(const char *, const char *, const char *, int);
+extern void git_config_set_multivar(const char *, const char *, const char *, int);
+extern int git_config_set_multivar_in_file_gently(const char *, const char *, const char *, const char *, int);
+extern void git_config_set_multivar_in_file(const char *, const char *, const char *, const char *, int);
extern int git_config_rename_section(const char *, const char *);
extern int git_config_rename_section_in_file(const char *, const char *, const char *);
extern const char *git_etc_gitconfig(void);
@@ -1546,6 +1562,8 @@ extern const char *get_log_output_encoding(void);
extern const char *get_commit_output_encoding(void);
extern int git_config_parse_parameter(const char *, config_fn_t fn, void *data);
+extern const char *current_config_origin_type(void);
+extern const char *current_config_name(void);
struct config_include_data {
int depth;
@@ -1685,6 +1703,7 @@ extern int pager_use_color;
extern int term_columns(void);
extern int decimal_width(uintmax_t);
extern int check_pager_config(const char *cmd);
+extern void prepare_pager_args(struct child_process *, const char *pager);
extern const char *editor_program;
extern const char *askpass_program;
diff --git a/column.c b/column.c
index 786abe6..d55ead1 100644
--- a/column.c
+++ b/column.c
@@ -164,7 +164,7 @@ static void display_table(const struct string_list *list,
data.colopts = colopts;
data.opts = *opts;
- data.len = xmalloc(sizeof(*data.len) * list->nr);
+ ALLOC_ARRAY(data.len, list->nr);
for (i = 0; i < list->nr; i++)
data.len[i] = item_length(colopts, list->items[i].string);
@@ -173,9 +173,8 @@ static void display_table(const struct string_list *list,
if (colopts & COL_DENSE)
shrink_columns(&data);
- empty_cell = xmalloc(initial_width + 1);
+ empty_cell = xmallocz(initial_width);
memset(empty_cell, ' ', initial_width);
- empty_cell[initial_width] = '\0';
for (y = 0; y < data.rows; y++) {
for (x = 0; x < data.cols; x++)
if (display_cell(&data, initial_width, empty_cell, x, y))
diff --git a/combine-diff.c b/combine-diff.c
index 5571304..0e1d4b0 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -189,11 +189,11 @@ static struct lline *coalesce_lines(struct lline *base, int *lenbase,
* - Else if we have NEW, insert newend lline into base and
* consume newend
*/
- lcs = xcalloc(origbaselen + 1, sizeof(int*));
- directions = xcalloc(origbaselen + 1, sizeof(enum coalesce_direction*));
+ lcs = xcalloc(st_add(origbaselen, 1), sizeof(int*));
+ directions = xcalloc(st_add(origbaselen, 1), sizeof(enum coalesce_direction*));
for (i = 0; i < origbaselen + 1; i++) {
- lcs[i] = xcalloc(lennew + 1, sizeof(int));
- directions[i] = xcalloc(lennew + 1, sizeof(enum coalesce_direction));
+ lcs[i] = xcalloc(st_add(lennew, 1), sizeof(int));
+ directions[i] = xcalloc(st_add(lennew, 1), sizeof(enum coalesce_direction));
directions[i][0] = BASE;
}
for (j = 1; j < lennew + 1; j++)
@@ -319,7 +319,7 @@ static void append_lost(struct sline *sline, int n, const char *line, int len)
if (line[len-1] == '\n')
len--;
- lline = xmalloc(sizeof(*lline) + len + 1);
+ FLEX_ALLOC_MEM(lline, line, line, len);
lline->len = len;
lline->next = NULL;
lline->prev = sline->plost.lost_tail;
@@ -330,8 +330,6 @@ static void append_lost(struct sline *sline, int n, const char *line, int len)
sline->plost.lost_tail = lline;
sline->plost.len++;
lline->parent_map = this_mask;
- memcpy(lline->line, line, len);
- lline->line[len] = 0;
}
struct combine_diff_state {
@@ -1043,7 +1041,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
elem->mode = canon_mode(S_IFLNK);
result_size = len;
- result = xmalloc(len + 1);
+ result = xmallocz(len);
done = read_in_full(fd, result, len);
if (done < 0)
@@ -1051,8 +1049,6 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
else if (done < len)
die("early EOF '%s'", elem->path);
- result[len] = 0;
-
/* If not a fake symlink, apply filters, e.g. autocrlf */
if (is_file) {
struct strbuf buf = STRBUF_INIT;
@@ -1115,7 +1111,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
if (result_size && result[result_size-1] != '\n')
cnt++; /* incomplete line */
- sline = xcalloc(cnt+2, sizeof(*sline));
+ sline = xcalloc(st_add(cnt, 2), sizeof(*sline));
sline[0].bol = result;
for (lno = 0, cp = result; cp < result + result_size; cp++) {
if (*cp == '\n') {
@@ -1134,7 +1130,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
/* Even p_lno[cnt+1] is valid -- that is for the end line number
* for deletion hunk at the end.
*/
- sline[0].p_lno = xcalloc((cnt+2) * num_parent, sizeof(unsigned long));
+ sline[0].p_lno = xcalloc(st_mult(st_add(cnt, 2), num_parent), sizeof(unsigned long));
for (lno = 0; lno <= cnt; lno++)
sline[lno+1].p_lno = sline[lno].p_lno + num_parent;
@@ -1266,7 +1262,7 @@ static struct diff_filepair *combined_pair(struct combine_diff_path *p,
struct diff_filespec *pool;
pair = xmalloc(sizeof(*pair));
- pool = xcalloc(num_parent + 1, sizeof(struct diff_filespec));
+ pool = xcalloc(st_add(num_parent, 1), sizeof(struct diff_filespec));
pair->one = pool + 1;
pair->two = pool;
@@ -1372,7 +1368,7 @@ static struct combine_diff_path *find_paths_multitree(
struct combine_diff_path paths_head;
struct strbuf base;
- parents_sha1 = xmalloc(nparent * sizeof(parents_sha1[0]));
+ ALLOC_ARRAY(parents_sha1, nparent);
for (i = 0; i < nparent; i++)
parents_sha1[i] = parents->sha1[i];
@@ -1483,7 +1479,7 @@ void diff_tree_combined(const unsigned char *sha1,
if (opt->orderfile && num_paths) {
struct obj_order *o;
- o = xmalloc(sizeof(*o) * num_paths);
+ ALLOC_ARRAY(o, num_paths);
for (i = 0, p = paths; p; p = p->next, i++)
o[i].obj = p;
order_objects(opt->orderfile, path_path, o, num_paths);
diff --git a/commit.c b/commit.c
index 40388d7..3f4f371 100644
--- a/commit.c
+++ b/commit.c
@@ -147,7 +147,7 @@ struct commit_graft *read_graft_line(char *buf, int len)
if ((len + 1) % entry_size)
goto bad_graft_data;
i = (len + 1) / entry_size - 1;
- graft = xmalloc(sizeof(*graft) + GIT_SHA1_RAWSZ * i);
+ graft = xmalloc(st_add(sizeof(*graft), st_mult(GIT_SHA1_RAWSZ, i)));
graft->nr_parent = i;
if (get_oid_hex(buf, &graft->oid))
goto bad_graft_data;
@@ -903,7 +903,7 @@ static int remove_redundant(struct commit **array, int cnt)
work = xcalloc(cnt, sizeof(*work));
redundant = xcalloc(cnt, 1);
- filled_index = xmalloc(sizeof(*filled_index) * (cnt - 1));
+ ALLOC_ARRAY(filled_index, cnt - 1);
for (i = 0; i < cnt; i++)
parse_commit(array[i]);
diff --git a/compat/mingw.c b/compat/mingw.c
index fbe69b8..54c82ec 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -810,7 +810,7 @@ static const char *quote_arg(const char *arg)
return arg;
/* insert \ where necessary */
- d = q = xmalloc(len+n+3);
+ d = q = xmalloc(st_add3(len, n, 3));
*d++ = '"';
while (*arg) {
if (*arg == '"')
@@ -893,7 +893,7 @@ static char **get_path_split(void)
if (!n)
return NULL;
- path = xmalloc((n+1)*sizeof(char *));
+ ALLOC_ARRAY(path, n + 1);
p = envpath;
i = 0;
do {
@@ -978,7 +978,7 @@ static wchar_t *make_environment_block(char **deltaenv)
i++;
/* copy the environment, leaving space for changes */
- tmpenv = xmalloc((size + i) * sizeof(char*));
+ ALLOC_ARRAY(tmpenv, size + i);
memcpy(tmpenv, environ, size * sizeof(char*));
/* merge supplied environment changes into the temporary environment */
@@ -1069,7 +1069,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
free(quoted);
}
- wargs = xmalloc((2 * args.len + 1) * sizeof(wchar_t));
+ ALLOC_ARRAY(wargs, st_add(st_mult(2, args.len), 1));
xutftowcs(wargs, args.buf, 2 * args.len + 1);
strbuf_release(&args);
@@ -1168,7 +1168,7 @@ static int try_shell_exec(const char *cmd, char *const *argv)
int argc = 0;
const char **argv2;
while (argv[argc]) argc++;
- argv2 = xmalloc(sizeof(*argv) * (argc+1));
+ ALLOC_ARRAY(argv2, argc + 1);
argv2[0] = (char *)cmd; /* full path to the script file */
memcpy(&argv2[1], &argv[1], sizeof(*argv) * argc);
pid = mingw_spawnv(prog, argv2, 1);
diff --git a/compat/mingw.h b/compat/mingw.h
index 8c5bf50..c008694 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -396,6 +396,12 @@ static inline char *mingw_find_last_dir_sep(const char *path)
ret = (char *)path;
return ret;
}
+static inline void convert_slashes(char *path)
+{
+ for (; *path; path++)
+ if (*path == '\\')
+ *path = '/';
+}
#define find_last_dir_sep mingw_find_last_dir_sep
int mingw_offset_1st_component(const char *path);
#define offset_1st_component mingw_offset_1st_component
diff --git a/compat/precompose_utf8.c b/compat/precompose_utf8.c
index 079070f..dfbe6d8 100644
--- a/compat/precompose_utf8.c
+++ b/compat/precompose_utf8.c
@@ -50,7 +50,8 @@ void probe_utf8_pathname_composition(void)
close(output_fd);
git_path_buf(&path, "%s", auml_nfd);
precomposed_unicode = access(path.buf, R_OK) ? 0 : 1;
- git_config_set("core.precomposeunicode", precomposed_unicode ? "true" : "false");
+ git_config_set("core.precomposeunicode",
+ precomposed_unicode ? "true" : "false");
git_path_buf(&path, "%s", auml_nfc);
if (unlink(path.buf))
die_errno(_("failed to unlink '%s'"), path.buf);
diff --git a/compat/qsort.c b/compat/qsort.c
index 9574d53..7d071af 100644
--- a/compat/qsort.c
+++ b/compat/qsort.c
@@ -47,7 +47,7 @@ static void msort_with_tmp(void *b, size_t n, size_t s,
void git_qsort(void *b, size_t n, size_t s,
int (*cmp)(const void *, const void *))
{
- const size_t size = n * s;
+ const size_t size = st_mult(n, s);
char buf[1024];
if (size < sizeof(buf)) {
diff --git a/compat/setenv.c b/compat/setenv.c
index fc1439a..7849f25 100644
--- a/compat/setenv.c
+++ b/compat/setenv.c
@@ -18,7 +18,7 @@ int gitsetenv(const char *name, const char *value, int replace)
namelen = strlen(name);
valuelen = strlen(value);
- envstr = malloc((namelen + valuelen + 2));
+ envstr = malloc(st_add3(namelen, valuelen, 2));
if (!envstr) {
errno = ENOMEM;
return -1;
diff --git a/compat/win32/pthread.h b/compat/win32/pthread.h
index 20b35a2..b6ed9e7 100644
--- a/compat/win32/pthread.h
+++ b/compat/win32/pthread.h
@@ -78,7 +78,7 @@ extern int win32_pthread_join(pthread_t *thread, void **value_ptr);
#define pthread_equal(t1, t2) ((t1).tid == (t2).tid)
extern pthread_t pthread_self(void);
-static inline int pthread_exit(void *ret)
+static inline void NORETURN pthread_exit(void *ret)
{
ExitThread((DWORD)(intptr_t)ret);
}
diff --git a/compat/win32/syslog.c b/compat/win32/syslog.c
index d015e43..b905aea 100644
--- a/compat/win32/syslog.c
+++ b/compat/win32/syslog.c
@@ -32,7 +32,7 @@ void syslog(int priority, const char *fmt, ...)
return;
}
- str = malloc(str_len + 1);
+ str = malloc(st_add(str_len, 1));
if (!str) {
warning("malloc failed: '%s'", strerror(errno));
return;
@@ -43,7 +43,7 @@ void syslog(int priority, const char *fmt, ...)
va_end(ap);
while ((pos = strstr(str, "%1")) != NULL) {
- str = realloc(str, ++str_len + 1);
+ str = realloc(str, st_add(++str_len, 1));
if (!str) {
warning("realloc failed: '%s'", strerror(errno));
return;
diff --git a/config.c b/config.c
index b95ac3a..9ba40bc 100644
--- a/config.c
+++ b/config.c
@@ -24,6 +24,7 @@ struct config_source {
size_t pos;
} buf;
} u;
+ const char *origin_type;
const char *name;
const char *path;
int die_on_error;
@@ -471,9 +472,9 @@ static int git_parse_source(config_fn_t fn, void *data)
break;
}
if (cf->die_on_error)
- die(_("bad config file line %d in %s"), cf->linenr, cf->name);
+ die(_("bad config line %d in %s %s"), cf->linenr, cf->origin_type, cf->name);
else
- return error(_("bad config file line %d in %s"), cf->linenr, cf->name);
+ return error(_("bad config line %d in %s %s"), cf->linenr, cf->origin_type, cf->name);
}
static int parse_unit_factor(const char *end, uintmax_t *val)
@@ -588,9 +589,9 @@ static void die_bad_number(const char *name, const char *value)
if (!value)
value = "";
- if (cf && cf->name)
- die(_("bad numeric config value '%s' for '%s' in %s: %s"),
- value, name, cf->name, reason);
+ if (cf && cf->origin_type && cf->name)
+ die(_("bad numeric config value '%s' for '%s' in %s %s: %s"),
+ value, name, cf->origin_type, cf->name, reason);
die(_("bad numeric config value '%s' for '%s': %s"), value, name, reason);
}
@@ -1061,11 +1062,13 @@ static int do_config_from(struct config_source *top, config_fn_t fn, void *data)
}
static int do_config_from_file(config_fn_t fn,
- const char *name, const char *path, FILE *f, void *data)
+ const char *origin_type, const char *name, const char *path, FILE *f,
+ void *data)
{
struct config_source top;
top.u.file = f;
+ top.origin_type = origin_type;
top.name = name;
top.path = path;
top.die_on_error = 1;
@@ -1078,7 +1081,7 @@ static int do_config_from_file(config_fn_t fn,
static int git_config_from_stdin(config_fn_t fn, void *data)
{
- return do_config_from_file(fn, "<stdin>", NULL, stdin, data);
+ return do_config_from_file(fn, "standard input", "", NULL, stdin, data);
}
int git_config_from_file(config_fn_t fn, const char *filename, void *data)
@@ -1089,21 +1092,22 @@ int git_config_from_file(config_fn_t fn, const char *filename, void *data)
f = fopen(filename, "r");
if (f) {
flockfile(f);
- ret = do_config_from_file(fn, filename, filename, f, data);
+ ret = do_config_from_file(fn, "file", filename, filename, f, data);
funlockfile(f);
fclose(f);
}
return ret;
}
-int git_config_from_buf(config_fn_t fn, const char *name, const char *buf,
- size_t len, void *data)
+int git_config_from_mem(config_fn_t fn, const char *origin_type,
+ const char *name, const char *buf, size_t len, void *data)
{
struct config_source top;
top.u.buf.buf = buf;
top.u.buf.len = len;
top.u.buf.pos = 0;
+ top.origin_type = origin_type;
top.name = name;
top.path = NULL;
top.die_on_error = 0;
@@ -1132,7 +1136,7 @@ static int git_config_from_blob_sha1(config_fn_t fn,
return error("reference '%s' does not point to a blob", name);
}
- ret = git_config_from_buf(fn, name, buf, size, data);
+ ret = git_config_from_mem(fn, "blob", name, buf, size, data);
free(buf);
return ret;
@@ -1849,15 +1853,26 @@ contline:
return offset;
}
-int git_config_set_in_file(const char *config_filename,
- const char *key, const char *value)
+int git_config_set_in_file_gently(const char *config_filename,
+ const char *key, const char *value)
{
- return git_config_set_multivar_in_file(config_filename, key, value, NULL, 0);
+ return git_config_set_multivar_in_file_gently(config_filename, key, value, NULL, 0);
}
-int git_config_set(const char *key, const char *value)
+void git_config_set_in_file(const char *config_filename,
+ const char *key, const char *value)
{
- return git_config_set_multivar(key, value, NULL, 0);
+ git_config_set_multivar_in_file(config_filename, key, value, NULL, 0);
+}
+
+int git_config_set_gently(const char *key, const char *value)
+{
+ return git_config_set_multivar_gently(key, value, NULL, 0);
+}
+
+void git_config_set(const char *key, const char *value)
+{
+ git_config_set_multivar(key, value, NULL, 0);
}
/*
@@ -1902,7 +1917,7 @@ static int git_config_parse_key_1(const char *key, char **store_key, int *basele
* Validate the key and while at it, lower case it for matching.
*/
if (store_key)
- *store_key = xmalloc(strlen(key) + 1);
+ *store_key = xmallocz(strlen(key));
dot = 0;
for (i = 0; key[i]; i++) {
@@ -1926,8 +1941,6 @@ static int git_config_parse_key_1(const char *key, char **store_key, int *basele
if (store_key)
(*store_key)[i] = c;
}
- if (store_key)
- (*store_key)[i] = 0;
return 0;
@@ -1974,9 +1987,10 @@ int git_config_key_is_valid(const char *key)
* - the config file is removed and the lock file rename()d to it.
*
*/
-int git_config_set_multivar_in_file(const char *config_filename,
- const char *key, const char *value,
- const char *value_regex, int multi_replace)
+int git_config_set_multivar_in_file_gently(const char *config_filename,
+ const char *key, const char *value,
+ const char *value_regex,
+ int multi_replace)
{
int fd = -1, in_fd = -1;
int ret;
@@ -2203,11 +2217,27 @@ write_err_out:
}
-int git_config_set_multivar(const char *key, const char *value,
- const char *value_regex, int multi_replace)
+void git_config_set_multivar_in_file(const char *config_filename,
+ const char *key, const char *value,
+ const char *value_regex, int multi_replace)
+{
+ if (git_config_set_multivar_in_file_gently(config_filename, key, value,
+ value_regex, multi_replace) < 0)
+ die(_("Could not set '%s' to '%s'"), key, value);
+}
+
+int git_config_set_multivar_gently(const char *key, const char *value,
+ const char *value_regex, int multi_replace)
{
- return git_config_set_multivar_in_file(NULL, key, value, value_regex,
- multi_replace);
+ return git_config_set_multivar_in_file_gently(NULL, key, value, value_regex,
+ multi_replace);
+}
+
+void git_config_set_multivar(const char *key, const char *value,
+ const char *value_regex, int multi_replace)
+{
+ git_config_set_multivar_in_file(NULL, key, value, value_regex,
+ multi_replace);
}
static int section_name_match (const char *buf, const char *name)
@@ -2409,3 +2439,13 @@ int parse_config_key(const char *var,
return 0;
}
+
+const char *current_config_origin_type(void)
+{
+ return cf && cf->origin_type ? cf->origin_type : "command line";
+}
+
+const char *current_config_name(void)
+{
+ return cf && cf->name ? cf->name : "";
+}
diff --git a/config.mak.uname b/config.mak.uname
index d6f7980..fe8096f 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -37,6 +37,7 @@ ifeq ($(uname_S),Linux)
HAVE_CLOCK_GETTIME = YesPlease
HAVE_CLOCK_MONOTONIC = YesPlease
HAVE_GETDELIM = YesPlease
+ SANE_TEXT_GREP=-a
endif
ifeq ($(uname_S),GNU/kFreeBSD)
HAVE_ALLOCA_H = YesPlease
diff --git a/configure.ac b/configure.ac
index 89e2590..0cd9f46 100644
--- a/configure.ac
+++ b/configure.ac
@@ -471,6 +471,13 @@ if test -n "$ASCIIDOC"; then
esac
fi
+if grep -a ascii configure.ac >/dev/null; then
+ AC_MSG_RESULT([Using 'grep -a' for sane_grep])
+ SANE_TEXT_GREP=-a
+else
+ SANE_TEXT_GREP=
+fi
+GIT_CONF_SUBST([SANE_TEXT_GREP])
## Checks for libraries.
AC_MSG_NOTICE([CHECKS for libraries])
diff --git a/connect.c b/connect.c
index fd7ffe1..c53f3f1 100644
--- a/connect.c
+++ b/connect.c
@@ -267,9 +267,9 @@ static enum protocol get_protocol(const char *name)
return PROTO_SSH;
if (!strcmp(name, "git"))
return PROTO_GIT;
- if (!strcmp(name, "git+ssh"))
+ if (!strcmp(name, "git+ssh")) /* deprecated - do not use */
return PROTO_SSH;
- if (!strcmp(name, "ssh+git"))
+ if (!strcmp(name, "ssh+git")) /* deprecated - do not use */
return PROTO_SSH;
if (!strcmp(name, "file"))
return PROTO_FILE;
@@ -357,6 +357,10 @@ static int git_tcp_connect_sock(char *host, int flags)
port = "<none>";
memset(&hints, 0, sizeof(hints));
+ if (flags & CONNECT_IPV4)
+ hints.ai_family = AF_INET;
+ else if (flags & CONNECT_IPV6)
+ hints.ai_family = AF_INET6;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
@@ -783,6 +787,10 @@ struct child_process *git_connect(int fd[2], const char *url,
}
argv_array_push(&conn->args, ssh);
+ if (flags & CONNECT_IPV4)
+ argv_array_push(&conn->args, "-4");
+ else if (flags & CONNECT_IPV6)
+ argv_array_push(&conn->args, "-6");
if (tortoiseplink)
argv_array_push(&conn->args, "-batch");
if (port) {
diff --git a/connect.h b/connect.h
index c41a685..01f14cd 100644
--- a/connect.h
+++ b/connect.h
@@ -3,6 +3,8 @@
#define CONNECT_VERBOSE (1u << 0)
#define CONNECT_DIAG_URL (1u << 1)
+#define CONNECT_IPV4 (1u << 2)
+#define CONNECT_IPV6 (1u << 3)
extern struct child_process *git_connect(int fd[2], const char *url, const char *prog, int flags);
extern int finish_connect(struct child_process *conn);
extern int git_connection_is_socket(struct child_process *conn);
diff --git a/convert.c b/convert.c
index 8cd6222..f524b8d 100644
--- a/convert.c
+++ b/convert.c
@@ -19,17 +19,19 @@
#define CONVERT_STAT_BITS_BIN 0x4
enum crlf_action {
- CRLF_GUESS = -1,
- CRLF_BINARY = 0,
+ CRLF_UNDEFINED,
+ CRLF_BINARY,
CRLF_TEXT,
- CRLF_INPUT,
- CRLF_CRLF,
- CRLF_AUTO
+ CRLF_TEXT_INPUT,
+ CRLF_TEXT_CRLF,
+ CRLF_AUTO,
+ CRLF_AUTO_INPUT,
+ CRLF_AUTO_CRLF
};
struct text_stat {
/* NUL, CR, LF and CRLF counts */
- unsigned nul, cr, lf, crlf;
+ unsigned nul, lonecr, lonelf, crlf;
/* These are just approximations! */
unsigned printable, nonprintable;
@@ -44,13 +46,15 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *
for (i = 0; i < size; i++) {
unsigned char c = buf[i];
if (c == '\r') {
- stats->cr++;
- if (i+1 < size && buf[i+1] == '\n')
+ if (i+1 < size && buf[i+1] == '\n') {
stats->crlf++;
+ i++;
+ } else
+ stats->lonecr++;
continue;
}
if (c == '\n') {
- stats->lf++;
+ stats->lonelf++;
continue;
}
if (c == 127)
@@ -84,7 +88,7 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *
*/
static int convert_is_binary(unsigned long size, const struct text_stat *stats)
{
- if (stats->cr != stats->crlf)
+ if (stats->lonecr)
return 1;
if (stats->nul)
return 1;
@@ -96,19 +100,18 @@ static int convert_is_binary(unsigned long size, const struct text_stat *stats)
static unsigned int gather_convert_stats(const char *data, unsigned long size)
{
struct text_stat stats;
+ int ret = 0;
if (!data || !size)
return 0;
gather_stats(data, size, &stats);
if (convert_is_binary(size, &stats))
- return CONVERT_STAT_BITS_BIN;
- else if (stats.crlf && stats.crlf == stats.lf)
- return CONVERT_STAT_BITS_TXT_CRLF;
- else if (stats.crlf && stats.lf)
- return CONVERT_STAT_BITS_TXT_CRLF | CONVERT_STAT_BITS_TXT_LF;
- else if (stats.lf)
- return CONVERT_STAT_BITS_TXT_LF;
- else
- return 0;
+ ret |= CONVERT_STAT_BITS_BIN;
+ if (stats.crlf)
+ ret |= CONVERT_STAT_BITS_TXT_CRLF;
+ if (stats.lonelf)
+ ret |= CONVERT_STAT_BITS_TXT_LF;
+
+ return ret;
}
static const char *gather_convert_stats_ascii(const char *data, unsigned long size)
@@ -149,28 +152,37 @@ const char *get_wt_convert_stats_ascii(const char *path)
return ret;
}
+static int text_eol_is_crlf(void)
+{
+ if (auto_crlf == AUTO_CRLF_TRUE)
+ return 1;
+ else if (auto_crlf == AUTO_CRLF_INPUT)
+ return 0;
+ if (core_eol == EOL_CRLF)
+ return 1;
+ if (core_eol == EOL_UNSET && EOL_NATIVE == EOL_CRLF)
+ return 1;
+ return 0;
+}
+
static enum eol output_eol(enum crlf_action crlf_action)
{
switch (crlf_action) {
case CRLF_BINARY:
return EOL_UNSET;
- case CRLF_CRLF:
+ case CRLF_TEXT_CRLF:
return EOL_CRLF;
- case CRLF_INPUT:
+ case CRLF_TEXT_INPUT:
return EOL_LF;
- case CRLF_GUESS:
- if (!auto_crlf)
- return EOL_UNSET;
- /* fall through */
+ case CRLF_UNDEFINED:
+ case CRLF_AUTO_CRLF:
+ case CRLF_AUTO_INPUT:
case CRLF_TEXT:
case CRLF_AUTO:
- if (auto_crlf == AUTO_CRLF_TRUE)
- return EOL_CRLF;
- else if (auto_crlf == AUTO_CRLF_INPUT)
- return EOL_LF;
- else if (core_eol == EOL_UNSET)
- return EOL_NATIVE;
+ /* fall through */
+ return text_eol_is_crlf() ? EOL_CRLF : EOL_LF;
}
+ warning("Illegal crlf_action %d\n", (int)crlf_action);
return core_eol;
}
@@ -196,7 +208,7 @@ static void check_safe_crlf(const char *path, enum crlf_action crlf_action,
* CRLFs would be added by checkout:
* check if we have "naked" LFs
*/
- if (stats->lf != stats->crlf) {
+ if (stats->lonelf) {
if (checksafe == SAFE_CRLF_WARN)
warning("LF will be replaced by CRLF in %s.\nThe file will have its original line endings in your working directory.", path);
else /* i.e. SAFE_CRLF_FAIL */
@@ -227,7 +239,6 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
char *dst;
if (crlf_action == CRLF_BINARY ||
- (crlf_action == CRLF_GUESS && auto_crlf == AUTO_CRLF_FALSE) ||
(src && !len))
return 0;
@@ -240,11 +251,11 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
gather_stats(src, len, &stats);
- if (crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS) {
+ if (crlf_action == CRLF_AUTO || crlf_action == CRLF_AUTO_INPUT || crlf_action == CRLF_AUTO_CRLF) {
if (convert_is_binary(len, &stats))
return 0;
- if (crlf_action == CRLF_GUESS) {
+ if (crlf_action == CRLF_AUTO_INPUT || crlf_action == CRLF_AUTO_CRLF) {
/*
* If the file in the index has any CR in it, do not convert.
* This is the new safer autocrlf handling.
@@ -256,8 +267,8 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
check_safe_crlf(path, crlf_action, &stats, checksafe);
- /* Optimization: No CR? Nothing to convert, regardless. */
- if (!stats.cr)
+ /* Optimization: No CRLF? Nothing to convert, regardless. */
+ if (!stats.crlf)
return 0;
/*
@@ -271,7 +282,7 @@ static int crlf_to_git(const char *path, const char *src, size_t len,
if (strbuf_avail(buf) + buf->len < len)
strbuf_grow(buf, len - buf->len);
dst = buf->buf;
- if (crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS) {
+ if (crlf_action == CRLF_AUTO || crlf_action == CRLF_AUTO_INPUT || crlf_action == CRLF_AUTO_CRLF) {
/*
* If we guessed, we already know we rejected a file with
* lone CR, and we can strip a CR without looking at what
@@ -304,19 +315,15 @@ static int crlf_to_worktree(const char *path, const char *src, size_t len,
gather_stats(src, len, &stats);
- /* No LF? Nothing to convert, regardless. */
- if (!stats.lf)
- return 0;
-
- /* Was it already in CRLF format? */
- if (stats.lf == stats.crlf)
+ /* No "naked" LF? Nothing to convert, regardless. */
+ if (!stats.lonelf)
return 0;
- if (crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS) {
- if (crlf_action == CRLF_GUESS) {
+ if (crlf_action == CRLF_AUTO || crlf_action == CRLF_AUTO_INPUT || crlf_action == CRLF_AUTO_CRLF) {
+ if (crlf_action == CRLF_AUTO_INPUT || crlf_action == CRLF_AUTO_CRLF) {
/* If we have any CR or CRLF line endings, we do not touch it */
/* This is the new safer autocrlf-handling */
- if (stats.cr > 0 || stats.crlf > 0)
+ if (stats.lonecr || stats.crlf )
return 0;
}
@@ -328,7 +335,7 @@ static int crlf_to_worktree(const char *path, const char *src, size_t len,
if (src == buf->buf)
to_free = strbuf_detach(buf, NULL);
- strbuf_grow(buf, len + stats.lf - stats.crlf);
+ strbuf_grow(buf, len + stats.lonelf);
for (;;) {
const char *nl = memchr(src, '\n', len);
if (!nl)
@@ -696,7 +703,7 @@ static int ident_to_worktree(const char *path, const char *src, size_t len,
return 1;
}
-static enum crlf_action git_path_check_crlf(const char *path, struct git_attr_check *check)
+static enum crlf_action git_path_check_crlf(struct git_attr_check *check)
{
const char *value = check->value;
@@ -707,13 +714,13 @@ static enum crlf_action git_path_check_crlf(const char *path, struct git_attr_ch
else if (ATTR_UNSET(value))
;
else if (!strcmp(value, "input"))
- return CRLF_INPUT;
+ return CRLF_TEXT_INPUT;
else if (!strcmp(value, "auto"))
return CRLF_AUTO;
- return CRLF_GUESS;
+ return CRLF_UNDEFINED;
}
-static enum eol git_path_check_eol(const char *path, struct git_attr_check *check)
+static enum eol git_path_check_eol(struct git_attr_check *check)
{
const char *value = check->value;
@@ -726,8 +733,7 @@ static enum eol git_path_check_eol(const char *path, struct git_attr_check *chec
return EOL_UNSET;
}
-static struct convert_driver *git_path_check_convert(const char *path,
- struct git_attr_check *check)
+static struct convert_driver *git_path_check_convert(struct git_attr_check *check)
{
const char *value = check->value;
struct convert_driver *drv;
@@ -740,28 +746,17 @@ static struct convert_driver *git_path_check_convert(const char *path,
return NULL;
}
-static int git_path_check_ident(const char *path, struct git_attr_check *check)
+static int git_path_check_ident(struct git_attr_check *check)
{
const char *value = check->value;
return !!ATTR_TRUE(value);
}
-static enum crlf_action input_crlf_action(enum crlf_action text_attr, enum eol eol_attr)
-{
- if (text_attr == CRLF_BINARY)
- return CRLF_BINARY;
- if (eol_attr == EOL_LF)
- return CRLF_INPUT;
- if (eol_attr == EOL_CRLF)
- return CRLF_CRLF;
- return text_attr;
-}
-
struct conv_attrs {
struct convert_driver *drv;
- enum crlf_action crlf_action;
- enum eol eol_attr;
+ enum crlf_action attr_action; /* What attr says */
+ enum crlf_action crlf_action; /* When no attr is set, use core.autocrlf */
int ident;
};
@@ -783,18 +778,33 @@ static void convert_attrs(struct conv_attrs *ca, const char *path)
}
if (!git_check_attr(path, NUM_CONV_ATTRS, ccheck)) {
- ca->crlf_action = git_path_check_crlf(path, ccheck + 4);
- if (ca->crlf_action == CRLF_GUESS)
- ca->crlf_action = git_path_check_crlf(path, ccheck + 0);
- ca->ident = git_path_check_ident(path, ccheck + 1);
- ca->drv = git_path_check_convert(path, ccheck + 2);
- ca->eol_attr = git_path_check_eol(path, ccheck + 3);
+ ca->crlf_action = git_path_check_crlf(ccheck + 4);
+ if (ca->crlf_action == CRLF_UNDEFINED)
+ ca->crlf_action = git_path_check_crlf(ccheck + 0);
+ ca->attr_action = ca->crlf_action;
+ ca->ident = git_path_check_ident(ccheck + 1);
+ ca->drv = git_path_check_convert(ccheck + 2);
+ if (ca->crlf_action != CRLF_BINARY) {
+ enum eol eol_attr = git_path_check_eol(ccheck + 3);
+ if (eol_attr == EOL_LF)
+ ca->crlf_action = CRLF_TEXT_INPUT;
+ else if (eol_attr == EOL_CRLF)
+ ca->crlf_action = CRLF_TEXT_CRLF;
+ }
+ ca->attr_action = ca->crlf_action;
} else {
ca->drv = NULL;
- ca->crlf_action = CRLF_GUESS;
- ca->eol_attr = EOL_UNSET;
+ ca->crlf_action = CRLF_UNDEFINED;
ca->ident = 0;
}
+ if (ca->crlf_action == CRLF_TEXT)
+ ca->crlf_action = text_eol_is_crlf() ? CRLF_TEXT_CRLF : CRLF_TEXT_INPUT;
+ if (ca->crlf_action == CRLF_UNDEFINED && auto_crlf == AUTO_CRLF_FALSE)
+ ca->crlf_action = CRLF_BINARY;
+ if (ca->crlf_action == CRLF_UNDEFINED && auto_crlf == AUTO_CRLF_TRUE)
+ ca->crlf_action = CRLF_AUTO_CRLF;
+ if (ca->crlf_action == CRLF_UNDEFINED && auto_crlf == AUTO_CRLF_INPUT)
+ ca->crlf_action = CRLF_AUTO_INPUT;
}
int would_convert_to_git_filter_fd(const char *path)
@@ -819,23 +829,25 @@ int would_convert_to_git_filter_fd(const char *path)
const char *get_convert_attr_ascii(const char *path)
{
struct conv_attrs ca;
- enum crlf_action crlf_action;
convert_attrs(&ca, path);
- crlf_action = input_crlf_action(ca.crlf_action, ca.eol_attr);
- switch (crlf_action) {
- case CRLF_GUESS:
+ switch (ca.attr_action) {
+ case CRLF_UNDEFINED:
return "";
case CRLF_BINARY:
return "-text";
case CRLF_TEXT:
return "text";
- case CRLF_INPUT:
+ case CRLF_TEXT_INPUT:
return "text eol=lf";
- case CRLF_CRLF:
- return "text=auto eol=crlf";
+ case CRLF_TEXT_CRLF:
+ return "text eol=crlf";
case CRLF_AUTO:
return "text=auto";
+ case CRLF_AUTO_CRLF:
+ return "text=auto eol=crlf"; /* This is not supported yet */
+ case CRLF_AUTO_INPUT:
+ return "text=auto eol=lf"; /* This is not supported yet */
}
return "";
}
@@ -862,7 +874,6 @@ int convert_to_git(const char *path, const char *src, size_t len,
src = dst->buf;
len = dst->len;
}
- ca.crlf_action = input_crlf_action(ca.crlf_action, ca.eol_attr);
ret |= crlf_to_git(path, src, len, dst, ca.crlf_action, checksafe);
if (ret && dst) {
src = dst->buf;
@@ -883,7 +894,6 @@ void convert_to_git_filter_fd(const char *path, int fd, struct strbuf *dst,
if (!apply_filter(path, NULL, 0, fd, dst, ca.drv->clean))
die("%s: clean filter '%s' failed", path, ca.drv->name);
- ca.crlf_action = input_crlf_action(ca.crlf_action, ca.eol_attr);
crlf_to_git(path, dst->buf, dst->len, dst, ca.crlf_action, checksafe);
ident_to_git(path, dst->buf, dst->len, dst, ca.ident);
}
@@ -913,7 +923,6 @@ static int convert_to_working_tree_internal(const char *path, const char *src,
* is a smudge filter. The filter might expect CRLFs.
*/
if (filter || !normalizing) {
- ca.crlf_action = input_crlf_action(ca.crlf_action, ca.eol_attr);
ret |= crlf_to_worktree(path, src, len, dst, ca.crlf_action);
if (ret) {
src = dst->buf;
@@ -1382,14 +1391,15 @@ struct stream_filter *get_stream_filter(const char *path, const unsigned char *s
if (ca.ident)
filter = ident_filter(sha1);
- crlf_action = input_crlf_action(ca.crlf_action, ca.eol_attr);
+ crlf_action = ca.crlf_action;
- if ((crlf_action == CRLF_BINARY) || (crlf_action == CRLF_INPUT) ||
- (crlf_action == CRLF_GUESS && auto_crlf == AUTO_CRLF_FALSE))
+ if ((crlf_action == CRLF_BINARY) ||
+ crlf_action == CRLF_AUTO_INPUT ||
+ (crlf_action == CRLF_TEXT_INPUT))
filter = cascade_filter(filter, &null_filter_singleton);
else if (output_eol(crlf_action) == EOL_CRLF &&
- !(crlf_action == CRLF_AUTO || crlf_action == CRLF_GUESS))
+ !(crlf_action == CRLF_AUTO || crlf_action == CRLF_AUTO_CRLF))
filter = cascade_filter(filter, lf_to_crlf_filter());
return filter;
diff --git a/credential-cache--daemon.c b/credential-cache--daemon.c
index cc65a9c..caef21e 100644
--- a/credential-cache--daemon.c
+++ b/credential-cache--daemon.c
@@ -215,7 +215,7 @@ static const char permissions_advice[] =
"users may be able to read your cached credentials. Consider running:\n"
"\n"
" chmod 0700 %s";
-static void check_socket_directory(const char *path)
+static void init_socket_directory(const char *path)
{
struct stat st;
char *path_copy = xstrdup(path);
@@ -224,20 +224,27 @@ static void check_socket_directory(const char *path)
if (!stat(dir, &st)) {
if (st.st_mode & 077)
die(permissions_advice, dir);
- free(path_copy);
- return;
+ } else {
+ /*
+ * We must be sure to create the directory with the correct mode,
+ * not just chmod it after the fact; otherwise, there is a race
+ * condition in which somebody can chdir to it, sleep, then try to open
+ * our protected socket.
+ */
+ if (safe_create_leading_directories_const(dir) < 0)
+ die_errno("unable to create directories for '%s'", dir);
+ if (mkdir(dir, 0700) < 0)
+ die_errno("unable to mkdir '%s'", dir);
}
- /*
- * We must be sure to create the directory with the correct mode,
- * not just chmod it after the fact; otherwise, there is a race
- * condition in which somebody can chdir to it, sleep, then try to open
- * our protected socket.
- */
- if (safe_create_leading_directories_const(dir) < 0)
- die_errno("unable to create directories for '%s'", dir);
- if (mkdir(dir, 0700) < 0)
- die_errno("unable to mkdir '%s'", dir);
+ if (chdir(dir))
+ /*
+ * We don't actually care what our cwd is; we chdir here just to
+ * be a friendly daemon and avoid tying up our original cwd.
+ * If this fails, it's OK to just continue without that benefit.
+ */
+ ;
+
free(path_copy);
}
@@ -264,7 +271,10 @@ int main(int argc, const char **argv)
if (!socket_path)
usage_with_options(usage, options);
- check_socket_directory(socket_path);
+ if (!is_absolute_path(socket_path))
+ die("socket directory must be an absolute path");
+
+ init_socket_directory(socket_path);
register_tempfile(&socket_file, socket_path);
if (ignore_sighup)
diff --git a/daemon.c b/daemon.c
index 46b411c..8d45c33 100644
--- a/daemon.c
+++ b/daemon.c
@@ -808,7 +808,7 @@ static void check_dead_children(void)
cradle = &blanket->next;
}
-static char **cld_argv;
+static struct argv_array cld_argv = ARGV_ARRAY_INIT;
static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
{
struct child_process cld = CHILD_PROCESS_INIT;
@@ -842,7 +842,7 @@ static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
#endif
}
- cld.argv = (const char **)cld_argv;
+ cld.argv = cld_argv.argv;
cld.in = incoming;
cld.out = dup(incoming);
@@ -1374,12 +1374,10 @@ int main(int argc, char **argv)
write_file(pid_file, "%"PRIuMAX, (uintmax_t) getpid());
/* prepare argv for serving-processes */
- cld_argv = xmalloc(sizeof (char *) * (argc + 2));
- cld_argv[0] = argv[0]; /* git-daemon */
- cld_argv[1] = "--serve";
+ argv_array_push(&cld_argv, argv[0]); /* git-daemon */
+ argv_array_push(&cld_argv, "--serve");
for (i = 1; i < argc; ++i)
- cld_argv[i+1] = argv[i];
- cld_argv[argc+1] = NULL;
+ argv_array_push(&cld_argv, argv[i]);
return serve(&listen_addr, listen_port, cred);
}
diff --git a/diff.c b/diff.c
index 2136b69..059123c 100644
--- a/diff.c
+++ b/diff.c
@@ -2607,12 +2607,9 @@ static void builtin_checkdiff(const char *name_a, const char *name_b,
struct diff_filespec *alloc_filespec(const char *path)
{
- int namelen = strlen(path);
- struct diff_filespec *spec = xmalloc(sizeof(*spec) + namelen + 1);
+ struct diff_filespec *spec;
- memset(spec, 0, sizeof(*spec));
- spec->path = (char *)(spec + 1);
- memcpy(spec->path, path, namelen+1);
+ FLEXPTR_ALLOC_STR(spec, path, path);
spec->count = 1;
spec->is_binary = -1;
return spec;
@@ -2707,21 +2704,21 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int
static int diff_populate_gitlink(struct diff_filespec *s, int size_only)
{
- int len;
- char *data = xmalloc(100), *dirty = "";
+ struct strbuf buf = STRBUF_INIT;
+ char *dirty = "";
/* Are we looking at the work tree? */
if (s->dirty_submodule)
dirty = "-dirty";
- len = snprintf(data, 100,
- "Subproject commit %s%s\n", sha1_to_hex(s->sha1), dirty);
- s->data = data;
- s->size = len;
- s->should_free = 1;
+ strbuf_addf(&buf, "Subproject commit %s%s\n", sha1_to_hex(s->sha1), dirty);
+ s->size = buf.len;
if (size_only) {
s->data = NULL;
- free(data);
+ strbuf_release(&buf);
+ } else {
+ s->data = strbuf_detach(&buf, NULL);
+ s->should_free = 1;
}
return 0;
}
@@ -5085,7 +5082,7 @@ size_t fill_textconv(struct userdiff_driver *driver,
{
size_t size;
- if (!driver || !driver->textconv) {
+ if (!driver) {
if (!DIFF_FILE_VALID(df)) {
*outbuf = "";
return 0;
@@ -5096,6 +5093,9 @@ size_t fill_textconv(struct userdiff_driver *driver,
return df->size;
}
+ if (!driver->textconv)
+ die("BUG: fill_textconv called with non-textconv driver");
+
if (driver->textconv_cache && df->sha1_valid) {
*outbuf = notes_cache_get(driver->textconv_cache, df->sha1,
&size);
diff --git a/diff.h b/diff.h
index 70b2d70..e7d68ed 100644
--- a/diff.h
+++ b/diff.h
@@ -222,8 +222,8 @@ struct combine_diff_path {
} parent[FLEX_ARRAY];
};
#define combine_diff_path_size(n, l) \
- (sizeof(struct combine_diff_path) + \
- sizeof(struct combine_diff_parent) * (n) + (l) + 1)
+ st_add4(sizeof(struct combine_diff_path), (l), 1, \
+ st_mult(sizeof(struct combine_diff_parent), (n)))
extern void show_combined_diff(struct combine_diff_path *elem, int num_parent,
int dense, struct rev_info *);
@@ -349,10 +349,26 @@ extern void diff_no_index(struct rev_info *, int, const char **);
extern int index_differs_from(const char *def, int diff_flags);
+/*
+ * Fill the contents of the filespec "df", respecting any textconv defined by
+ * its userdiff driver. The "driver" parameter must come from a
+ * previous call to get_textconv(), and therefore should either be NULL or have
+ * textconv enabled.
+ *
+ * Note that the memory ownership of the resulting buffer depends on whether
+ * the driver field is NULL. If it is, then the memory belongs to the filespec
+ * struct. If it is non-NULL, then "outbuf" points to a newly allocated buffer
+ * that should be freed by the caller.
+ */
extern size_t fill_textconv(struct userdiff_driver *driver,
struct diff_filespec *df,
char **outbuf);
+/*
+ * Look up the userdiff driver for the given filespec, and return it if
+ * and only if it has textconv enabled (otherwise return NULL). The result
+ * can be passed to fill_textconv().
+ */
extern struct userdiff_driver *get_textconv(struct diff_filespec *one);
extern int parse_rename_score(const char **cp_p);
diff --git a/diffcore-delta.c b/diffcore-delta.c
index 7cf431d..4159748 100644
--- a/diffcore-delta.c
+++ b/diffcore-delta.c
@@ -53,7 +53,8 @@ static struct spanhash_top *spanhash_rehash(struct spanhash_top *orig)
int osz = 1 << orig->alloc_log2;
int sz = osz << 1;
- new = xmalloc(sizeof(*orig) + sizeof(struct spanhash) * sz);
+ new = xmalloc(st_add(sizeof(*orig),
+ st_mult(sizeof(struct spanhash), sz)));
new->alloc_log2 = orig->alloc_log2 + 1;
new->free = INITIAL_FREE(new->alloc_log2);
memset(new->data, 0, sizeof(struct spanhash) * sz);
@@ -130,7 +131,8 @@ static struct spanhash_top *hash_chars(struct diff_filespec *one)
int is_text = !diff_filespec_is_binary(one);
i = INITIAL_HASH_SIZE;
- hash = xmalloc(sizeof(*hash) + sizeof(struct spanhash) * (1<<i));
+ hash = xmalloc(st_add(sizeof(*hash),
+ st_mult(sizeof(struct spanhash), 1<<i)));
hash->alloc_log2 = i;
hash->free = INITIAL_FREE(i);
memset(hash->data, 0, sizeof(struct spanhash) * (1<<i));
diff --git a/diffcore-order.c b/diffcore-order.c
index 97dd3d0..69d41f7 100644
--- a/diffcore-order.c
+++ b/diffcore-order.c
@@ -52,7 +52,7 @@ static void prepare_order(const char *orderfile)
}
if (pass == 0) {
order_cnt = cnt;
- order = xmalloc(sizeof(*order) * cnt);
+ ALLOC_ARRAY(order, cnt);
}
}
}
@@ -120,7 +120,7 @@ void diffcore_order(const char *orderfile)
if (!q->nr)
return;
- o = xmalloc(sizeof(*o) * q->nr);
+ ALLOC_ARRAY(o, q->nr);
for (i = 0; i < q->nr; i++)
o[i].obj = q->queue[i];
order_objects(orderfile, pair_pathtwo, o, q->nr);
diff --git a/diffcore-rename.c b/diffcore-rename.c
index af1fe08..3b3c1ed 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -537,7 +537,7 @@ void diffcore_rename(struct diff_options *options)
rename_dst_nr * rename_src_nr, 50, 1);
}
- mx = xcalloc(num_create * NUM_CANDIDATE_PER_DST, sizeof(*mx));
+ mx = xcalloc(st_mult(num_create, NUM_CANDIDATE_PER_DST), sizeof(*mx));
for (dst_cnt = i = 0; i < rename_dst_nr; i++) {
struct diff_filespec *two = rename_dst[i].two;
struct diff_score *m;
diff --git a/dir.c b/dir.c
index f0b6d0a..a4a9d9f 100644
--- a/dir.c
+++ b/dir.c
@@ -503,12 +503,7 @@ void add_exclude(const char *string, const char *base,
parse_exclude_pattern(&string, &patternlen, &flags, &nowildcardlen);
if (flags & EXC_FLAG_MUSTBEDIR) {
- char *s;
- x = xmalloc(sizeof(*x) + patternlen + 1);
- s = (char *)(x+1);
- memcpy(s, string, patternlen);
- s[patternlen] = '\0';
- x->pattern = s;
+ FLEXPTR_ALLOC_MEM(x, pattern, string, patternlen);
} else {
x = xmalloc(sizeof(*x));
x->pattern = string;
@@ -625,10 +620,7 @@ static struct untracked_cache_dir *lookup_untracked(struct untracked_cache *uc,
}
uc->dir_created++;
- d = xmalloc(sizeof(*d) + len + 1);
- memset(d, 0, sizeof(*d));
- memcpy(d->name, name, len);
- d->name[len] = '\0';
+ FLEX_ALLOC_MEM(d, name, name, len);
ALLOC_GROW(dir->dirs, dir->dirs_nr + 1, dir->dirs_alloc);
memmove(dir->dirs + first + 1, dir->dirs + first,
@@ -697,7 +689,7 @@ static int add_excludes(const char *fname, const char *base, int baselen,
return 0;
}
if (buf[size-1] != '\n') {
- buf = xrealloc(buf, size+1);
+ buf = xrealloc(buf, st_add(size, 1));
buf[size++] = '\n';
}
} else {
@@ -711,7 +703,7 @@ static int add_excludes(const char *fname, const char *base, int baselen,
close(fd);
return 0;
}
- buf = xmalloc(size+1);
+ buf = xmallocz(size);
if (read_in_full(fd, buf, size) != size) {
free(buf);
close(fd);
@@ -1167,10 +1159,8 @@ static struct dir_entry *dir_entry_new(const char *pathname, int len)
{
struct dir_entry *ent;
- ent = xmalloc(sizeof(*ent) + len + 1);
+ FLEX_ALLOC_MEM(ent, name, pathname, len);
ent->len = len;
- memcpy(ent->name, pathname, len);
- ent->name[len] = 0;
return ent;
}
@@ -2370,16 +2360,15 @@ void write_untracked_extension(struct strbuf *out, struct untracked_cache *untra
struct ondisk_untracked_cache *ouc;
struct write_data wd;
unsigned char varbuf[16];
- int len = 0, varint_len;
- if (untracked->exclude_per_dir)
- len = strlen(untracked->exclude_per_dir);
- ouc = xmalloc(sizeof(*ouc) + len + 1);
+ int varint_len;
+ size_t len = strlen(untracked->exclude_per_dir);
+
+ FLEX_ALLOC_MEM(ouc, exclude_per_dir, untracked->exclude_per_dir, len);
stat_data_to_disk(&ouc->info_exclude_stat, &untracked->ss_info_exclude.stat);
stat_data_to_disk(&ouc->excludes_file_stat, &untracked->ss_excludes_file.stat);
hashcpy(ouc->info_exclude_sha1, untracked->ss_info_exclude.sha1);
hashcpy(ouc->excludes_file_sha1, untracked->ss_excludes_file.sha1);
ouc->dir_flags = htonl(untracked->dir_flags);
- memcpy(ouc->exclude_per_dir, untracked->exclude_per_dir, len + 1);
varint_len = encode_varint(untracked->ident.len, varbuf);
strbuf_add(out, varbuf, varint_len);
@@ -2484,21 +2473,21 @@ static int read_one_dir(struct untracked_cache_dir **untracked_,
ud.untracked_alloc = value;
ud.untracked_nr = value;
if (ud.untracked_nr)
- ud.untracked = xmalloc(sizeof(*ud.untracked) * ud.untracked_nr);
+ ALLOC_ARRAY(ud.untracked, ud.untracked_nr);
data = next;
next = data;
ud.dirs_alloc = ud.dirs_nr = decode_varint(&next);
if (next > end)
return -1;
- ud.dirs = xmalloc(sizeof(*ud.dirs) * ud.dirs_nr);
+ ALLOC_ARRAY(ud.dirs, ud.dirs_nr);
data = next;
len = strlen((const char *)data);
next = data + len + 1;
if (next > rd->end)
return -1;
- *untracked_ = untracked = xmalloc(sizeof(*untracked) + len);
+ *untracked_ = untracked = xmalloc(st_add(sizeof(*untracked), len));
memcpy(untracked, &ud, sizeof(ud));
memcpy(untracked->name, data, len + 1);
data = next;
@@ -2611,7 +2600,7 @@ struct untracked_cache *read_untracked_extension(const void *data, unsigned long
rd.data = next;
rd.end = end;
rd.index = 0;
- rd.ucd = xmalloc(sizeof(*rd.ucd) * len);
+ ALLOC_ARRAY(rd.ucd, len);
if (read_one_dir(&uc->root, &rd) || rd.index != len)
goto done;
diff --git a/entry.c b/entry.c
index 582c400..a410957 100644
--- a/entry.c
+++ b/entry.c
@@ -6,7 +6,7 @@
static void create_directories(const char *path, int path_len,
const struct checkout *state)
{
- char *buf = xmalloc(path_len + 1);
+ char *buf = xmallocz(path_len);
int len = 0;
while (len < path_len) {
diff --git a/ewah/bitmap.c b/ewah/bitmap.c
index 47ad674..7103cee 100644
--- a/ewah/bitmap.c
+++ b/ewah/bitmap.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-#include "git-compat-util.h"
+#include "cache.h"
#include "ewok.h"
#define EWAH_MASK(x) ((eword_t)1 << (x % BITS_IN_EWORD))
@@ -25,8 +25,8 @@
struct bitmap *bitmap_new(void)
{
- struct bitmap *bitmap = ewah_malloc(sizeof(struct bitmap));
- bitmap->words = ewah_calloc(32, sizeof(eword_t));
+ struct bitmap *bitmap = xmalloc(sizeof(struct bitmap));
+ bitmap->words = xcalloc(32, sizeof(eword_t));
bitmap->word_alloc = 32;
return bitmap;
}
@@ -38,9 +38,7 @@ void bitmap_set(struct bitmap *self, size_t pos)
if (block >= self->word_alloc) {
size_t old_size = self->word_alloc;
self->word_alloc = block * 2;
- self->words = ewah_realloc(self->words,
- self->word_alloc * sizeof(eword_t));
-
+ REALLOC_ARRAY(self->words, self->word_alloc);
memset(self->words + old_size, 0x0,
(self->word_alloc - old_size) * sizeof(eword_t));
}
@@ -100,12 +98,7 @@ struct bitmap *ewah_to_bitmap(struct ewah_bitmap *ewah)
ewah_iterator_init(&it, ewah);
while (ewah_iterator_next(&blowup, &it)) {
- if (i >= bitmap->word_alloc) {
- bitmap->word_alloc *= 1.5;
- bitmap->words = ewah_realloc(
- bitmap->words, bitmap->word_alloc * sizeof(eword_t));
- }
-
+ ALLOC_GROW(bitmap->words, i + 1, bitmap->word_alloc);
bitmap->words[i++] = blowup;
}
@@ -134,8 +127,7 @@ void bitmap_or_ewah(struct bitmap *self, struct ewah_bitmap *other)
if (self->word_alloc < other_final) {
self->word_alloc = other_final;
- self->words = ewah_realloc(self->words,
- self->word_alloc * sizeof(eword_t));
+ REALLOC_ARRAY(self->words, self->word_alloc);
memset(self->words + original_size, 0x0,
(self->word_alloc - original_size) * sizeof(eword_t));
}
diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c
index b522437..2dc9c82 100644
--- a/ewah/ewah_bitmap.c
+++ b/ewah/ewah_bitmap.c
@@ -39,8 +39,7 @@ static inline void buffer_grow(struct ewah_bitmap *self, size_t new_size)
return;
self->alloc_size = new_size;
- self->buffer = ewah_realloc(self->buffer,
- self->alloc_size * sizeof(eword_t));
+ REALLOC_ARRAY(self->buffer, self->alloc_size);
self->rlw = self->buffer + (rlw_offset / sizeof(eword_t));
}
@@ -282,12 +281,9 @@ struct ewah_bitmap *ewah_new(void)
{
struct ewah_bitmap *self;
- self = ewah_malloc(sizeof(struct ewah_bitmap));
- if (self == NULL)
- return NULL;
-
- self->buffer = ewah_malloc(32 * sizeof(eword_t));
+ self = xmalloc(sizeof(struct ewah_bitmap));
self->alloc_size = 32;
+ ALLOC_ARRAY(self->buffer, self->alloc_size);
ewah_clear(self);
return self;
diff --git a/ewah/ewah_io.c b/ewah/ewah_io.c
index 43481b9..61f6a43 100644
--- a/ewah/ewah_io.c
+++ b/ewah/ewah_io.c
@@ -134,11 +134,7 @@ int ewah_read_mmap(struct ewah_bitmap *self, const void *map, size_t len)
self->buffer_size = self->alloc_size = get_be32(ptr);
ptr += sizeof(uint32_t);
- self->buffer = ewah_realloc(self->buffer,
- self->alloc_size * sizeof(eword_t));
-
- if (!self->buffer)
- return -1;
+ REALLOC_ARRAY(self->buffer, self->alloc_size);
/*
* Copy the raw data for the bitmap as a whole chunk;
@@ -180,11 +176,7 @@ int ewah_deserialize(struct ewah_bitmap *self, int fd)
return -1;
self->buffer_size = self->alloc_size = (size_t)ntohl(word_count);
- self->buffer = ewah_realloc(self->buffer,
- self->alloc_size * sizeof(eword_t));
-
- if (!self->buffer)
- return -1;
+ REALLOC_ARRAY(self->buffer, self->alloc_size);
/** 64 bit x N -- compressed words */
buffer = self->buffer;
diff --git a/ewah/ewok.h b/ewah/ewok.h
index 6e2c5e1..269a1a8 100644
--- a/ewah/ewok.h
+++ b/ewah/ewok.h
@@ -20,16 +20,6 @@
#ifndef __EWOK_BITMAP_H__
#define __EWOK_BITMAP_H__
-#ifndef ewah_malloc
-# define ewah_malloc xmalloc
-#endif
-#ifndef ewah_realloc
-# define ewah_realloc xrealloc
-#endif
-#ifndef ewah_calloc
-# define ewah_calloc xcalloc
-#endif
-
struct strbuf;
typedef uint64_t eword_t;
#define BITS_IN_EWORD (sizeof(eword_t) * 8)
diff --git a/exec_cmd.c b/exec_cmd.c
index e85f0fd..9d5703a 100644
--- a/exec_cmd.c
+++ b/exec_cmd.c
@@ -1,6 +1,7 @@
#include "cache.h"
#include "exec_cmd.h"
#include "quote.h"
+#include "argv-array.h"
#define MAX_ARGS 32
static const char *argv_exec_path;
@@ -43,12 +44,10 @@ const char *git_extract_argv0_path(const char *argv0)
if (!argv0 || !*argv0)
return NULL;
- slash = argv0 + strlen(argv0);
- while (argv0 <= slash && !is_dir_sep(*slash))
- slash--;
+ slash = find_last_dir_sep(argv0);
- if (slash >= argv0) {
+ if (slash) {
argv0_path = xstrndup(argv0, slash - argv0);
return slash + 1;
}
@@ -107,32 +106,25 @@ void setup_path(void)
strbuf_release(&new_path);
}
-const char **prepare_git_cmd(const char **argv)
+const char **prepare_git_cmd(struct argv_array *out, const char **argv)
{
- int argc;
- const char **nargv;
-
- for (argc = 0; argv[argc]; argc++)
- ; /* just counting */
- nargv = xmalloc(sizeof(*nargv) * (argc + 2));
-
- nargv[0] = "git";
- for (argc = 0; argv[argc]; argc++)
- nargv[argc + 1] = argv[argc];
- nargv[argc + 1] = NULL;
- return nargv;
+ argv_array_push(out, "git");
+ argv_array_pushv(out, argv);
+ return out->argv;
}
int execv_git_cmd(const char **argv) {
- const char **nargv = prepare_git_cmd(argv);
- trace_argv_printf(nargv, "trace: exec:");
+ struct argv_array nargv = ARGV_ARRAY_INIT;
+
+ prepare_git_cmd(&nargv, argv);
+ trace_argv_printf(nargv.argv, "trace: exec:");
/* execvp() can only ever return if it fails */
- sane_execvp("git", (char **)nargv);
+ sane_execvp("git", (char **)nargv.argv);
trace_printf("trace: exec failed: %s\n", strerror(errno));
- free(nargv);
+ argv_array_clear(&nargv);
return -1;
}
diff --git a/exec_cmd.h b/exec_cmd.h
index 93b0c02..1f6b433 100644
--- a/exec_cmd.h
+++ b/exec_cmd.h
@@ -1,11 +1,13 @@
#ifndef GIT_EXEC_CMD_H
#define GIT_EXEC_CMD_H
+struct argv_array;
+
extern void git_set_argv_exec_path(const char *exec_path);
extern const char *git_extract_argv0_path(const char *path);
extern const char *git_exec_path(void);
extern void setup_path(void);
-extern const char **prepare_git_cmd(const char **argv);
+extern const char **prepare_git_cmd(struct argv_array *out, const char **argv);
extern int execv_git_cmd(const char **argv); /* NULL terminated */
LAST_ARG_MUST_BE_NULL
extern int execl_git_cmd(const char *cmd, ...);
diff --git a/fast-import.c b/fast-import.c
index bf01b34..9fc7093 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -622,7 +622,7 @@ static void *pool_alloc(size_t len)
return xmalloc(len);
}
total_allocd += sizeof(struct mem_pool) + mem_pool_alloc;
- p = xmalloc(sizeof(struct mem_pool) + mem_pool_alloc);
+ p = xmalloc(st_add(sizeof(struct mem_pool), mem_pool_alloc));
p->next_pool = mem_pool;
p->next_free = (char *) p->space;
p->end = p->next_free + mem_pool_alloc;
@@ -814,7 +814,8 @@ static struct tree_entry *new_tree_entry(void)
if (!avail_tree_entry) {
unsigned int n = tree_entry_alloc;
total_allocd += n * sizeof(struct tree_entry);
- avail_tree_entry = e = xmalloc(n * sizeof(struct tree_entry));
+ ALLOC_ARRAY(e, n);
+ avail_tree_entry = e;
while (n-- > 1) {
*((void**)e) = e + 1;
e++;
@@ -864,15 +865,12 @@ static void start_packfile(void)
{
static char tmp_file[PATH_MAX];
struct packed_git *p;
- int namelen;
struct pack_header hdr;
int pack_fd;
pack_fd = odb_mkstemp(tmp_file, sizeof(tmp_file),
"pack/tmp_pack_XXXXXX");
- namelen = strlen(tmp_file) + 2;
- p = xcalloc(1, sizeof(*p) + namelen);
- xsnprintf(p->pack_name, namelen, "%s", tmp_file);
+ FLEX_ALLOC_STR(p, pack_name, tmp_file);
p->pack_fd = pack_fd;
p->do_not_close = 1;
pack_file = sha1fd(pack_fd, p->pack_name);
@@ -898,7 +896,7 @@ static const char *create_index(void)
struct object_entry_pool *o;
/* Build the table of object IDs. */
- idx = xmalloc(object_count * sizeof(*idx));
+ ALLOC_ARRAY(idx, object_count);
c = idx;
for (o = blocks; o; o = o->next_pool)
for (e = o->next_free; e-- != o->entries;)
diff --git a/fetch-pack.c b/fetch-pack.c
index 01e34b6..f96f6df 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -15,6 +15,7 @@
#include "version.h"
#include "prio-queue.h"
#include "sha1-array.h"
+#include "sigchain.h"
static int transfer_unpack_limit = -1;
static int fetch_unpack_limit = -1;
@@ -671,9 +672,12 @@ static int everything_local(struct fetch_pack_args *args,
static int sideband_demux(int in, int out, void *data)
{
int *xd = data;
+ int ret;
- int ret = recv_sideband("fetch-pack", xd[0], out);
+ sigchain_push(SIGPIPE, SIG_IGN);
+ ret = recv_sideband("fetch-pack", xd[0], out);
close(out);
+ sigchain_pop(SIGPIPE);
return ret;
}
diff --git a/fsck.c b/fsck.c
index c637f66..ca4c685 100644
--- a/fsck.c
+++ b/fsck.c
@@ -199,7 +199,8 @@ void fsck_set_msg_type(struct fsck_options *options,
if (!options->msg_type) {
int i;
- int *msg_type = xmalloc(sizeof(int) * FSCK_MSG_MAX);
+ int *msg_type;
+ ALLOC_ARRAY(msg_type, FSCK_MSG_MAX);
for (i = 0; i < FSCK_MSG_MAX; i++)
msg_type[i] = fsck_msg_type(i, options);
options->msg_type = msg_type;
diff --git a/git-compat-util.h b/git-compat-util.h
index 693a336..4743954 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -96,6 +96,14 @@
#define unsigned_add_overflows(a, b) \
((b) > maximum_unsigned_value_of_type(a) - (a))
+/*
+ * Returns true if the multiplication of "a" and "b" will
+ * overflow. The types of "a" and "b" must match and must be unsigned.
+ * Note that this macro evaluates "a" twice!
+ */
+#define unsigned_mult_overflows(a, b) \
+ ((a) && (b) > maximum_unsigned_value_of_type(a) / (a))
+
#ifdef __GNUC__
#define TYPEOF(x) (__typeof__(x))
#else
@@ -325,10 +333,6 @@ extern char *gitdirname(char *);
#define _PATH_DEFPATH "/usr/local/bin:/usr/bin:/bin"
#endif
-#ifndef STRIP_EXTENSION
-#define STRIP_EXTENSION ""
-#endif
-
#ifndef has_dos_drive_prefix
static inline int git_has_dos_drive_prefix(const char *path)
{
@@ -673,7 +677,6 @@ extern int git_vsnprintf(char *str, size_t maxsize,
#ifdef __GLIBC_PREREQ
#if __GLIBC_PREREQ(2, 1)
#define HAVE_STRCHRNUL
-#define HAVE_MEMPCPY
#endif
#endif
@@ -687,14 +690,6 @@ static inline char *gitstrchrnul(const char *s, int c)
}
#endif
-#ifndef HAVE_MEMPCPY
-#define mempcpy gitmempcpy
-static inline void *gitmempcpy(void *dest, const void *src, size_t n)
-{
- return (char *)memcpy(dest, src, n) + n;
-}
-#endif
-
#ifdef NO_INET_PTON
int inet_pton(int af, const char *src, void *dst);
#endif
@@ -713,6 +708,32 @@ extern void release_pack_memory(size_t);
typedef void (*try_to_free_t)(size_t);
extern try_to_free_t set_try_to_free_routine(try_to_free_t);
+static inline size_t st_add(size_t a, size_t b)
+{
+ if (unsigned_add_overflows(a, b))
+ die("size_t overflow: %"PRIuMAX" + %"PRIuMAX,
+ (uintmax_t)a, (uintmax_t)b);
+ return a + b;
+}
+#define st_add3(a,b,c) st_add(st_add((a),(b)),(c))
+#define st_add4(a,b,c,d) st_add(st_add3((a),(b),(c)),(d))
+
+static inline size_t st_mult(size_t a, size_t b)
+{
+ if (unsigned_mult_overflows(a, b))
+ die("size_t overflow: %"PRIuMAX" * %"PRIuMAX,
+ (uintmax_t)a, (uintmax_t)b);
+ return a * b;
+}
+
+static inline size_t st_sub(size_t a, size_t b)
+{
+ if (a < b)
+ die("size_t underflow: %"PRIuMAX" - %"PRIuMAX,
+ (uintmax_t)a, (uintmax_t)b);
+ return a - b;
+}
+
#ifdef HAVE_ALLOCA_H
# include <alloca.h>
# define xalloca(size) (alloca(size))
@@ -745,7 +766,70 @@ extern int odb_pack_keep(char *name, size_t namesz, const unsigned char *sha1);
extern char *xgetcwd(void);
extern FILE *fopen_for_writing(const char *path);
-#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), (alloc) * sizeof(*(x)))
+#define ALLOC_ARRAY(x, alloc) (x) = xmalloc(st_mult(sizeof(*(x)), (alloc)))
+#define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc)))
+
+/*
+ * These functions help you allocate structs with flex arrays, and copy
+ * the data directly into the array. For example, if you had:
+ *
+ * struct foo {
+ * int bar;
+ * char name[FLEX_ARRAY];
+ * };
+ *
+ * you can do:
+ *
+ * struct foo *f;
+ * FLEX_ALLOC_MEM(f, name, src, len);
+ *
+ * to allocate a "foo" with the contents of "src" in the "name" field.
+ * The resulting struct is automatically zero'd, and the flex-array field
+ * is NUL-terminated (whether the incoming src buffer was or not).
+ *
+ * The FLEXPTR_* variants operate on structs that don't use flex-arrays,
+ * but do want to store a pointer to some extra data in the same allocated
+ * block. For example, if you have:
+ *
+ * struct foo {
+ * char *name;
+ * int bar;
+ * };
+ *
+ * you can do:
+ *
+ * struct foo *f;
+ * FLEX_ALLOC_STR(f, name, src);
+ *
+ * and "name" will point to a block of memory after the struct, which will be
+ * freed along with the struct (but the pointer can be repointed anywhere).
+ *
+ * The *_STR variants accept a string parameter rather than a ptr/len
+ * combination.
+ *
+ * Note that these macros will evaluate the first parameter multiple
+ * times, and it must be assignable as an lvalue.
+ */
+#define FLEX_ALLOC_MEM(x, flexname, buf, len) do { \
+ (x) = NULL; /* silence -Wuninitialized for offset calculation */ \
+ (x) = xalloc_flex(sizeof(*(x)), (char *)(&((x)->flexname)) - (char *)(x), (buf), (len)); \
+} while (0)
+#define FLEXPTR_ALLOC_MEM(x, ptrname, buf, len) do { \
+ (x) = xalloc_flex(sizeof(*(x)), sizeof(*(x)), (buf), (len)); \
+ (x)->ptrname = (void *)((x)+1); \
+} while(0)
+#define FLEX_ALLOC_STR(x, flexname, str) \
+ FLEX_ALLOC_MEM((x), flexname, (str), strlen(str))
+#define FLEXPTR_ALLOC_STR(x, ptrname, str) \
+ FLEXPTR_ALLOC_MEM((x), ptrname, (str), strlen(str))
+
+static inline void *xalloc_flex(size_t base_len, size_t offset,
+ const void *src, size_t src_len)
+{
+ unsigned char *ret = xcalloc(1, st_add3(base_len, src_len, 1));
+ memcpy(ret + offset, src, src_len);
+ return ret;
+}
static inline char *xstrdup_or_null(const char *str)
{
diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh
index cdc02af..424b034 100755
--- a/git-merge-one-file.sh
+++ b/git-merge-one-file.sh
@@ -120,8 +120,7 @@ case "${1:-.}${2:-.}${3:-.}" in
case "$1" in
'')
echo "Added $4 in both, but differently."
- orig=$(git-unpack-file $2)
- create_virtual_base "$orig" "$src2"
+ orig=$(git-unpack-file e69de29bb2d1d6434b8b29ae775ad8c2e48c5391)
;;
*)
echo "Auto-merging $4"
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index c0cfe88..4cde685 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -1233,7 +1233,8 @@ then
git rev-list $revisions |
while read rev
do
- if test -f "$rewritten"/$rev && test "$(sane_grep "$rev" "$state_dir"/not-cherry-picks)" = ""
+ if test -f "$rewritten"/$rev &&
+ ! sane_grep "$rev" "$state_dir"/not-cherry-picks >/dev/null
then
# Use -f2 because if rev-list is telling us this commit is
# not worthwhile, we don't want to track its multiple heads,
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index 4691fbc..c48139a 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -168,11 +168,11 @@ git_pager() {
}
sane_grep () {
- GREP_OPTIONS= LC_ALL=C grep "$@"
+ GREP_OPTIONS= LC_ALL=C grep @@SANE_TEXT_GREP@@ "$@"
}
sane_egrep () {
- GREP_OPTIONS= LC_ALL=C egrep "$@"
+ GREP_OPTIONS= LC_ALL=C egrep @@SANE_TEXT_GREP@@ "$@"
}
is_bare_repository () {
diff --git a/git-submodule.sh b/git-submodule.sh
index 9bc5c5f..43c68de 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -591,6 +591,24 @@ cmd_deinit()
done
}
+is_tip_reachable () (
+ clear_local_git_env
+ cd "$1" &&
+ rev=$(git rev-list -n 1 "$2" --not --all 2>/dev/null) &&
+ test -z "$rev"
+)
+
+fetch_in_submodule () (
+ clear_local_git_env
+ cd "$1" &&
+ case "$2" in
+ '')
+ git fetch ;;
+ *)
+ git fetch $(get_default_remote) "$2" ;;
+ esac
+)
+
#
# Update each submodule path to correct revision, using clone and checkout as needed
#
@@ -745,10 +763,15 @@ Maybe you want to use 'update --init'?")"
then
# Run fetch only if $sha1 isn't present or it
# is not reachable from a ref.
- (clear_local_git_env; cd "$sm_path" &&
- ( (rev=$(git rev-list -n 1 $sha1 --not --all 2>/dev/null) &&
- test -z "$rev") || git-fetch)) ||
+ is_tip_reachable "$sm_path" "$sha1" ||
+ fetch_in_submodule "$sm_path" ||
die "$(eval_gettext "Unable to fetch in submodule path '\$displaypath'")"
+
+ # Now we tried the usual fetch, but $sha1 may
+ # not be reachable from any of the refs
+ is_tip_reachable "$sm_path" "$sha1" ||
+ fetch_in_submodule "$sm_path" "$sha1" ||
+ die "$(eval_gettext "Fetched in submodule path '\$displaypath', but it did not contain $sha1. Direct fetching of that commit failed.")"
fi
# Is this something we just cloned?
diff --git a/git-svn.perl b/git-svn.perl
index fa5f253..05eced0 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -1745,11 +1745,12 @@ sub post_fetch_checkout {
sub complete_svn_url {
my ($url, $path) = @_;
- $path = canonicalize_path($path);
- # If the path is not a URL...
- if ($path !~ m#^[a-z\+]+://#) {
- if (!defined $url || $url !~ m#^[a-z\+]+://#) {
+ if ($path =~ m#^[a-z\+]+://#i) { # path is a URL
+ $path = canonicalize_url($path);
+ } else {
+ $path = canonicalize_path($path);
+ if (!defined $url || $url !~ m#^[a-z\+]+://#i) {
fatal("E: '$path' is not a complete URL ",
"and a separate URL is not specified");
}
@@ -1764,11 +1765,12 @@ sub complete_url_ls_init {
print STDERR "W: $switch not specified\n";
return;
}
- $repo_path = canonicalize_path($repo_path);
- if ($repo_path =~ m#^[a-z\+]+://#) {
+ if ($repo_path =~ m#^[a-z\+]+://#i) {
+ $repo_path = canonicalize_url($repo_path);
$ra = Git::SVN::Ra->new($repo_path);
$repo_path = '';
} else {
+ $repo_path = canonicalize_path($repo_path);
$repo_path =~ s#^/+##;
unless ($ra) {
fatal("E: '$repo_path' is not a complete URL ",
diff --git a/git.c b/git.c
index 6c64c94..6cc0c07 100644
--- a/git.c
+++ b/git.c
@@ -247,20 +247,16 @@ static int handle_alias(int *argcp, const char ***argv)
alias_string = alias_lookup(alias_command);
if (alias_string) {
if (alias_string[0] == '!') {
- const char **alias_argv;
- int argc = *argcp, i;
+ struct child_process child = CHILD_PROCESS_INIT;
commit_pager_choice();
restore_env(1);
- /* build alias_argv */
- alias_argv = xmalloc(sizeof(*alias_argv) * (argc + 1));
- alias_argv[0] = alias_string + 1;
- for (i = 1; i < argc; ++i)
- alias_argv[i] = (*argv)[i];
- alias_argv[argc] = NULL;
+ child.use_shell = 1;
+ argv_array_push(&child.args, alias_string + 1);
+ argv_array_pushv(&child.args, (*argv) + 1);
- ret = run_command_v_opt(alias_argv, RUN_USING_SHELL);
+ ret = run_command(&child);
if (ret >= 0) /* normal exit */
exit(ret);
@@ -513,21 +509,25 @@ int is_builtin(const char *s)
return !!get_builtin(s);
}
+#ifdef STRIP_EXTENSION
+static void strip_extension(const char **argv)
+{
+ size_t len;
+
+ if (strip_suffix(argv[0], STRIP_EXTENSION, &len))
+ argv[0] = xmemdupz(argv[0], len);
+}
+#else
+#define strip_extension(cmd)
+#endif
+
static void handle_builtin(int argc, const char **argv)
{
- const char *cmd = argv[0];
- int i;
- static const char ext[] = STRIP_EXTENSION;
+ const char *cmd;
struct cmd_struct *builtin;
- if (sizeof(ext) > 1) {
- i = strlen(argv[0]) - strlen(ext);
- if (i > 0 && !strcmp(argv[0] + i, ext)) {
- char *argv0 = xstrdup(argv[0]);
- argv[0] = cmd = argv0;
- argv0[i] = '\0';
- }
- }
+ strip_extension(argv);
+ cmd = argv[0];
/* Turn "git cmd --help" into "git help cmd" */
if (argc > 1 && !strcmp(argv[1], "--help")) {
diff --git a/gitk-git/gitk b/gitk-git/gitk
index 5f1255c..805a1c7 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -3021,7 +3021,7 @@ proc bindall {event action} {
}
proc about {} {
- global uifont NS
+ global bgcolor NS
set w .about
if {[winfo exists $w]} {
raise $w
@@ -3036,7 +3036,7 @@ Gitk - a commit viewer for git
Copyright \u00a9 2005-2014 Paul Mackerras
Use and redistribute under the terms of the GNU General Public License"] \
- -justify center -aspect 400 -border 2 -bg white -relief groove
+ -justify center -aspect 400 -border 2 -bg $bgcolor -relief groove
pack $w.m -side top -fill x -padx 2 -pady 2
${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
pack $w.ok -side bottom
@@ -3047,7 +3047,7 @@ Use and redistribute under the terms of the GNU General Public License"] \
}
proc keys {} {
- global NS
+ global bgcolor NS
set w .keys
if {[winfo exists $w]} {
raise $w
@@ -3103,7 +3103,7 @@ proc keys {} {
[mc "<%s-minus> Decrease font size" $M1T]
[mc "<F5> Update"]
" \
- -justify left -bg white -border 2 -relief groove
+ -justify left -bg $bgcolor -border 2 -relief groove
pack $w.m -side top -fill both -padx 2 -pady 2
${NS}::button $w.ok -text [mc "Close"] -command "destroy $w" -default active
bind $w <Key-Escape> [list destroy $w]
diff --git a/gitk-git/po/bg.po b/gitk-git/po/bg.po
index 909a564..99aa77a 100644
--- a/gitk-git/po/bg.po
+++ b/gitk-git/po/bg.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: gitk master\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-06-27 20:44+0300\n"
-"PO-Revision-Date: 2015-06-27 20:46+0300\n"
+"POT-Creation-Date: 2015-12-19 11:48+0200\n"
+"PO-Revision-Date: 2015-12-19 11:49+0200\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -22,11 +22,11 @@ msgstr ""
msgid "Couldn't get list of unmerged files:"
msgstr "Списъкът с неслети файлове не може да бъде получен:"
-#: gitk:212 gitk:2381
+#: gitk:212 gitk:2399
msgid "Color words"
msgstr "Оцветяване на думите"
-#: gitk:217 gitk:2381 gitk:8220 gitk:8253
+#: gitk:217 gitk:2399 gitk:8239 gitk:8272
msgid "Markup words"
msgstr "Отбелязване на думите"
@@ -59,15 +59,15 @@ msgstr "Грешка при изпълнение на „git log“:"
msgid "Reading"
msgstr "Прочитане"
-#: gitk:496 gitk:4525
+#: gitk:496 gitk:4544
msgid "Reading commits..."
msgstr "Прочитане на подаванията…"
-#: gitk:499 gitk:1637 gitk:4528
+#: gitk:499 gitk:1637 gitk:4547
msgid "No commits selected"
msgstr "Не са избрани подавания"
-#: gitk:1445 gitk:4045 gitk:12432
+#: gitk:1445 gitk:4064 gitk:12469
msgid "Command line"
msgstr "Команден ред"
@@ -79,286 +79,294 @@ msgstr "Изходът от „git log“ не може да се анализи
msgid "No commit information available"
msgstr "Липсва информация за подавания"
-#: gitk:1903 gitk:1932 gitk:4315 gitk:9669 gitk:11241 gitk:11521
+#: gitk:1903 gitk:1932 gitk:4334 gitk:9702 gitk:11274 gitk:11554
msgid "OK"
msgstr "Добре"
-#: gitk:1934 gitk:4317 gitk:9196 gitk:9275 gitk:9391 gitk:9440 gitk:9671
-#: gitk:11242 gitk:11522
+#: gitk:1934 gitk:4336 gitk:9215 gitk:9294 gitk:9424 gitk:9473 gitk:9704
+#: gitk:11275 gitk:11555
msgid "Cancel"
msgstr "Отказ"
-#: gitk:2069
+#: gitk:2083
msgid "&Update"
-msgstr "Обновяване"
+msgstr "&Обновяване"
-#: gitk:2070
+#: gitk:2084
msgid "&Reload"
-msgstr "Презареждане"
+msgstr "&Презареждане"
-#: gitk:2071
+#: gitk:2085
msgid "Reread re&ferences"
-msgstr "Наново прочитане на настройките"
+msgstr "&Наново прочитане на настройките"
-#: gitk:2072
+#: gitk:2086
msgid "&List references"
-msgstr "Изброяване на указателите"
+msgstr "&Изброяване на указателите"
-#: gitk:2074
+#: gitk:2088
msgid "Start git &gui"
-msgstr "Стартиране на „git gui“"
+msgstr "&Стартиране на „git gui“"
-#: gitk:2076
+#: gitk:2090
msgid "&Quit"
-msgstr "Спиране на програмата"
+msgstr "&Спиране на програмата"
-#: gitk:2068
+#: gitk:2082
msgid "&File"
-msgstr "Файл"
+msgstr "&Файл"
-#: gitk:2080
+#: gitk:2094
msgid "&Preferences"
-msgstr "Настройки"
+msgstr "&Настройки"
-#: gitk:2079
+#: gitk:2093
msgid "&Edit"
-msgstr "Редактиране"
+msgstr "&Редактиране"
-#: gitk:2084
+#: gitk:2098
msgid "&New view..."
-msgstr "Нов изглед…"
+msgstr "&Нов изглед…"
-#: gitk:2085
+#: gitk:2099
msgid "&Edit view..."
-msgstr "Редактиране на изгледа…"
+msgstr "&Редактиране на изгледа…"
-#: gitk:2086
+#: gitk:2100
msgid "&Delete view"
-msgstr "Изтриване на изгледа"
+msgstr "&Изтриване на изгледа"
-#: gitk:2088 gitk:4043
+#: gitk:2102
msgid "&All files"
-msgstr "Всички файлове"
+msgstr "&Всички файлове"
-#: gitk:2083 gitk:4067
+#: gitk:2097
msgid "&View"
-msgstr "Изглед"
+msgstr "&Изглед"
-#: gitk:2093 gitk:2103 gitk:3012
+#: gitk:2107 gitk:2117
msgid "&About gitk"
-msgstr "Относно gitk"
+msgstr "&Относно gitk"
-#: gitk:2094 gitk:2108
+#: gitk:2108 gitk:2122
msgid "&Key bindings"
-msgstr "Клавишни комбинации"
+msgstr "&Клавишни комбинации"
-#: gitk:2092 gitk:2107
+#: gitk:2106 gitk:2121
msgid "&Help"
-msgstr "Помощ"
+msgstr "Помо&щ"
-#: gitk:2185 gitk:8652
+#: gitk:2199 gitk:8671
msgid "SHA1 ID:"
msgstr "SHA1:"
-#: gitk:2229
+#: gitk:2243
msgid "Row"
msgstr "Ред"
-#: gitk:2267
+#: gitk:2281
msgid "Find"
msgstr "Търсене"
-#: gitk:2295
+#: gitk:2309
msgid "commit"
msgstr "подаване"
-#: gitk:2299 gitk:2301 gitk:4687 gitk:4710 gitk:4734 gitk:6755 gitk:6827
-#: gitk:6912
+#: gitk:2313 gitk:2315 gitk:4706 gitk:4729 gitk:4753 gitk:6774 gitk:6846
+#: gitk:6931
msgid "containing:"
msgstr "съдържащо:"
-#: gitk:2302 gitk:3526 gitk:3531 gitk:4763
+#: gitk:2316 gitk:3545 gitk:3550 gitk:4782
msgid "touching paths:"
msgstr "засягащо пътищата:"
-#: gitk:2303 gitk:4777
+#: gitk:2317 gitk:4796
msgid "adding/removing string:"
msgstr "добавящо/премахващо низ"
-#: gitk:2304 gitk:4779
+#: gitk:2318 gitk:4798
msgid "changing lines matching:"
msgstr "променящо редове напасващи:"
-#: gitk:2313 gitk:2315 gitk:4766
+#: gitk:2327 gitk:2329 gitk:4785
msgid "Exact"
msgstr "Точно"
-#: gitk:2315 gitk:4854 gitk:6723
+#: gitk:2329 gitk:4873 gitk:6742
msgid "IgnCase"
msgstr "Без регистър"
-#: gitk:2315 gitk:4736 gitk:4852 gitk:6719
+#: gitk:2329 gitk:4755 gitk:4871 gitk:6738
msgid "Regexp"
msgstr "Рег. израз"
-#: gitk:2317 gitk:2318 gitk:4874 gitk:4904 gitk:4911 gitk:6848 gitk:6916
+#: gitk:2331 gitk:2332 gitk:4893 gitk:4923 gitk:4930 gitk:6867 gitk:6935
msgid "All fields"
msgstr "Всички полета"
-#: gitk:2318 gitk:4871 gitk:4904 gitk:6786
+#: gitk:2332 gitk:4890 gitk:4923 gitk:6805
msgid "Headline"
msgstr "Първи ред"
-#: gitk:2319 gitk:4871 gitk:6786 gitk:6916 gitk:7389
+#: gitk:2333 gitk:4890 gitk:6805 gitk:6935 gitk:7408
msgid "Comments"
msgstr "Коментари"
-#: gitk:2319 gitk:4871 gitk:4876 gitk:4911 gitk:6786 gitk:7324 gitk:8830
-#: gitk:8845
+#: gitk:2333 gitk:4890 gitk:4895 gitk:4930 gitk:6805 gitk:7343 gitk:8849
+#: gitk:8864
msgid "Author"
msgstr "Автор"
-#: gitk:2319 gitk:4871 gitk:6786 gitk:7326
+#: gitk:2333 gitk:4890 gitk:6805 gitk:7345
msgid "Committer"
msgstr "Подаващ"
-#: gitk:2350
+#: gitk:2367
msgid "Search"
msgstr "Търсене"
-#: gitk:2358
+#: gitk:2375
msgid "Diff"
msgstr "Разлики"
-#: gitk:2360
+#: gitk:2377
msgid "Old version"
msgstr "Стара версия"
-#: gitk:2362
+#: gitk:2379
msgid "New version"
msgstr "Нова версия"
-#: gitk:2364
+#: gitk:2382
msgid "Lines of context"
msgstr "Контекст в редове"
-#: gitk:2374
+#: gitk:2392
msgid "Ignore space change"
msgstr "Празните знаци без значение"
-#: gitk:2378 gitk:2380 gitk:7959 gitk:8206
+#: gitk:2396 gitk:2398 gitk:7978 gitk:8225
msgid "Line diff"
msgstr "Поредови разлики"
-#: gitk:2445
+#: gitk:2463
msgid "Patch"
msgstr "Кръпка"
-#: gitk:2447
+#: gitk:2465
msgid "Tree"
msgstr "Дърво"
-#: gitk:2617 gitk:2637
+#: gitk:2635 gitk:2656
msgid "Diff this -> selected"
msgstr "Разлики между това и избраното"
-#: gitk:2618 gitk:2638
+#: gitk:2636 gitk:2657
msgid "Diff selected -> this"
msgstr "Разлики между избраното и това"
-#: gitk:2619 gitk:2639
+#: gitk:2637 gitk:2658
msgid "Make patch"
msgstr "Създаване на кръпка"
-#: gitk:2620 gitk:9254
+#: gitk:2638 gitk:9273
msgid "Create tag"
msgstr "Създаване на етикет"
-#: gitk:2621 gitk:9371
+#: gitk:2639
+msgid "Copy commit summary"
+msgstr "Копиране на информацията за подаване"
+
+#: gitk:2640 gitk:9404
msgid "Write commit to file"
msgstr "Запазване на подаването във файл"
-#: gitk:2622 gitk:9428
+#: gitk:2641 gitk:9461
msgid "Create new branch"
msgstr "Създаване на нов клон"
-#: gitk:2623
+#: gitk:2642
msgid "Cherry-pick this commit"
msgstr "Отбиране на това подаване"
-#: gitk:2624
+#: gitk:2643
msgid "Reset HEAD branch to here"
msgstr "Привеждане на върха на клона към текущото подаване"
-#: gitk:2625
+#: gitk:2644
msgid "Mark this commit"
msgstr "Отбелязване на това подаване"
-#: gitk:2626
+#: gitk:2645
msgid "Return to mark"
msgstr "Връщане към отбелязаното подаване"
-#: gitk:2627
+#: gitk:2646
msgid "Find descendant of this and mark"
msgstr "Откриване и отбелязване на наследниците"
-#: gitk:2628
+#: gitk:2647
msgid "Compare with marked commit"
msgstr "Сравнение с отбелязаното подаване"
-#: gitk:2629 gitk:2640
+#: gitk:2648 gitk:2659
msgid "Diff this -> marked commit"
msgstr "Разлики между това и отбелязаното"
-#: gitk:2630 gitk:2641
+#: gitk:2649 gitk:2660
msgid "Diff marked commit -> this"
msgstr "Разлики между отбелязаното и това"
-#: gitk:2631
+#: gitk:2650
msgid "Revert this commit"
msgstr "Отмяна на това подаване"
-#: gitk:2647
+#: gitk:2666
msgid "Check out this branch"
msgstr "Изтегляне на този клон"
-#: gitk:2648
+#: gitk:2667
msgid "Remove this branch"
msgstr "Изтриване на този клон"
-#: gitk:2649
+#: gitk:2668
msgid "Copy branch name"
msgstr "Копиране на името на клона"
-#: gitk:2656
+#: gitk:2675
msgid "Highlight this too"
msgstr "Отбелязване и на това"
-#: gitk:2657
+#: gitk:2676
msgid "Highlight this only"
msgstr "Отбелязване само на това"
-#: gitk:2658
+#: gitk:2677
msgid "External diff"
msgstr "Външна програма за разлики"
-#: gitk:2659
+#: gitk:2678
msgid "Blame parent commit"
msgstr "Анотиране на родителското подаване"
-#: gitk:2660
+#: gitk:2679
msgid "Copy path"
msgstr "Копиране на пътя"
-#: gitk:2667
+#: gitk:2686
msgid "Show origin of this line"
msgstr "Показване на произхода на този ред"
-#: gitk:2668
+#: gitk:2687
msgid "Run git gui blame on this line"
msgstr "Изпълнение на „git gui blame“ върху този ред"
-#: gitk:3014
+#: gitk:3031
+msgid "About gitk"
+msgstr "Относно gitk"
+
+#: gitk:3033
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
@@ -374,316 +382,324 @@ msgstr ""
"\n"
"Използвайте и разпространявайте при условията на ОПЛ на ГНУ"
-#: gitk:3022 gitk:3089 gitk:9857
+#: gitk:3041 gitk:3108 gitk:9890
msgid "Close"
msgstr "Затваряне"
-#: gitk:3043
+#: gitk:3062
msgid "Gitk key bindings"
msgstr "Клавишни комбинации"
-#: gitk:3046
+#: gitk:3065
msgid "Gitk key bindings:"
msgstr "Клавишни комбинации:"
-#: gitk:3048
+#: gitk:3067
#, tcl-format
msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tСпиране на програмата"
-#: gitk:3049
+#: gitk:3068
#, tcl-format
msgid "<%s-W>\t\tClose window"
msgstr "<%s-W>\t\tЗатваряне на прозореца"
-#: gitk:3050
+#: gitk:3069
msgid "<Home>\t\tMove to first commit"
msgstr "<Home>\t\tКъм първото подаване"
-#: gitk:3051
+#: gitk:3070
msgid "<End>\t\tMove to last commit"
msgstr "<End>\t\tКъм последното подаване"
-#: gitk:3052
+#: gitk:3071
msgid "<Up>, p, k\tMove up one commit"
msgstr "<Up>, p, k\tЕдно подаване нагоре"
-#: gitk:3053
+#: gitk:3072
msgid "<Down>, n, j\tMove down one commit"
msgstr "<Down>, n, j\tЕдно подаване надолу"
-#: gitk:3054
+#: gitk:3073
msgid "<Left>, z, h\tGo back in history list"
msgstr "<Left>, z, h\tНазад в историята"
-#: gitk:3055
+#: gitk:3074
msgid "<Right>, x, l\tGo forward in history list"
msgstr "<Right>, x, l\tНапред в историята"
-#: gitk:3056
+#: gitk:3075
#, tcl-format
msgid "<%s-n>\tGo to n-th parent of current commit in history list"
msgstr "<%s-n>\tКъм n-тия родител на текущото подаване в историята"
-#: gitk:3057
+#: gitk:3076
msgid "<PageUp>\tMove up one page in commit list"
msgstr "<PageUp>\tСтраница нагоре в списъка с подаванията"
-#: gitk:3058
+#: gitk:3077
msgid "<PageDown>\tMove down one page in commit list"
msgstr "<PageDown>\tСтраница надолу в списъка с подаванията"
-#: gitk:3059
+#: gitk:3078
#, tcl-format
msgid "<%s-Home>\tScroll to top of commit list"
msgstr "<%s-Home>\tКъм началото на списъка с подаванията"
-#: gitk:3060
+#: gitk:3079
#, tcl-format
msgid "<%s-End>\tScroll to bottom of commit list"
msgstr "<%s-End>\tКъм края на списъка с подаванията"
-#: gitk:3061
+#: gitk:3080
#, tcl-format
msgid "<%s-Up>\tScroll commit list up one line"
msgstr "<%s-Up>\tРед нагоре в списъка с подавания"
-#: gitk:3062
+#: gitk:3081
#, tcl-format
msgid "<%s-Down>\tScroll commit list down one line"
msgstr "<%s-Down>\tРед надолу в списъка с подавания"
-#: gitk:3063
+#: gitk:3082
#, tcl-format
msgid "<%s-PageUp>\tScroll commit list up one page"
msgstr "<%s-PageUp>\tСтраница нагоре в списъка с подавания"
-#: gitk:3064
+#: gitk:3083
#, tcl-format
msgid "<%s-PageDown>\tScroll commit list down one page"
msgstr "<%s-PageDown>\tСтраница надолу в списъка с подавания"
-#: gitk:3065
+#: gitk:3084
msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
msgstr "<Shift-Up>\tТърсене назад (визуално нагоре, исторически — последващи)"
-#: gitk:3066
+#: gitk:3085
msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
msgstr ""
"<Shift-Down>\tТърсене напред (визуално надолу, исторически — предхождащи)"
-#: gitk:3067
+#: gitk:3086
msgid "<Delete>, b\tScroll diff view up one page"
msgstr "<Delete>, b\tСтраница нагоре в изгледа за разлики"
-#: gitk:3068
+#: gitk:3087
msgid "<Backspace>\tScroll diff view up one page"
msgstr "<Backspace>\tСтраница надолу в изгледа за разлики"
-#: gitk:3069
+#: gitk:3088
msgid "<Space>\t\tScroll diff view down one page"
msgstr "<Space>\t\tСтраница надолу в изгледа за разлики"
-#: gitk:3070
+#: gitk:3089
msgid "u\t\tScroll diff view up 18 lines"
msgstr "u\t\t18 реда нагоре в изгледа за разлики"
-#: gitk:3071
+#: gitk:3090
msgid "d\t\tScroll diff view down 18 lines"
msgstr "d\t\t18 реда надолу в изгледа за разлики"
-#: gitk:3072
+#: gitk:3091
#, tcl-format
msgid "<%s-F>\t\tFind"
msgstr "<%s-F>\t\tТърсене"
-#: gitk:3073
+#: gitk:3092
#, tcl-format
msgid "<%s-G>\t\tMove to next find hit"
msgstr "<%s-G>\t\tКъм следващата поява"
-#: gitk:3074
+#: gitk:3093
msgid "<Return>\tMove to next find hit"
msgstr "<Return>\tКъм следващата поява"
-#: gitk:3075
+#: gitk:3094
msgid "g\t\tGo to commit"
msgstr "g\t\tКъм последното подаване"
-#: gitk:3076
+#: gitk:3095
msgid "/\t\tFocus the search box"
msgstr "/\t\tФокус върху полето за търсене"
-#: gitk:3077
+#: gitk:3096
msgid "?\t\tMove to previous find hit"
msgstr "?\t\tКъм предишната поява"
-#: gitk:3078
+#: gitk:3097
msgid "f\t\tScroll diff view to next file"
msgstr "f\t\tСледващ файл в изгледа за разлики"
-#: gitk:3079
+#: gitk:3098
#, tcl-format
msgid "<%s-S>\t\tSearch for next hit in diff view"
msgstr "<%s-S>\t\tТърсене на следващата поява в изгледа за разлики"
-#: gitk:3080
+#: gitk:3099
#, tcl-format
msgid "<%s-R>\t\tSearch for previous hit in diff view"
msgstr "<%s-R>\t\tТърсене на предишната поява в изгледа за разлики"
-#: gitk:3081
+#: gitk:3100
#, tcl-format
msgid "<%s-KP+>\tIncrease font size"
msgstr "<%s-KP+>\tПо-голям размер на шрифта"
-#: gitk:3082
+#: gitk:3101
#, tcl-format
msgid "<%s-plus>\tIncrease font size"
msgstr "<%s-plus>\tПо-голям размер на шрифта"
-#: gitk:3083
+#: gitk:3102
#, tcl-format
msgid "<%s-KP->\tDecrease font size"
msgstr "<%s-KP->\tПо-малък размер на шрифта"
-#: gitk:3084
+#: gitk:3103
#, tcl-format
msgid "<%s-minus>\tDecrease font size"
msgstr "<%s-minus>\tПо-малък размер на шрифта"
-#: gitk:3085
+#: gitk:3104
msgid "<F5>\t\tUpdate"
msgstr "<F5>\t\tОбновяване"
-#: gitk:3550 gitk:3559
+#: gitk:3569 gitk:3578
#, tcl-format
msgid "Error creating temporary directory %s:"
msgstr "Грешка при създаването на временната директория „%s“:"
-#: gitk:3572
+#: gitk:3591
#, tcl-format
msgid "Error getting \"%s\" from %s:"
msgstr "Грешка при получаването на „%s“ от %s:"
-#: gitk:3635
+#: gitk:3654
msgid "command failed:"
msgstr "неуспешно изпълнение на команда:"
-#: gitk:3784
+#: gitk:3803
msgid "No such commit"
msgstr "Такова подаване няма"
-#: gitk:3798
+#: gitk:3817
msgid "git gui blame: command failed:"
msgstr "„git gui blame“: неуспешно изпълнение на команда:"
-#: gitk:3829
+#: gitk:3848
#, tcl-format
msgid "Couldn't read merge head: %s"
msgstr "Върхът за сливане не може да бъде прочетен: %s"
-#: gitk:3837
+#: gitk:3856
#, tcl-format
msgid "Error reading index: %s"
msgstr "Грешка при прочитане на индекса: %s"
-#: gitk:3862
+#: gitk:3881
#, tcl-format
msgid "Couldn't start git blame: %s"
msgstr "Командата „git blame“ не може да бъде стартирана: %s"
-#: gitk:3865 gitk:6754
+#: gitk:3884 gitk:6773
msgid "Searching"
msgstr "Търсене"
-#: gitk:3897
+#: gitk:3916
#, tcl-format
msgid "Error running git blame: %s"
msgstr "Грешка при изпълнението на „git blame“: %s"
-#: gitk:3925
+#: gitk:3944
#, tcl-format
msgid "That line comes from commit %s, which is not in this view"
msgstr "Този ред идва от подаването %s, което не е в изгледа"
-#: gitk:3939
+#: gitk:3958
msgid "External diff viewer failed:"
msgstr "Неуспешно изпълнение на външната програма за разлики:"
-#: gitk:4070
+#: gitk:4062
+msgid "All files"
+msgstr "Всички файлове"
+
+#: gitk:4086
+msgid "View"
+msgstr "Изглед"
+
+#: gitk:4089
msgid "Gitk view definition"
msgstr "Дефиниция на изглед в Gitk"
-#: gitk:4074
+#: gitk:4093
msgid "Remember this view"
msgstr "Запазване на този изглед"
-#: gitk:4075
+#: gitk:4094
msgid "References (space separated list):"
msgstr "Указатели (списък с разделител интервал):"
-#: gitk:4076
+#: gitk:4095
msgid "Branches & tags:"
msgstr "Клони и етикети:"
-#: gitk:4077
+#: gitk:4096
msgid "All refs"
msgstr "Всички указатели"
-#: gitk:4078
+#: gitk:4097
msgid "All (local) branches"
msgstr "Всички (локални) клони"
-#: gitk:4079
+#: gitk:4098
msgid "All tags"
msgstr "Всички етикети"
-#: gitk:4080
+#: gitk:4099
msgid "All remote-tracking branches"
msgstr "Всички следящи клони"
-#: gitk:4081
+#: gitk:4100
msgid "Commit Info (regular expressions):"
msgstr "Информация за подаване (рег. изр.):"
-#: gitk:4082
+#: gitk:4101
msgid "Author:"
msgstr "Автор:"
-#: gitk:4083
+#: gitk:4102
msgid "Committer:"
msgstr "Подал:"
-#: gitk:4084
+#: gitk:4103
msgid "Commit Message:"
msgstr "Съобщение при подаване:"
-#: gitk:4085
+#: gitk:4104
msgid "Matches all Commit Info criteria"
msgstr "Съвпадение по всички характеристики на подаването"
-#: gitk:4086
+#: gitk:4105
msgid "Matches no Commit Info criteria"
msgstr "Не съвпада по никоя от характеристиките на подаването"
-#: gitk:4087
+#: gitk:4106
msgid "Changes to Files:"
msgstr "Промени по файловете:"
-#: gitk:4088
+#: gitk:4107
msgid "Fixed String"
msgstr "Дословен низ"
-#: gitk:4089
+#: gitk:4108
msgid "Regular Expression"
msgstr "Регулярен израз"
-#: gitk:4090
+#: gitk:4109
msgid "Search string:"
msgstr "Низ за търсене:"
-#: gitk:4091
+#: gitk:4110
msgid ""
"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
"15:27:38\"):"
@@ -691,204 +707,204 @@ msgstr ""
"Дата на подаване („2 weeks ago“ (преди 2 седмици), „2009-03-17 15:27:38“, "
"„March 17, 2009 15:27:38“):"
-#: gitk:4092
+#: gitk:4111
msgid "Since:"
msgstr "От:"
-#: gitk:4093
+#: gitk:4112
msgid "Until:"
msgstr "До:"
-#: gitk:4094
+#: gitk:4113
msgid "Limit and/or skip a number of revisions (positive integer):"
msgstr ""
"Ограничаване и/или прескачане на определен брой версии (неотрицателно цяло "
"число):"
-#: gitk:4095
+#: gitk:4114
msgid "Number to show:"
msgstr "Брой показани:"
-#: gitk:4096
+#: gitk:4115
msgid "Number to skip:"
msgstr "Брой прескочени:"
-#: gitk:4097
+#: gitk:4116
msgid "Miscellaneous options:"
msgstr "Разни:"
-#: gitk:4098
+#: gitk:4117
msgid "Strictly sort by date"
msgstr "Подреждане по дата"
-#: gitk:4099
+#: gitk:4118
msgid "Mark branch sides"
msgstr "Отбелязване на страните по клона"
-#: gitk:4100
+#: gitk:4119
msgid "Limit to first parent"
msgstr "Само първия родител"
-#: gitk:4101
+#: gitk:4120
msgid "Simple history"
msgstr "Опростена история"
-#: gitk:4102
+#: gitk:4121
msgid "Additional arguments to git log:"
msgstr "Допълнителни аргументи към „git log“:"
-#: gitk:4103
+#: gitk:4122
msgid "Enter files and directories to include, one per line:"
msgstr "Въведете файловете и директориите за включване, по елемент на ред"
-#: gitk:4104
+#: gitk:4123
msgid "Command to generate more commits to include:"
msgstr ""
"Команда за генерирането на допълнителни подавания, които да бъдат включени:"
-#: gitk:4228
+#: gitk:4247
msgid "Gitk: edit view"
msgstr "Gitk: редактиране на изглед"
-#: gitk:4236
+#: gitk:4255
msgid "-- criteria for selecting revisions"
msgstr "— критерии за избор на версии"
-#: gitk:4241
+#: gitk:4260
msgid "View Name"
msgstr "Име на изглед"
-#: gitk:4316
+#: gitk:4335
msgid "Apply (F5)"
msgstr "Прилагане (F5)"
-#: gitk:4354
+#: gitk:4373
msgid "Error in commit selection arguments:"
msgstr "Грешка в аргументите за избор на подавания:"
-#: gitk:4409 gitk:4462 gitk:4924 gitk:4938 gitk:6208 gitk:12373 gitk:12374
+#: gitk:4428 gitk:4481 gitk:4943 gitk:4957 gitk:6227 gitk:12410 gitk:12411
msgid "None"
msgstr "Няма"
-#: gitk:5021 gitk:5026
+#: gitk:5040 gitk:5045
msgid "Descendant"
msgstr "Наследник"
-#: gitk:5022
+#: gitk:5041
msgid "Not descendant"
msgstr "Не е наследник"
-#: gitk:5029 gitk:5034
+#: gitk:5048 gitk:5053
msgid "Ancestor"
msgstr "Предшественик"
-#: gitk:5030
+#: gitk:5049
msgid "Not ancestor"
msgstr "Не е предшественик"
-#: gitk:5324
+#: gitk:5343
msgid "Local changes checked in to index but not committed"
msgstr "Локални промени добавени към индекса, но неподадени"
-#: gitk:5360
+#: gitk:5379
msgid "Local uncommitted changes, not checked in to index"
msgstr "Локални промени извън индекса"
-#: gitk:7134
+#: gitk:7153
msgid "and many more"
msgstr "и още много"
-#: gitk:7137
+#: gitk:7156
msgid "many"
msgstr "много"
-#: gitk:7328
+#: gitk:7347
msgid "Tags:"
msgstr "Етикети:"
-#: gitk:7345 gitk:7351 gitk:8825
+#: gitk:7364 gitk:7370 gitk:8844
msgid "Parent"
msgstr "Родител"
-#: gitk:7356
+#: gitk:7375
msgid "Child"
msgstr "Дете"
-#: gitk:7365
+#: gitk:7384
msgid "Branch"
msgstr "Клон"
-#: gitk:7368
+#: gitk:7387
msgid "Follows"
msgstr "Следва"
-#: gitk:7371
+#: gitk:7390
msgid "Precedes"
msgstr "Предшества"
-#: gitk:7966
+#: gitk:7985
#, tcl-format
msgid "Error getting diffs: %s"
msgstr "Грешка при получаването на разликите: %s"
-#: gitk:8650
+#: gitk:8669
msgid "Goto:"
msgstr "Към ред:"
-#: gitk:8671
+#: gitk:8690
#, tcl-format
msgid "Short SHA1 id %s is ambiguous"
msgstr "Съкратената сума по SHA1 %s не е еднозначна"
-#: gitk:8678
+#: gitk:8697
#, tcl-format
msgid "Revision %s is not known"
msgstr "Непозната версия %s"
-#: gitk:8688
+#: gitk:8707
#, tcl-format
msgid "SHA1 id %s is not known"
msgstr "Непозната сума по SHA1 %s"
-#: gitk:8690
+#: gitk:8709
#, tcl-format
msgid "Revision %s is not in the current view"
msgstr "Версия %s не е в текущия изглед"
-#: gitk:8832 gitk:8847
+#: gitk:8851 gitk:8866
msgid "Date"
msgstr "Дата"
-#: gitk:8835
+#: gitk:8854
msgid "Children"
msgstr "Деца"
-#: gitk:8898
+#: gitk:8917
#, tcl-format
msgid "Reset %s branch to here"
msgstr "Зануляване на клона „%s“ към текущото подаване"
-#: gitk:8900
+#: gitk:8919
msgid "Detached head: can't reset"
msgstr "Несвързан връх: невъзможно зануляване"
-#: gitk:9005 gitk:9011
+#: gitk:9024 gitk:9030
msgid "Skipping merge commit "
msgstr "Пропускане на подаването на сливането"
-#: gitk:9020 gitk:9025
+#: gitk:9039 gitk:9044
msgid "Error getting patch ID for "
msgstr "Грешка при получаването на идентификатора на "
-#: gitk:9021 gitk:9026
+#: gitk:9040 gitk:9045
msgid " - stopping\n"
msgstr " — спиране\n"
-#: gitk:9031 gitk:9034 gitk:9042 gitk:9056 gitk:9065
+#: gitk:9050 gitk:9053 gitk:9061 gitk:9075 gitk:9084
msgid "Commit "
msgstr "Подаване"
-#: gitk:9035
+#: gitk:9054
msgid ""
" is the same patch as\n"
" "
@@ -896,7 +912,7 @@ msgstr ""
" е същата кръпка като\n"
" "
-#: gitk:9043
+#: gitk:9062
msgid ""
" differs from\n"
" "
@@ -904,7 +920,7 @@ msgstr ""
" се различава от\n"
" "
-#: gitk:9045
+#: gitk:9064
msgid ""
"Diff of commits:\n"
"\n"
@@ -912,130 +928,130 @@ msgstr ""
"Разлика между подаванията:\n"
"\n"
-#: gitk:9057 gitk:9066
+#: gitk:9076 gitk:9085
#, tcl-format
msgid " has %s children - stopping\n"
msgstr " има %s деца — спиране\n"
-#: gitk:9085
+#: gitk:9104
#, tcl-format
msgid "Error writing commit to file: %s"
msgstr "Грешка при запазването на подаването във файл: %s"
-#: gitk:9091
+#: gitk:9110
#, tcl-format
msgid "Error diffing commits: %s"
msgstr "Грешка при изчисляването на разликите между подаванията: %s"
-#: gitk:9137
+#: gitk:9156
msgid "Top"
msgstr "Най-горе"
-#: gitk:9138
+#: gitk:9157
msgid "From"
msgstr "От"
-#: gitk:9143
+#: gitk:9162
msgid "To"
msgstr "До"
-#: gitk:9167
+#: gitk:9186
msgid "Generate patch"
msgstr "Генериране на кръпка"
-#: gitk:9169
+#: gitk:9188
msgid "From:"
msgstr "От:"
-#: gitk:9178
+#: gitk:9197
msgid "To:"
msgstr "До:"
-#: gitk:9187
+#: gitk:9206
msgid "Reverse"
msgstr "Обръщане"
-#: gitk:9189 gitk:9385
+#: gitk:9208 gitk:9418
msgid "Output file:"
msgstr "Запазване във файла:"
-#: gitk:9195
+#: gitk:9214
msgid "Generate"
msgstr "Генериране"
-#: gitk:9233
+#: gitk:9252
msgid "Error creating patch:"
msgstr "Грешка при създаването на кръпка:"
-#: gitk:9256 gitk:9373 gitk:9430
+#: gitk:9275 gitk:9406 gitk:9463
msgid "ID:"
msgstr "Идентификатор:"
-#: gitk:9265
+#: gitk:9284
msgid "Tag name:"
msgstr "Име на етикет:"
-#: gitk:9268
+#: gitk:9287
msgid "Tag message is optional"
msgstr "Съобщението за етикет е незадължително"
-#: gitk:9270
+#: gitk:9289
msgid "Tag message:"
msgstr "Съобщение за етикет:"
-#: gitk:9274 gitk:9439
+#: gitk:9293 gitk:9472
msgid "Create"
msgstr "Създаване"
-#: gitk:9292
+#: gitk:9311
msgid "No tag name specified"
msgstr "Липсва име на етикет"
-#: gitk:9296
+#: gitk:9315
#, tcl-format
msgid "Tag \"%s\" already exists"
msgstr "Етикетът „%s“ вече съществува"
-#: gitk:9306
+#: gitk:9325
msgid "Error creating tag:"
msgstr "Грешка при създаването на етикет:"
-#: gitk:9382
+#: gitk:9415
msgid "Command:"
msgstr "Команда:"
-#: gitk:9390
+#: gitk:9423
msgid "Write"
msgstr "Запазване"
-#: gitk:9408
+#: gitk:9441
msgid "Error writing commit:"
msgstr "Грешка при запазването на подаването:"
-#: gitk:9435
+#: gitk:9468
msgid "Name:"
msgstr "Име:"
-#: gitk:9458
+#: gitk:9491
msgid "Please specify a name for the new branch"
msgstr "Укажете име за новия клон"
-#: gitk:9463
+#: gitk:9496
#, tcl-format
msgid "Branch '%s' already exists. Overwrite?"
msgstr "Клонът „%s“ вече съществува. Да бъде ли презаписан?"
-#: gitk:9530
+#: gitk:9563
#, tcl-format
msgid "Commit %s is already included in branch %s -- really re-apply it?"
msgstr ""
"Подаването „%s“ вече е включено в клона „%s“ — да бъде ли приложено отново?"
-#: gitk:9535
+#: gitk:9568
msgid "Cherry-picking"
msgstr "Отбиране"
-#: gitk:9544
+#: gitk:9577
#, tcl-format
msgid ""
"Cherry-pick failed because of local changes to file '%s'.\n"
@@ -1044,7 +1060,7 @@ msgstr ""
"Неуспешно отбиране, защото във файла „%s“ има локални промени.\n"
"Подайте, занулете или ги скатайте и пробвайте отново."
-#: gitk:9550
+#: gitk:9583
msgid ""
"Cherry-pick failed because of merge conflict.\n"
"Do you wish to run git citool to resolve it?"
@@ -1052,20 +1068,20 @@ msgstr ""
"Неуспешно отбиране поради конфликти при сливане.\n"
"Искате ли да ги коригирате чрез „git citool“?"
-#: gitk:9566 gitk:9624
+#: gitk:9599 gitk:9657
msgid "No changes committed"
msgstr "Не са подадени промени"
-#: gitk:9593
+#: gitk:9626
#, tcl-format
msgid "Commit %s is not included in branch %s -- really revert it?"
msgstr "Подаването „%s“ не е включено в клона „%s“. Да бъде ли отменено?"
-#: gitk:9598
+#: gitk:9631
msgid "Reverting"
msgstr "Отмяна"
-#: gitk:9606
+#: gitk:9639
#, tcl-format
msgid ""
"Revert failed because of local changes to the following files:%s Please "
@@ -1074,7 +1090,7 @@ msgstr ""
"Неуспешна отмяна, защото във файла „%s“ има локални промени.\n"
"Подайте, занулете или ги скатайте и пробвайте отново.<"
-#: gitk:9610
+#: gitk:9643
msgid ""
"Revert failed because of merge conflict.\n"
" Do you wish to run git citool to resolve it?"
@@ -1082,28 +1098,28 @@ msgstr ""
"Неуспешно отмяна поради конфликти при сливане.\n"
"Искате ли да ги коригирате чрез „git citool“?"
-#: gitk:9653
+#: gitk:9686
msgid "Confirm reset"
msgstr "Потвърждаване на зануляването"
-#: gitk:9655
+#: gitk:9688
#, tcl-format
msgid "Reset branch %s to %s?"
msgstr "Да се занули ли клонът „%s“ към „%s“?"
-#: gitk:9657
+#: gitk:9690
msgid "Reset type:"
msgstr "Вид зануляване:"
-#: gitk:9660
+#: gitk:9693
msgid "Soft: Leave working tree and index untouched"
msgstr "Слабо: работното дърво и индекса остават същите"
-#: gitk:9663
+#: gitk:9696
msgid "Mixed: Leave working tree untouched, reset index"
msgstr "Смесено: работното дърво остава същото, индексът се занулява"
-#: gitk:9666
+#: gitk:9699
msgid ""
"Hard: Reset working tree and index\n"
"(discard ALL local changes)"
@@ -1111,19 +1127,19 @@ msgstr ""
"Силно: зануляване и на работното дърво, и на индекса\n"
"(*ВСИЧКИ* локални промени ще бъдат безвъзвратно загубени)"
-#: gitk:9683
+#: gitk:9716
msgid "Resetting"
msgstr "Зануляване"
-#: gitk:9743
+#: gitk:9776
msgid "Checking out"
msgstr "Изтегляне"
-#: gitk:9796
+#: gitk:9829
msgid "Cannot delete the currently checked-out branch"
msgstr "Текущо изтегленият клон не може да бъде изтрит"
-#: gitk:9802
+#: gitk:9835
#, tcl-format
msgid ""
"The commits on branch %s aren't on any other branch.\n"
@@ -1132,16 +1148,16 @@ msgstr ""
"Подаванията на клона „%s“ не са на никой друг клон.\n"
"Наистина ли да се изтрие клонът „%s“?"
-#: gitk:9833
+#: gitk:9866
#, tcl-format
msgid "Tags and heads: %s"
msgstr "Етикети и върхове: %s"
-#: gitk:9850
+#: gitk:9883
msgid "Filter"
msgstr "Филтриране"
-#: gitk:10146
+#: gitk:10179
msgid ""
"Error reading commit topology information; branch and preceding/following "
"tag information will be incomplete."
@@ -1149,201 +1165,201 @@ msgstr ""
"Грешка при прочитането на топологията на подаванията. Информацията за клона "
"и предшестващите/следващите етикети ще е непълна."
-#: gitk:11123
+#: gitk:11156
msgid "Tag"
msgstr "Етикет"
-#: gitk:11127
+#: gitk:11160
msgid "Id"
msgstr "Идентификатор"
-#: gitk:11210
+#: gitk:11243
msgid "Gitk font chooser"
msgstr "Избор на шрифт за Gitk"
-#: gitk:11227
+#: gitk:11260
msgid "B"
msgstr "Ч"
-#: gitk:11230
+#: gitk:11263
msgid "I"
msgstr "К"
-#: gitk:11348
+#: gitk:11381
msgid "Commit list display options"
msgstr "Настройки на списъка с подавания"
-#: gitk:11351
+#: gitk:11384
msgid "Maximum graph width (lines)"
msgstr "Максимална широчина на графа (в редове)"
-#: gitk:11355
+#: gitk:11388
#, no-tcl-format
msgid "Maximum graph width (% of pane)"
msgstr "Максимална широчина на графа (% от панела)"
-#: gitk:11358
+#: gitk:11391
msgid "Show local changes"
msgstr "Показване на локалните промени"
-#: gitk:11361
+#: gitk:11394
msgid "Auto-select SHA1 (length)"
msgstr "Автоматично избиране на SHA1 (дължина)"
-#: gitk:11365
+#: gitk:11398
msgid "Hide remote refs"
msgstr "Скриване на отдалечените указатели"
-#: gitk:11369
+#: gitk:11402
msgid "Diff display options"
msgstr "Настройки на показването на разликите"
-#: gitk:11371
+#: gitk:11404
msgid "Tab spacing"
msgstr "Широчина на табулатора"
-#: gitk:11374
+#: gitk:11407
msgid "Display nearby tags/heads"
msgstr "Извеждане на близките етикети и върхове"
-#: gitk:11377
+#: gitk:11410
msgid "Maximum # tags/heads to show"
msgstr "Максимален брой етикети/върхове за показване"
-#: gitk:11380
+#: gitk:11413
msgid "Limit diffs to listed paths"
msgstr "Разлика само в избраните пътища"
-#: gitk:11383
+#: gitk:11416
msgid "Support per-file encodings"
msgstr "Поддръжка на различни кодирания за всеки файл"
-#: gitk:11389 gitk:11536
+#: gitk:11422 gitk:11569
msgid "External diff tool"
msgstr "Външен инструмент за разлики"
-#: gitk:11390
+#: gitk:11423
msgid "Choose..."
msgstr "Избор…"
-#: gitk:11395
+#: gitk:11428
msgid "General options"
msgstr "Общи настройки"
-#: gitk:11398
+#: gitk:11431
msgid "Use themed widgets"
msgstr "Използване на тема за графичните обекти"
-#: gitk:11400
+#: gitk:11433
msgid "(change requires restart)"
msgstr "(промяната изисква рестартиране на Gitk)"
-#: gitk:11402
+#: gitk:11435
msgid "(currently unavailable)"
msgstr "(в момента недостъпно)"
-#: gitk:11413
+#: gitk:11446
msgid "Colors: press to choose"
msgstr "Цветове: избира се с натискане"
-#: gitk:11416
+#: gitk:11449
msgid "Interface"
msgstr "Интерфейс"
-#: gitk:11417
+#: gitk:11450
msgid "interface"
msgstr "интерфейс"
-#: gitk:11420
+#: gitk:11453
msgid "Background"
msgstr "Фон"
-#: gitk:11421 gitk:11451
+#: gitk:11454 gitk:11484
msgid "background"
msgstr "фон"
-#: gitk:11424
+#: gitk:11457
msgid "Foreground"
msgstr "Знаци"
-#: gitk:11425
+#: gitk:11458
msgid "foreground"
msgstr "знаци"
-#: gitk:11428
+#: gitk:11461
msgid "Diff: old lines"
msgstr "Разлика: стари редове"
-#: gitk:11429
+#: gitk:11462
msgid "diff old lines"
msgstr "разлика, стари редове"
-#: gitk:11433
+#: gitk:11466
msgid "Diff: new lines"
msgstr "Разлика: нови редове"
-#: gitk:11434
+#: gitk:11467
msgid "diff new lines"
msgstr "разлика, нови редове"
-#: gitk:11438
+#: gitk:11471
msgid "Diff: hunk header"
msgstr "Разлика: начало на парче"
-#: gitk:11440
+#: gitk:11473
msgid "diff hunk header"
msgstr "разлика, начало на парче"
-#: gitk:11444
+#: gitk:11477
msgid "Marked line bg"
msgstr "Фон на отбелязан ред"
-#: gitk:11446
+#: gitk:11479
msgid "marked line background"
msgstr "фон на отбелязан ред"
-#: gitk:11450
+#: gitk:11483
msgid "Select bg"
msgstr "Избор на фон"
-#: gitk:11459
+#: gitk:11492
msgid "Fonts: press to choose"
msgstr "Шрифтове: избира се с натискане"
-#: gitk:11461
+#: gitk:11494
msgid "Main font"
msgstr "Основен шрифт"
-#: gitk:11462
+#: gitk:11495
msgid "Diff display font"
msgstr "Шрифт за разликите"
-#: gitk:11463
+#: gitk:11496
msgid "User interface font"
msgstr "Шрифт на интерфейса"
-#: gitk:11485
+#: gitk:11518
msgid "Gitk preferences"
msgstr "Настройки на Gitk"
-#: gitk:11494
+#: gitk:11527
msgid "General"
msgstr "Общи"
-#: gitk:11495
+#: gitk:11528
msgid "Colors"
msgstr "Цветове"
-#: gitk:11496
+#: gitk:11529
msgid "Fonts"
msgstr "Шрифтове"
-#: gitk:11546
+#: gitk:11579
#, tcl-format
msgid "Gitk: choose color for %s"
msgstr "Gitk: избор на цвят на „%s“"
-#: gitk:12059
+#: gitk:12092
msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
@@ -1351,15 +1367,15 @@ msgstr ""
"Тази версия на Tcl/Tk не се поддържа от Gitk.\n"
" Необходима ви е поне Tcl/Tk 8.4."
-#: gitk:12269
+#: gitk:12302
msgid "Cannot find a git repository here."
msgstr "Тук липсва хранилище на Git."
-#: gitk:12316
+#: gitk:12349
#, tcl-format
msgid "Ambiguous argument '%s': both revision and filename"
msgstr "Нееднозначен аргумент „%s“: има и такава версия, и такъв файл"
-#: gitk:12328
+#: gitk:12361
msgid "Bad arguments to gitk:"
msgstr "Неправилни аргументи на gitk:"
diff --git a/gitk-git/po/de.po b/gitk-git/po/de.po
index d9ba405..bde749e 100644
--- a/gitk-git/po/de.po
+++ b/gitk-git/po/de.po
@@ -23,11 +23,11 @@ msgstr "Liste der nicht zusammengeführten Dateien nicht gefunden:"
#: gitk:212 gitk:2381
msgid "Color words"
-msgstr ""
+msgstr "Wörter einfärben"
#: gitk:217 gitk:2381 gitk:8220 gitk:8253
msgid "Markup words"
-msgstr ""
+msgstr "Wörter kennzeichnen"
#: gitk:324
msgid "Error parsing revisions:"
@@ -187,7 +187,7 @@ msgstr "Änderungen:"
#: gitk:2304 gitk:4779
msgid "changing lines matching:"
-msgstr ""
+msgstr "Geänderte Zeilen entsprechen:"
#: gitk:2313 gitk:2315 gitk:4766
msgid "Exact"
@@ -248,7 +248,7 @@ msgstr "Leerzeichenänderungen ignorieren"
#: gitk:2378 gitk:2380 gitk:7959 gitk:8206
msgid "Line diff"
-msgstr ""
+msgstr "Zeilenunterschied"
#: gitk:2445
msgid "Patch"
@@ -307,19 +307,16 @@ msgid "Compare with marked commit"
msgstr "Mit Lesezeichen vergleichen"
#: gitk:2629 gitk:2640
-#, fuzzy
msgid "Diff this -> marked commit"
-msgstr "Vergleich: diese -> gewählte"
+msgstr "Vergleich: diese -> gewählte Version"
#: gitk:2630 gitk:2641
-#, fuzzy
msgid "Diff marked commit -> this"
-msgstr "Vergleich: gewählte -> diese"
+msgstr "Vergleich: gewählte -> diese Version"
#: gitk:2631
-#, fuzzy
msgid "Revert this commit"
-msgstr "Lesezeichen setzen"
+msgstr "Version umkehren"
#: gitk:2647
msgid "Check out this branch"
@@ -331,7 +328,7 @@ msgstr "Zweig löschen"
#: gitk:2649
msgid "Copy branch name"
-msgstr ""
+msgstr "Zweigname kopieren"
#: gitk:2656
msgid "Highlight this too"
@@ -351,7 +348,7 @@ msgstr "Annotieren der Elternversion"
#: gitk:2660
msgid "Copy path"
-msgstr ""
+msgstr "Pfad kopieren"
#: gitk:2667
msgid "Show origin of this line"
@@ -362,7 +359,6 @@ msgid "Run git gui blame on this line"
msgstr "Diese Zeile annotieren (»git gui blame«)"
#: gitk:3014
-#, fuzzy
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
@@ -374,7 +370,7 @@ msgstr ""
"\n"
"Gitk - eine Visualisierung der Git-Historie\n"
"\n"
-"Copyright \\u00a9 2005-2010 Paul Mackerras\n"
+"Copyright \\u00a9 2005-2014 Paul Mackerras\n"
"\n"
"Benutzung und Weiterverbreitung gemäß den Bedingungen der GNU General Public "
"License"
@@ -397,9 +393,9 @@ msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tBeenden"
#: gitk:3049
-#, fuzzy, tcl-format
+#, tcl-format
msgid "<%s-W>\t\tClose window"
-msgstr "<%s-F>\t\tSuchen"
+msgstr "<%s-F>\t\tFenster schließen"
#: gitk:3050
msgid "<Home>\t\tMove to first commit"
@@ -410,19 +406,16 @@ msgid "<End>\t\tMove to last commit"
msgstr "<Ende>\t\tZur ältesten Version springen"
#: gitk:3052
-#, fuzzy
msgid "<Up>, p, k\tMove up one commit"
-msgstr "<Hoch>, p, i\tNächste neuere Version"
+msgstr "<Hoch>, p, k\tNächste neuere Version"
#: gitk:3053
-#, fuzzy
msgid "<Down>, n, j\tMove down one commit"
-msgstr "<Runter>, n, k\tNächste ältere Version"
+msgstr "<Runter>, n, j\tNächste ältere Version"
#: gitk:3054
-#, fuzzy
msgid "<Left>, z, h\tGo back in history list"
-msgstr "<Links>, z, j\tEine Version zurückgehen"
+msgstr "<Links>, z, h\tEine Version zurückgehen"
#: gitk:3055
msgid "<Right>, x, l\tGo forward in history list"
@@ -431,7 +424,7 @@ msgstr "<Rechts>, x, l\tEine Version weitergehen"
#: gitk:3056
#, tcl-format
msgid "<%s-n>\tGo to n-th parent of current commit in history list"
-msgstr ""
+msgstr "<%s-n>\tZu n-ter Elternversion in Versionshistorie springen"
#: gitk:3057
msgid "<PageUp>\tMove up one page in commit list"
@@ -514,9 +507,8 @@ msgid "<Return>\tMove to next find hit"
msgstr "<Eingabetaste>\tWeitersuchen"
#: gitk:3075
-#, fuzzy
msgid "g\t\tGo to commit"
-msgstr "<Ende>\t\tZur ältesten Version springen"
+msgstr "g\t\tZu Version springen"
#: gitk:3076
msgid "/\t\tFocus the search box"
@@ -673,9 +665,8 @@ msgid "Matches all Commit Info criteria"
msgstr "Alle Versionsinformationen-Kriterien erfüllen"
#: gitk:4086
-#, fuzzy
msgid "Matches no Commit Info criteria"
-msgstr "Alle Versionsinformationen-Kriterien erfüllen"
+msgstr "keine Versionsinformationen-Kriterien erfüllen"
#: gitk:4087
msgid "Changes to Files:"
@@ -802,7 +793,7 @@ msgstr "Lokale Änderungen, nicht bereitgestellt"
#: gitk:7134
msgid "and many more"
-msgstr ""
+msgstr "und weitere"
#: gitk:7137
msgid "many"
@@ -1066,34 +1057,31 @@ msgid "No changes committed"
msgstr "Keine Änderungen eingetragen"
#: gitk:9593
-#, fuzzy, tcl-format
+#, tcl-format
msgid "Commit %s is not included in branch %s -- really revert it?"
msgstr ""
-"Version »%s« ist bereits im Zweig »%s« enthalten -- trotzdem erneut "
-"eintragen?"
+"Version »%s« ist nicht im Zweig »%s« enthalten -- trotzdem umkehren?"
#: gitk:9598
-#, fuzzy
msgid "Reverting"
-msgstr "Zurücksetzen"
+msgstr "Umkehren"
#: gitk:9606
-#, fuzzy, tcl-format
+#, tcl-format
msgid ""
"Revert failed because of local changes to the following files:%s Please "
"commit, reset or stash your changes and try again."
msgstr ""
-"Pflücken fehlgeschlagen, da noch lokale Änderungen in Datei »%s«\n"
+"Umkehren fehlgeschlagen, da noch lokale Änderungen in Datei »%s«\n"
"vorliegen. Bitte diese Änderungen eintragen, zurücksetzen oder\n"
"zwischenspeichern (»git stash«) und dann erneut versuchen."
#: gitk:9610
-#, fuzzy
msgid ""
"Revert failed because of merge conflict.\n"
" Do you wish to run git citool to resolve it?"
msgstr ""
-"Pflücken fehlgeschlagen, da ein Zusammenführungs-Konflikt aufgetreten\n"
+"Umkehren fehlgeschlagen, da ein Zusammenführungs-Konflikt aufgetreten\n"
"ist. Soll das Zusammenführungs-Werkzeug (»git citool«) aufgerufen\n"
"werden, um diesen Konflikt aufzulösen?"
@@ -1206,9 +1194,8 @@ msgid "Show local changes"
msgstr "Lokale Änderungen anzeigen"
#: gitk:11361
-#, fuzzy
msgid "Auto-select SHA1 (length)"
-msgstr "SHA1-Hashwert automatisch auswählen"
+msgstr "SHA1-Hashwert (Länge) automatisch auswählen"
#: gitk:11365
msgid "Hide remote refs"
@@ -1223,13 +1210,12 @@ msgid "Tab spacing"
msgstr "Tabulatorbreite"
#: gitk:11374
-#, fuzzy
msgid "Display nearby tags/heads"
-msgstr "Naheliegende Markierungen anzeigen"
+msgstr "Naheliegende Markierungen/Zweigspitzen anzeigen"
#: gitk:11377
msgid "Maximum # tags/heads to show"
-msgstr ""
+msgstr "Maximale Anzahl anzuzeigender Markierungen/Zweigspitzen"
#: gitk:11380
msgid "Limit diffs to listed paths"
@@ -1348,17 +1334,16 @@ msgid "Gitk preferences"
msgstr "Gitk-Einstellungen"
#: gitk:11494
-#, fuzzy
msgid "General"
-msgstr "Erzeugen"
+msgstr "Allgemein"
#: gitk:11495
msgid "Colors"
-msgstr ""
+msgstr "Farben"
#: gitk:11496
msgid "Fonts"
-msgstr ""
+msgstr "Schriftarten"
#: gitk:11546
#, tcl-format
@@ -1370,6 +1355,8 @@ msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
msgstr ""
+"Entschuldigung, gitk kann nicht mit dieser Tcl/Tk Version ausgeführt werden.\n"
+" Gitk erfordert mindestens Tcl/Tk 8.4."
#: gitk:12269
msgid "Cannot find a git repository here."
diff --git a/gitk-git/po/fr.po b/gitk-git/po/fr.po
index 80f72fb..c44f994 100644
--- a/gitk-git/po/fr.po
+++ b/gitk-git/po/fr.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the gitk package.
# Translators:
# Emmanuel Trillaud <etrillaud@gmail.com>
-#
+# Jean-Noël Avila <jn.avila@free.fr>
msgid ""
msgstr ""
"Project-Id-Version: gitk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-05-17 14:32+1000\n"
-"PO-Revision-Date: 2009-11-19 22:13+0100\n"
-"Last-Translator: Emmanuel Trillaud <etrillaud@gmail.com>\n"
+"POT-Creation-Date: 2016-01-22 22:04+0100\n"
+"PO-Revision-Date: 2016-01-22 23:28+0100\n"
+"Last-Translator: Jean-Noël Avila <jn.avila@free.fr>\n"
"Language-Team: git@vger.kernel.org\n"
"Language: \n"
"MIME-Version: 1.0\n"
@@ -23,13 +23,13 @@ msgstr ""
msgid "Couldn't get list of unmerged files:"
msgstr "Impossible de récupérer la liste des fichiers non fusionnés :"
-#: gitk:212 gitk:2381
+#: gitk:212 gitk:2399
msgid "Color words"
-msgstr ""
+msgstr "Colorier les mots différents"
-#: gitk:217 gitk:2381 gitk:8220 gitk:8253
+#: gitk:217 gitk:2399 gitk:8239 gitk:8272
msgid "Markup words"
-msgstr ""
+msgstr "Marquer les mots différents"
#: gitk:324
msgid "Error parsing revisions:"
@@ -47,13 +47,10 @@ msgstr ""
# FIXME : améliorer la traduction de 'file limite'
#: gitk:396
-#, fuzzy
msgid ""
"No files selected: --merge specified but no unmerged files are within file "
"limit."
-msgstr ""
-"Aucun fichier sélectionné : --merge précisé mais aucun fichier non fusionné "
-"n'est dans la limite des fichiers."
+msgstr "Aucun fichier sélectionné : --merge précisé mais aucun fichier non fusionné n'est dans la limite des fichiers."
#: gitk:418 gitk:566
msgid "Error executing git log:"
@@ -63,15 +60,15 @@ msgstr "Erreur à l'exécution de git log :"
msgid "Reading"
msgstr "Lecture en cours"
-#: gitk:496 gitk:4525
+#: gitk:496 gitk:4544
msgid "Reading commits..."
msgstr "Lecture des commits..."
-#: gitk:499 gitk:1637 gitk:4528
+#: gitk:499 gitk:1637 gitk:4547
msgid "No commits selected"
msgstr "Aucun commit sélectionné"
-#: gitk:1445 gitk:4045 gitk:12432
+#: gitk:1445 gitk:4064 gitk:12469
msgid "Command line"
msgstr "Ligne de commande"
@@ -83,290 +80,294 @@ msgstr "Impossible de lire la sortie de git log :"
msgid "No commit information available"
msgstr "Aucune information disponible sur le commit"
-#: gitk:1903 gitk:1932 gitk:4315 gitk:9669 gitk:11241 gitk:11521
+#: gitk:1903 gitk:1932 gitk:4334 gitk:9702 gitk:11274 gitk:11554
msgid "OK"
msgstr "OK"
-#: gitk:1934 gitk:4317 gitk:9196 gitk:9275 gitk:9391 gitk:9440 gitk:9671
-#: gitk:11242 gitk:11522
+#: gitk:1934 gitk:4336 gitk:9215 gitk:9294 gitk:9424 gitk:9473 gitk:9704
+#: gitk:11275 gitk:11555
msgid "Cancel"
msgstr "Annuler"
-#: gitk:2069
+#: gitk:2083
msgid "&Update"
msgstr "Mise à jour"
-#: gitk:2070
+#: gitk:2084
msgid "&Reload"
-msgstr "Recharger"
+msgstr "&Recharger"
-#: gitk:2071
+#: gitk:2085
msgid "Reread re&ferences"
-msgstr "Relire les références"
+msgstr "Relire les ré&férences"
-#: gitk:2072
+#: gitk:2086
msgid "&List references"
-msgstr "Lister les références"
+msgstr "&Lister les références"
-#: gitk:2074
+#: gitk:2088
msgid "Start git &gui"
-msgstr "Démarrer git gui"
+msgstr "Démarrer git &gui"
-#: gitk:2076
+#: gitk:2090
msgid "&Quit"
-msgstr "Quitter"
+msgstr "&Quitter"
-#: gitk:2068
+#: gitk:2082
msgid "&File"
-msgstr "Fichier"
+msgstr "&Fichier"
-#: gitk:2080
+#: gitk:2094
msgid "&Preferences"
msgstr "Préférences"
-#: gitk:2079
+#: gitk:2093
msgid "&Edit"
-msgstr "Éditer"
+msgstr "&Éditer"
-#: gitk:2084
+#: gitk:2098
msgid "&New view..."
-msgstr "Nouvelle vue..."
+msgstr "&Nouvelle vue..."
-#: gitk:2085
+#: gitk:2099
msgid "&Edit view..."
-msgstr "Éditer la vue..."
+msgstr "&Éditer la vue..."
-#: gitk:2086
+#: gitk:2100
msgid "&Delete view"
msgstr "Supprimer la vue"
-#: gitk:2088 gitk:4043
+#: gitk:2102
msgid "&All files"
msgstr "Tous les fichiers"
-#: gitk:2083 gitk:4067
+#: gitk:2097
msgid "&View"
-msgstr "Vue"
+msgstr "&Vue"
-#: gitk:2093 gitk:2103 gitk:3012
+#: gitk:2107 gitk:2117
msgid "&About gitk"
msgstr "À propos de gitk"
-#: gitk:2094 gitk:2108
+#: gitk:2108 gitk:2122
msgid "&Key bindings"
msgstr "Raccourcis clavier"
-#: gitk:2092 gitk:2107
+#: gitk:2106 gitk:2121
msgid "&Help"
msgstr "Aide"
-#: gitk:2185 gitk:8652
+#: gitk:2199 gitk:8671
msgid "SHA1 ID:"
msgstr "Id SHA1 :"
-#: gitk:2229
+#: gitk:2243
msgid "Row"
msgstr "Colonne"
-#: gitk:2267
+#: gitk:2281
msgid "Find"
msgstr "Recherche"
-#: gitk:2295
+#: gitk:2309
msgid "commit"
msgstr "commit"
-#: gitk:2299 gitk:2301 gitk:4687 gitk:4710 gitk:4734 gitk:6755 gitk:6827
-#: gitk:6912
+#: gitk:2313 gitk:2315 gitk:4706 gitk:4729 gitk:4753 gitk:6774 gitk:6846
+#: gitk:6931
msgid "containing:"
msgstr "contient :"
-#: gitk:2302 gitk:3526 gitk:3531 gitk:4763
+#: gitk:2316 gitk:3545 gitk:3550 gitk:4782
msgid "touching paths:"
msgstr "chemins modifiés :"
-#: gitk:2303 gitk:4777
+#: gitk:2317 gitk:4796
msgid "adding/removing string:"
msgstr "ajoute/supprime la chaîne :"
-#: gitk:2304 gitk:4779
+#: gitk:2318 gitk:4798
msgid "changing lines matching:"
-msgstr ""
+msgstr "modifie les lignes vérifiant :"
-#: gitk:2313 gitk:2315 gitk:4766
+#: gitk:2327 gitk:2329 gitk:4785
msgid "Exact"
msgstr "Exact"
-#: gitk:2315 gitk:4854 gitk:6723
+#: gitk:2329 gitk:4873 gitk:6742
msgid "IgnCase"
msgstr "Ignorer la casse"
-#: gitk:2315 gitk:4736 gitk:4852 gitk:6719
+#: gitk:2329 gitk:4755 gitk:4871 gitk:6738
msgid "Regexp"
msgstr "Expression régulière"
-#: gitk:2317 gitk:2318 gitk:4874 gitk:4904 gitk:4911 gitk:6848 gitk:6916
+#: gitk:2331 gitk:2332 gitk:4893 gitk:4923 gitk:4930 gitk:6867 gitk:6935
msgid "All fields"
msgstr "Tous les champs"
-#: gitk:2318 gitk:4871 gitk:4904 gitk:6786
+#: gitk:2332 gitk:4890 gitk:4923 gitk:6805
msgid "Headline"
-msgstr "Surligner"
+msgstr "Titre"
-#: gitk:2319 gitk:4871 gitk:6786 gitk:6916 gitk:7389
+#: gitk:2333 gitk:4890 gitk:6805 gitk:6935 gitk:7408
msgid "Comments"
msgstr "Commentaires"
-#: gitk:2319 gitk:4871 gitk:4876 gitk:4911 gitk:6786 gitk:7324 gitk:8830
-#: gitk:8845
+#: gitk:2333 gitk:4890 gitk:4895 gitk:4930 gitk:6805 gitk:7343 gitk:8849
+#: gitk:8864
msgid "Author"
msgstr "Auteur"
-#: gitk:2319 gitk:4871 gitk:6786 gitk:7326
+#: gitk:2333 gitk:4890 gitk:6805 gitk:7345
msgid "Committer"
-msgstr "Auteur du commit"
+msgstr "Validateur"
-#: gitk:2350
+#: gitk:2367
msgid "Search"
msgstr "Rechercher"
-#: gitk:2358
+#: gitk:2375
msgid "Diff"
msgstr "Diff"
-#: gitk:2360
+#: gitk:2377
msgid "Old version"
msgstr "Ancienne version"
-#: gitk:2362
+#: gitk:2379
msgid "New version"
msgstr "Nouvelle version"
-#: gitk:2364
+#: gitk:2382
msgid "Lines of context"
msgstr "Lignes de contexte"
-#: gitk:2374
+#: gitk:2392
msgid "Ignore space change"
msgstr "Ignorer les modifications d'espace"
-#: gitk:2378 gitk:2380 gitk:7959 gitk:8206
+#: gitk:2396 gitk:2398 gitk:7978 gitk:8225
msgid "Line diff"
-msgstr ""
+msgstr "différence par ligne"
-#: gitk:2445
+#: gitk:2463
msgid "Patch"
msgstr "Patch"
-#: gitk:2447
+#: gitk:2465
msgid "Tree"
msgstr "Arbre"
-#: gitk:2617 gitk:2637
+#: gitk:2635 gitk:2656
msgid "Diff this -> selected"
-msgstr "Diff entre ceci et la sélection"
+msgstr "Diff ceci -> la sélection"
-#: gitk:2618 gitk:2638
+#: gitk:2636 gitk:2657
msgid "Diff selected -> this"
-msgstr "Diff entre sélection et ceci"
+msgstr "Diff sélection -> ceci"
-#: gitk:2619 gitk:2639
+#: gitk:2637 gitk:2658
msgid "Make patch"
msgstr "Créer patch"
-#: gitk:2620 gitk:9254
+#: gitk:2638 gitk:9273
msgid "Create tag"
-msgstr "Créer tag"
+msgstr "Créer étiquette"
+
+#: gitk:2639
+msgid "Copy commit summary"
+msgstr "Copié le résumé du commit"
-#: gitk:2621 gitk:9371
+#: gitk:2640 gitk:9404
msgid "Write commit to file"
msgstr "Écrire le commit dans un fichier"
-#: gitk:2622 gitk:9428
+#: gitk:2641 gitk:9461
msgid "Create new branch"
msgstr "Créer une nouvelle branche"
-#: gitk:2623
+#: gitk:2642
msgid "Cherry-pick this commit"
msgstr "Cueillir (cherry-pick) ce commit"
-#: gitk:2624
+#: gitk:2643
msgid "Reset HEAD branch to here"
msgstr "Réinitialiser la branche HEAD vers cet état"
-#: gitk:2625
+#: gitk:2644
msgid "Mark this commit"
msgstr "Marquer ce commit"
-#: gitk:2626
+#: gitk:2645
msgid "Return to mark"
msgstr "Retourner à la marque"
-#: gitk:2627
+#: gitk:2646
msgid "Find descendant of this and mark"
msgstr "Chercher le descendant de ceci et le marquer"
-#: gitk:2628
+#: gitk:2647
msgid "Compare with marked commit"
msgstr "Comparer avec le commit marqué"
-#: gitk:2629 gitk:2640
-#, fuzzy
+#: gitk:2648 gitk:2659
msgid "Diff this -> marked commit"
-msgstr "Diff entre ceci et la sélection"
+msgstr "Diff ceci -> sélection"
-#: gitk:2630 gitk:2641
-#, fuzzy
+#: gitk:2649 gitk:2660
msgid "Diff marked commit -> this"
-msgstr "Diff entre sélection et ceci"
+msgstr "Diff entre sélection -> ceci"
-#: gitk:2631
-#, fuzzy
+#: gitk:2650
msgid "Revert this commit"
-msgstr "Marquer ce commit"
+msgstr "Défaire ce commit"
-#: gitk:2647
+#: gitk:2666
msgid "Check out this branch"
msgstr "Récupérer cette branche"
-#: gitk:2648
+#: gitk:2667
msgid "Remove this branch"
msgstr "Supprimer cette branche"
-#: gitk:2649
+#: gitk:2668
msgid "Copy branch name"
-msgstr ""
+msgstr "Copier la nom de la branche"
-#: gitk:2656
+#: gitk:2675
msgid "Highlight this too"
msgstr "Surligner également ceci"
-#: gitk:2657
+#: gitk:2676
msgid "Highlight this only"
msgstr "Surligner seulement ceci"
-#: gitk:2658
+#: gitk:2677
msgid "External diff"
msgstr "Diff externe"
-#: gitk:2659
+#: gitk:2678
msgid "Blame parent commit"
msgstr "Blâmer le commit parent"
-#: gitk:2660
+#: gitk:2679
msgid "Copy path"
-msgstr ""
+msgstr "Copier le chemin"
-#: gitk:2667
+#: gitk:2686
msgid "Show origin of this line"
msgstr "Montrer l'origine de cette ligne"
-#: gitk:2668
+#: gitk:2687
msgid "Run git gui blame on this line"
msgstr "Exécuter git gui blame sur cette ligne"
-#: gitk:3014
-#, fuzzy
+#: gitk:3031
+msgid "About gitk"
+msgstr "À propos de gitk"
+
+#: gitk:3033
msgid ""
"\n"
"Gitk - a commit viewer for git\n"
@@ -378,327 +379,329 @@ msgstr ""
"\n"
"Gitk - visualisateur de commit pour git\n"
"\n"
-"Copyright \\u00a9 2005-2010 Paul Mackerras\n"
+"Copyright \\u00a9 2005-2014 Paul Mackerras\n"
"\n"
-"Utilisation et redistribution soumises aux termes de la GNU General Public "
-"License"
+"Utilisation et redistribution soumises aux termes de la GNU General Public License"
-#: gitk:3022 gitk:3089 gitk:9857
+#: gitk:3041 gitk:3108 gitk:9890
msgid "Close"
msgstr "Fermer"
-#: gitk:3043
+#: gitk:3062
msgid "Gitk key bindings"
msgstr "Raccourcis clavier de Gitk"
-#: gitk:3046
+#: gitk:3065
msgid "Gitk key bindings:"
msgstr "Raccourcis clavier de Gitk :"
-#: gitk:3048
+#: gitk:3067
#, tcl-format
msgid "<%s-Q>\t\tQuit"
msgstr "<%s-Q>\t\tQuitter"
-#: gitk:3049
-#, fuzzy, tcl-format
+#: gitk:3068
+#, tcl-format
msgid "<%s-W>\t\tClose window"
-msgstr "<%s-F>\t\tRechercher"
+msgstr "<%s-W>\t\tFermer la fenêtre"
-#: gitk:3050
+#: gitk:3069
msgid "<Home>\t\tMove to first commit"
msgstr "<Début>\t\tAller au premier commit"
-#: gitk:3051
+#: gitk:3070
msgid "<End>\t\tMove to last commit"
msgstr "<Fin>\t\tAller au dernier commit"
-#: gitk:3052
-#, fuzzy
+#: gitk:3071
msgid "<Up>, p, k\tMove up one commit"
-msgstr "<Haut>, p, i\t Aller au commit suivant"
+msgstr "<Haut>, p, k\t Aller au commit précédent"
-#: gitk:3053
-#, fuzzy
+#: gitk:3072
msgid "<Down>, n, j\tMove down one commit"
-msgstr "<Bas>, n, k\t Aller au commit précédent"
+msgstr "<Bas>, n, j\t Aller au commit suivant"
-#: gitk:3054
-#, fuzzy
+#: gitk:3073
msgid "<Left>, z, h\tGo back in history list"
-msgstr "<Gauche>, z, j\tReculer dans l'historique"
+msgstr "<Gauche>, z, h\tReculer dans l'historique"
-#: gitk:3055
+#: gitk:3074
msgid "<Right>, x, l\tGo forward in history list"
msgstr "<Droite>, x, l\tAvancer dans l'historique"
-#: gitk:3056
+#: gitk:3075
#, tcl-format
msgid "<%s-n>\tGo to n-th parent of current commit in history list"
-msgstr ""
+msgstr "<%s-n>\tAller sur le n-ième parent du commit dans l'historique"
-#: gitk:3057
+#: gitk:3076
msgid "<PageUp>\tMove up one page in commit list"
msgstr "<PageUp>\tMonter d'une page dans la liste des commits"
-#: gitk:3058
+#: gitk:3077
msgid "<PageDown>\tMove down one page in commit list"
msgstr "<PageDown>\tDescendre d'une page dans la liste des commits"
-#: gitk:3059
+#: gitk:3078
#, tcl-format
msgid "<%s-Home>\tScroll to top of commit list"
msgstr "<%s-Début>\tAller en haut de la liste des commits"
-#: gitk:3060
+#: gitk:3079
#, tcl-format
msgid "<%s-End>\tScroll to bottom of commit list"
msgstr "<%s-End>\tAller en bas de la liste des commits"
-#: gitk:3061
+#: gitk:3080
#, tcl-format
msgid "<%s-Up>\tScroll commit list up one line"
msgstr "<%s-Up>\tMonter d'une ligne dans la liste des commits"
-#: gitk:3062
+#: gitk:3081
#, tcl-format
msgid "<%s-Down>\tScroll commit list down one line"
msgstr "<%s-Down>\tDescendre d'une ligne dans la liste des commits"
-#: gitk:3063
+#: gitk:3082
#, tcl-format
msgid "<%s-PageUp>\tScroll commit list up one page"
msgstr "<%s-PageUp>\tMonter d'une page dans la liste des commits"
-#: gitk:3064
+#: gitk:3083
#, tcl-format
msgid "<%s-PageDown>\tScroll commit list down one page"
msgstr "<%s-PageDown>\tDescendre d'une page dans la liste des commits"
-#: gitk:3065
+#: gitk:3084
msgid "<Shift-Up>\tFind backwards (upwards, later commits)"
msgstr ""
"<Shift-Up>\tRecherche en arrière (vers l'avant, commits les plus anciens)"
-#: gitk:3066
+#: gitk:3085
msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)"
msgstr ""
"<Shift-Down>\tRecherche en avant (vers l'arrière, commit les plus récents)"
-#: gitk:3067
+#: gitk:3086
msgid "<Delete>, b\tScroll diff view up one page"
msgstr "<Supprimer>, b\tMonter d'une page dans la vue des diff"
-#: gitk:3068
+#: gitk:3087
msgid "<Backspace>\tScroll diff view up one page"
msgstr "<Backspace>\tMonter d'une page dans la vue des diff"
-#: gitk:3069
+#: gitk:3088
msgid "<Space>\t\tScroll diff view down one page"
msgstr "<Espace>\t\tDescendre d'une page dans la vue des diff"
-#: gitk:3070
+#: gitk:3089
msgid "u\t\tScroll diff view up 18 lines"
msgstr "u\t\tMonter de 18 lignes dans la vue des diff"
-#: gitk:3071
+#: gitk:3090
msgid "d\t\tScroll diff view down 18 lines"
msgstr "d\t\tDescendre de 18 lignes dans la vue des diff"
-#: gitk:3072
+#: gitk:3091
#, tcl-format
msgid "<%s-F>\t\tFind"
msgstr "<%s-F>\t\tRechercher"
-#: gitk:3073
+#: gitk:3092
#, tcl-format
msgid "<%s-G>\t\tMove to next find hit"
msgstr "<%s-G>\t\tAller au résultat de recherche suivant"
-#: gitk:3074
+#: gitk:3093
msgid "<Return>\tMove to next find hit"
msgstr "<Return>\t\tAller au résultat de recherche suivant"
-#: gitk:3075
-#, fuzzy
+#: gitk:3094
msgid "g\t\tGo to commit"
-msgstr "<Fin>\t\tAller au dernier commit"
+msgstr "g\t\tAller au commit"
-#: gitk:3076
+#: gitk:3095
msgid "/\t\tFocus the search box"
msgstr "/\t\tFocus sur la zone de recherche"
-#: gitk:3077
+#: gitk:3096
msgid "?\t\tMove to previous find hit"
msgstr "?\t\tAller au résultat de recherche précédent"
-#: gitk:3078
+#: gitk:3097
msgid "f\t\tScroll diff view to next file"
msgstr "f\t\tAller au prochain fichier dans la vue des diff"
-#: gitk:3079
+#: gitk:3098
#, tcl-format
msgid "<%s-S>\t\tSearch for next hit in diff view"
msgstr "<%s-S>\t\tAller au résultat suivant dans la vue des diff"
-#: gitk:3080
+#: gitk:3099
#, tcl-format
msgid "<%s-R>\t\tSearch for previous hit in diff view"
msgstr "<%s-R>\t\tAller au résultat précédent dans la vue des diff"
-#: gitk:3081
+#: gitk:3100
#, tcl-format
msgid "<%s-KP+>\tIncrease font size"
msgstr "<%s-KP+>\tAugmenter la taille de la police"
-#: gitk:3082
+#: gitk:3101
#, tcl-format
msgid "<%s-plus>\tIncrease font size"
msgstr "<%s-plus>\tAugmenter la taille de la police"
-#: gitk:3083
+#: gitk:3102
#, tcl-format
msgid "<%s-KP->\tDecrease font size"
msgstr "<%s-KP->\tDiminuer la taille de la police"
-#: gitk:3084
+#: gitk:3103
#, tcl-format
msgid "<%s-minus>\tDecrease font size"
msgstr "<%s-minus>\tDiminuer la taille de la police"
-#: gitk:3085
+#: gitk:3104
msgid "<F5>\t\tUpdate"
msgstr "<F5>\t\tMise à jour"
-#: gitk:3550 gitk:3559
+#: gitk:3569 gitk:3578
#, tcl-format
msgid "Error creating temporary directory %s:"
msgstr "Erreur lors de la création du répertoire temporaire %s :"
-#: gitk:3572
+#: gitk:3591
#, tcl-format
msgid "Error getting \"%s\" from %s:"
msgstr "Erreur en obtenant \"%s\" de %s:"
-#: gitk:3635
+#: gitk:3654
msgid "command failed:"
msgstr "échec de la commande :"
-#: gitk:3784
+#: gitk:3803
msgid "No such commit"
msgstr "Commit inexistant"
-#: gitk:3798
+#: gitk:3817
msgid "git gui blame: command failed:"
msgstr "git gui blame : échec de la commande :"
-#: gitk:3829
+#: gitk:3848
#, tcl-format
msgid "Couldn't read merge head: %s"
msgstr "Impossible de lire le head de la fusion : %s"
-#: gitk:3837
+#: gitk:3856
#, tcl-format
msgid "Error reading index: %s"
msgstr "Erreur à la lecture de l'index : %s"
-#: gitk:3862
+#: gitk:3881
#, tcl-format
msgid "Couldn't start git blame: %s"
msgstr "Impossible de démarrer git blame : %s"
-#: gitk:3865 gitk:6754
+#: gitk:3884 gitk:6773
msgid "Searching"
msgstr "Recherche en cours"
-#: gitk:3897
+#: gitk:3916
#, tcl-format
msgid "Error running git blame: %s"
msgstr "Erreur à l'exécution de git blame : %s"
-#: gitk:3925
+#: gitk:3944
#, tcl-format
msgid "That line comes from commit %s, which is not in this view"
msgstr "Cette ligne est issue du commit %s, qui n'est pas dans cette vue"
-#: gitk:3939
+#: gitk:3958
msgid "External diff viewer failed:"
-msgstr "Échec de l'outil externe de visualisation des diff"
+msgstr "Échec de l'outil externe de visualisation des diff :"
+
+#: gitk:4062
+msgid "All files"
+msgstr "Tous les fichiers"
-#: gitk:4070
+#: gitk:4086
+msgid "View"
+msgstr "Vue"
+
+#: gitk:4089
msgid "Gitk view definition"
msgstr "Définition des vues de Gitk"
-#: gitk:4074
+#: gitk:4093
msgid "Remember this view"
msgstr "Se souvenir de cette vue"
-#: gitk:4075
+#: gitk:4094
msgid "References (space separated list):"
msgstr "Références (liste d'éléments séparés par des espaces) :"
-#: gitk:4076
+#: gitk:4095
msgid "Branches & tags:"
-msgstr "Branches & tags :"
+msgstr "Branches & étiquettes :"
-#: gitk:4077
+#: gitk:4096
msgid "All refs"
msgstr "Toutes les références"
-#: gitk:4078
+#: gitk:4097
msgid "All (local) branches"
msgstr "Toutes les branches (locales)"
-#: gitk:4079
+#: gitk:4098
msgid "All tags"
-msgstr "Tous les tags"
+msgstr "Toutes les étiquettes"
-#: gitk:4080
+#: gitk:4099
msgid "All remote-tracking branches"
msgstr "Toutes les branches de suivi à distance"
-#: gitk:4081
+#: gitk:4100
msgid "Commit Info (regular expressions):"
msgstr "Info sur les commits (expressions régulières) :"
-#: gitk:4082
+#: gitk:4101
msgid "Author:"
msgstr "Auteur :"
-#: gitk:4083
+#: gitk:4102
msgid "Committer:"
-msgstr "Commiteur :"
+msgstr "Validateur :"
-#: gitk:4084
+#: gitk:4103
msgid "Commit Message:"
msgstr "Message de commit :"
-#: gitk:4085
+#: gitk:4104
msgid "Matches all Commit Info criteria"
msgstr "Correspond à tous les critères d'Info sur les commits"
-#: gitk:4086
-#, fuzzy
+#: gitk:4105
msgid "Matches no Commit Info criteria"
-msgstr "Correspond à tous les critères d'Info sur les commits"
+msgstr "Ne correspond à aucun des critères d'Info sur les commits"
-#: gitk:4087
+#: gitk:4106
msgid "Changes to Files:"
msgstr "Changements des fichiers :"
-#: gitk:4088
+#: gitk:4107
msgid "Fixed String"
msgstr "Chaîne Figée"
-#: gitk:4089
+#: gitk:4108
msgid "Regular Expression"
msgstr "Expression Régulière"
-#: gitk:4090
+#: gitk:4109
msgid "Search string:"
msgstr "Recherche de la chaîne :"
-#: gitk:4091
+#: gitk:4110
msgid ""
"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 "
"15:27:38\"):"
@@ -706,204 +709,201 @@ msgstr ""
"Dates des commits (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, "
"2009 15:27:38\") :"
-#: gitk:4092
+#: gitk:4111
msgid "Since:"
-msgstr "De :"
+msgstr "Depuis :"
-#: gitk:4093
+#: gitk:4112
msgid "Until:"
msgstr "Jusqu'au :"
-#: gitk:4094
+#: gitk:4113
msgid "Limit and/or skip a number of revisions (positive integer):"
msgstr "Limiter et/ou sauter un certain nombre (entier positif) de révisions :"
-#: gitk:4095
+#: gitk:4114
msgid "Number to show:"
msgstr "Nombre à afficher :"
-#: gitk:4096
+#: gitk:4115
msgid "Number to skip:"
msgstr "Nombre à sauter :"
-#: gitk:4097
+#: gitk:4116
msgid "Miscellaneous options:"
msgstr "Options diverses :"
-#: gitk:4098
+#: gitk:4117
msgid "Strictly sort by date"
msgstr "Trier par date"
-# FIXME : traduction de "branch sides"
-#: gitk:4099
-#, fuzzy
+#: gitk:4118
msgid "Mark branch sides"
-msgstr "Marquer les extrémités des branches"
+msgstr "Indiquer les côtés des branches"
-#: gitk:4100
+#: gitk:4119
msgid "Limit to first parent"
msgstr "Limiter au premier ancêtre"
-#: gitk:4101
+#: gitk:4120
msgid "Simple history"
msgstr "Historique simple"
-#: gitk:4102
+#: gitk:4121
msgid "Additional arguments to git log:"
msgstr "Arguments supplémentaires de git log :"
-#: gitk:4103
+#: gitk:4122
msgid "Enter files and directories to include, one per line:"
msgstr "Saisir les fichiers et répertoires à inclure, un par ligne :"
-#: gitk:4104
+#: gitk:4123
msgid "Command to generate more commits to include:"
msgstr "Commande pour générer plus de commits à inclure :"
-#: gitk:4228
+#: gitk:4247
msgid "Gitk: edit view"
msgstr "Gitk : éditer la vue"
-#: gitk:4236
+#: gitk:4255
msgid "-- criteria for selecting revisions"
msgstr "-- critère pour la sélection des révisions"
-#: gitk:4241
-#, fuzzy
+#: gitk:4260
msgid "View Name"
-msgstr "Nom de la vue :"
+msgstr "Nom de la vue"
-#: gitk:4316
+#: gitk:4335
msgid "Apply (F5)"
msgstr "Appliquer (F5)"
-#: gitk:4354
+#: gitk:4373
msgid "Error in commit selection arguments:"
msgstr "Erreur dans les arguments de sélection des commits :"
-#: gitk:4409 gitk:4462 gitk:4924 gitk:4938 gitk:6208 gitk:12373 gitk:12374
+#: gitk:4428 gitk:4481 gitk:4943 gitk:4957 gitk:6227 gitk:12410 gitk:12411
msgid "None"
msgstr "Aucun"
-#: gitk:5021 gitk:5026
+#: gitk:5040 gitk:5045
msgid "Descendant"
msgstr "Descendant"
-#: gitk:5022
+#: gitk:5041
msgid "Not descendant"
msgstr "Pas un descendant"
-#: gitk:5029 gitk:5034
+#: gitk:5048 gitk:5053
msgid "Ancestor"
msgstr "Ancêtre"
-#: gitk:5030
+#: gitk:5049
msgid "Not ancestor"
msgstr "Pas un ancêtre"
-#: gitk:5324
+#: gitk:5343
msgid "Local changes checked in to index but not committed"
-msgstr "Modifications locales enregistrées dans l'index mais non commitées"
+msgstr "Modifications locales enregistrées dans l'index mais non validées"
-#: gitk:5360
+#: gitk:5379
msgid "Local uncommitted changes, not checked in to index"
-msgstr "Modifications locales non enregistrées dans l'index et non commitées"
+msgstr "Modifications locales non enregistrées dans l'index et non validées"
-#: gitk:7134
+#: gitk:7153
msgid "and many more"
-msgstr ""
+msgstr "et beaucoup plus"
-#: gitk:7137
+#: gitk:7156
msgid "many"
msgstr "nombreux"
-#: gitk:7328
+#: gitk:7347
msgid "Tags:"
-msgstr "Tags :"
+msgstr "Étiquettes :"
-#: gitk:7345 gitk:7351 gitk:8825
+#: gitk:7364 gitk:7370 gitk:8844
msgid "Parent"
msgstr "Parent"
-#: gitk:7356
+#: gitk:7375
msgid "Child"
msgstr "Enfant"
-#: gitk:7365
+#: gitk:7384
msgid "Branch"
msgstr "Branche"
-#: gitk:7368
+#: gitk:7387
msgid "Follows"
msgstr "Suit"
-#: gitk:7371
+#: gitk:7390
msgid "Precedes"
msgstr "Précède"
-#: gitk:7966
+#: gitk:7985
#, tcl-format
msgid "Error getting diffs: %s"
msgstr "Erreur lors de la récupération des diff : %s"
-#: gitk:8650
+#: gitk:8669
msgid "Goto:"
msgstr "Aller à :"
-#: gitk:8671
+#: gitk:8690
#, tcl-format
msgid "Short SHA1 id %s is ambiguous"
-msgstr "Id SHA1 court %s est ambigu"
+msgstr "L'id SHA1 court %s est ambigu"
-#: gitk:8678
+#: gitk:8697
#, tcl-format
msgid "Revision %s is not known"
-msgstr "Id SHA1 %s est inconnu"
+msgstr "La révision %s est inconnu"
-#: gitk:8688
+#: gitk:8707
#, tcl-format
msgid "SHA1 id %s is not known"
-msgstr "Id SHA1 %s est inconnu"
+msgstr "L'id SHA1 %s est inconnu"
-#: gitk:8690
+#: gitk:8709
#, tcl-format
msgid "Revision %s is not in the current view"
msgstr "La révision %s n'est pas dans la vue courante"
-#: gitk:8832 gitk:8847
+#: gitk:8851 gitk:8866
msgid "Date"
msgstr "Date"
-#: gitk:8835
+#: gitk:8854
msgid "Children"
msgstr "Enfants"
-#: gitk:8898
+#: gitk:8917
#, tcl-format
msgid "Reset %s branch to here"
msgstr "Réinitialiser la branche %s vers cet état"
-#: gitk:8900
+#: gitk:8919
msgid "Detached head: can't reset"
msgstr "Head détaché : impossible de réinitialiser"
-#: gitk:9005 gitk:9011
+#: gitk:9024 gitk:9030
msgid "Skipping merge commit "
msgstr "Éviter le commit de la fusion "
-#: gitk:9020 gitk:9025
+#: gitk:9039 gitk:9044
msgid "Error getting patch ID for "
msgstr "Erreur à l'obtention de l'ID du patch pour "
-#: gitk:9021 gitk:9026
+#: gitk:9040 gitk:9045
msgid " - stopping\n"
msgstr " - arrêt en cours\n"
-#: gitk:9031 gitk:9034 gitk:9042 gitk:9056 gitk:9065
+#: gitk:9050 gitk:9053 gitk:9061 gitk:9075 gitk:9084
msgid "Commit "
msgstr "Commit "
-#: gitk:9035
+#: gitk:9054
msgid ""
" is the same patch as\n"
" "
@@ -911,7 +911,7 @@ msgstr ""
"est le même patch que \n"
" "
-#: gitk:9043
+#: gitk:9062
msgid ""
" differs from\n"
" "
@@ -919,240 +919,226 @@ msgstr ""
" diffère de\n"
" "
-#: gitk:9045
+#: gitk:9064
msgid ""
"Diff of commits:\n"
"\n"
-msgstr ""
+msgstr "Diff des commits :\n\n"
-#: gitk:9057 gitk:9066
+#: gitk:9076 gitk:9085
#, tcl-format
msgid " has %s children - stopping\n"
-msgstr "a %s enfants - arrêt en cours\n"
+msgstr " a %s enfants - arrêt en cours\n"
-#: gitk:9085
-#, fuzzy, tcl-format
+#: gitk:9104
+#, tcl-format
msgid "Error writing commit to file: %s"
-msgstr "Erreur à l'ecriture du commit :"
+msgstr "Erreur à l'écriture du commit dans le fichier : %s"
-#: gitk:9091
-#, fuzzy, tcl-format
+#: gitk:9110
+#, tcl-format
msgid "Error diffing commits: %s"
-msgstr "Erreur à l'ecriture du commit :"
+msgstr "Erreur à la différence des commits : %s"
-#: gitk:9137
+#: gitk:9156
msgid "Top"
msgstr "Haut"
-#: gitk:9138
+#: gitk:9157
msgid "From"
msgstr "De"
-#: gitk:9143
+#: gitk:9162
msgid "To"
msgstr "À"
-#: gitk:9167
+#: gitk:9186
msgid "Generate patch"
msgstr "Générer le patch"
-#: gitk:9169
+#: gitk:9188
msgid "From:"
msgstr "De :"
-#: gitk:9178
+#: gitk:9197
msgid "To:"
msgstr "À :"
-#: gitk:9187
+#: gitk:9206
msgid "Reverse"
msgstr "Inverser"
-#: gitk:9189 gitk:9385
+#: gitk:9208 gitk:9418
msgid "Output file:"
msgstr "Fichier de sortie :"
-#: gitk:9195
+#: gitk:9214
msgid "Generate"
msgstr "Générer"
-#: gitk:9233
+#: gitk:9252
msgid "Error creating patch:"
msgstr "Erreur à la création du patch :"
-#: gitk:9256 gitk:9373 gitk:9430
+#: gitk:9275 gitk:9406 gitk:9463
msgid "ID:"
msgstr "ID :"
-#: gitk:9265
+#: gitk:9284
msgid "Tag name:"
-msgstr "Nom du Tag :"
+msgstr "Nom de l'étiquette :"
-#: gitk:9268
+#: gitk:9287
msgid "Tag message is optional"
-msgstr ""
+msgstr "Le message d'étiquette est optionnel"
-#: gitk:9270
-#, fuzzy
+#: gitk:9289
msgid "Tag message:"
-msgstr "Nom du Tag :"
+msgstr "Message d'étiquette :"
-#: gitk:9274 gitk:9439
+#: gitk:9293 gitk:9472
msgid "Create"
msgstr "Créer"
-#: gitk:9292
+#: gitk:9311
msgid "No tag name specified"
-msgstr "Aucun nom de tag spécifié"
+msgstr "Aucun nom d'étiquette spécifié"
-#: gitk:9296
+#: gitk:9315
#, tcl-format
msgid "Tag \"%s\" already exists"
-msgstr "Le tag \"%s\" existe déjà"
+msgstr "L'étiquette \"%s\" existe déjà"
-#: gitk:9306
+#: gitk:9325
msgid "Error creating tag:"
-msgstr "Erreur à la création du tag :"
+msgstr "Erreur à la création de l'étiquette :"
-#: gitk:9382
+#: gitk:9415
msgid "Command:"
msgstr "Commande :"
-#: gitk:9390
+#: gitk:9423
msgid "Write"
msgstr "Écrire"
-#: gitk:9408
+#: gitk:9441
msgid "Error writing commit:"
msgstr "Erreur à l'ecriture du commit :"
-#: gitk:9435
+#: gitk:9468
msgid "Name:"
msgstr "Nom :"
-#: gitk:9458
+#: gitk:9491
msgid "Please specify a name for the new branch"
msgstr "Veuillez spécifier un nom pour la nouvelle branche"
-#: gitk:9463
+#: gitk:9496
#, tcl-format
msgid "Branch '%s' already exists. Overwrite?"
msgstr "La branche '%s' existe déjà. Écraser?"
-#: gitk:9530
+#: gitk:9563
#, tcl-format
msgid "Commit %s is already included in branch %s -- really re-apply it?"
msgstr ""
"Le Commit %s est déjà inclus dans la branche %s -- le ré-appliquer malgré "
"tout?"
-#: gitk:9535
+#: gitk:9568
msgid "Cherry-picking"
-msgstr "Cueillir (Cherry-picking)"
+msgstr "Picorer (Cherry-picking)"
-#: gitk:9544
+#: gitk:9577
#, tcl-format
msgid ""
"Cherry-pick failed because of local changes to file '%s'.\n"
"Please commit, reset or stash your changes and try again."
msgstr ""
-"La cueillette (cherry-pick) a échouée à cause de modifications locales du "
-"fichier '%s'.\n"
-"Veuillez commiter, réinitialiser ou stasher vos changements et essayer de "
-"nouveau."
+"Le picorage (cherry-pick) a échouée à cause de modifications locales du fichier '%s'.\n"
+"Veuillez commiter, réinitialiser ou stasher vos changements et essayer de nouveau."
-#: gitk:9550
+#: gitk:9583
msgid ""
"Cherry-pick failed because of merge conflict.\n"
"Do you wish to run git citool to resolve it?"
msgstr ""
-"La cueillette (cherry-pick) a échouée à cause d'un conflit lors d'une "
-"fusion.\n"
+"Le picorage (cherry-pick) a échouée à cause d'un conflit lors d'une fusion.\n"
"Souhaitez-vous exécuter git citool pour le résoudre ?"
-#: gitk:9566 gitk:9624
+#: gitk:9599 gitk:9657
msgid "No changes committed"
-msgstr "Aucun changement commité"
+msgstr "Aucune modification validée"
-#: gitk:9593
-#, fuzzy, tcl-format
+#: gitk:9626
+#, tcl-format
msgid "Commit %s is not included in branch %s -- really revert it?"
-msgstr ""
-"Le Commit %s est déjà inclus dans la branche %s -- le ré-appliquer malgré "
-"tout?"
+msgstr "Le Commit %s n'est pas inclus dans la branche %s -- le défaire malgré tout?"
-#: gitk:9598
-#, fuzzy
+#: gitk:9631
msgid "Reverting"
-msgstr "Réinitialisation"
+msgstr "Commit défait"
-#: gitk:9606
-#, fuzzy, tcl-format
+#: gitk:9639
+#, tcl-format
msgid ""
"Revert failed because of local changes to the following files:%s Please "
"commit, reset or stash your changes and try again."
-msgstr ""
-"La cueillette (cherry-pick) a échouée à cause de modifications locales du "
-"fichier '%s'.\n"
-"Veuillez commiter, réinitialiser ou stasher vos changements et essayer de "
-"nouveau."
+msgstr "Échec en tentant de défaire le commit à cause de modifications locales des fichiers : %s. Veuillez valider, réinitialiser ou remiser vos modifications et essayer de nouveau."
-#: gitk:9610
-#, fuzzy
+#: gitk:9643
msgid ""
"Revert failed because of merge conflict.\n"
" Do you wish to run git citool to resolve it?"
msgstr ""
-"La cueillette (cherry-pick) a échouée à cause d'un conflit lors d'une "
-"fusion.\n"
+"Échec en tentant de défaire à cause d'un conflit de fusion.\n"
"Souhaitez-vous exécuter git citool pour le résoudre ?"
-#: gitk:9653
+#: gitk:9686
msgid "Confirm reset"
msgstr "Confirmer la réinitialisation"
-#: gitk:9655
+#: gitk:9688
#, tcl-format
msgid "Reset branch %s to %s?"
msgstr "Réinitialiser la branche %s à %s?"
-#: gitk:9657
+#: gitk:9690
msgid "Reset type:"
msgstr "Type de réinitialisation :"
-#: gitk:9660
+#: gitk:9693
msgid "Soft: Leave working tree and index untouched"
msgstr "Douce : Laisse le répertoire de travail et l'index intacts"
-#: gitk:9663
+#: gitk:9696
msgid "Mixed: Leave working tree untouched, reset index"
msgstr ""
"Hybride : Laisse le répertoire de travail dans son état courant, "
"réinitialise l'index"
-#: gitk:9666
+#: gitk:9699
msgid ""
"Hard: Reset working tree and index\n"
"(discard ALL local changes)"
msgstr ""
"Dure : Réinitialise le répertoire de travail et l'index\n"
-"(abandonne TOUS les changements locaux)"
+"(abandonne TOUTES les modifications locale)"
-#: gitk:9683
+#: gitk:9716
msgid "Resetting"
msgstr "Réinitialisation"
# Fixme: Récupération est-il vraiment une mauvaise traduction?
-#: gitk:9743
-#, fuzzy
+#: gitk:9776
msgid "Checking out"
-msgstr "Récupération"
+msgstr "Extraction"
-#: gitk:9796
+#: gitk:9829
msgid "Cannot delete the currently checked-out branch"
-msgstr "Impossible de supprimer la branche en cours"
+msgstr "Impossible de supprimer la branche extraite"
-#: gitk:9802
+#: gitk:9835
#, tcl-format
msgid ""
"The commits on branch %s aren't on any other branch.\n"
@@ -1161,16 +1147,16 @@ msgstr ""
"Les commits de la branche %s ne sont dans aucune autre branche.\n"
"Voulez-vous vraiment supprimer cette branche %s ?"
-#: gitk:9833
+#: gitk:9866
#, tcl-format
msgid "Tags and heads: %s"
-msgstr "Tags et heads : %s"
+msgstr "Étiquettes et heads : %s"
-#: gitk:9850
+#: gitk:9883
msgid "Filter"
msgstr "Filtrer"
-#: gitk:10146
+#: gitk:10179
msgid ""
"Error reading commit topology information; branch and preceding/following "
"tag information will be incomplete."
@@ -1179,207 +1165,202 @@ msgstr ""
"informations sur les branches et les tags précédents/suivants seront "
"incomplètes."
-#: gitk:11123
+#: gitk:11156
msgid "Tag"
-msgstr "Tag"
+msgstr "Étiquette"
-#: gitk:11127
+#: gitk:11160
msgid "Id"
msgstr "Id"
-#: gitk:11210
+#: gitk:11243
msgid "Gitk font chooser"
msgstr "Sélecteur de police de Gitk"
-#: gitk:11227
+#: gitk:11260
msgid "B"
msgstr "B"
-#: gitk:11230
+#: gitk:11263
msgid "I"
msgstr "I"
-#: gitk:11348
+#: gitk:11381
msgid "Commit list display options"
msgstr "Options d'affichage de la liste des commits"
-#: gitk:11351
+#: gitk:11384
msgid "Maximum graph width (lines)"
msgstr "Longueur maximum du graphe (lignes)"
# FIXME : Traduction standard de "pane"?
-#: gitk:11355
-#, fuzzy, no-tcl-format
+#: gitk:11388
+#, no-tcl-format
msgid "Maximum graph width (% of pane)"
-msgstr "Longueur maximum du graphe (% du panneau)"
+msgstr "Largeur maximum du graphe (% du panneau)"
-#: gitk:11358
+#: gitk:11391
msgid "Show local changes"
-msgstr "Montrer les changements locaux"
+msgstr "Montrer les modifications locales"
-#: gitk:11361
-#, fuzzy
+#: gitk:11394
msgid "Auto-select SHA1 (length)"
-msgstr "Sélection auto. du SHA1"
+msgstr "Sélection auto. du SHA1 (longueur)"
-#: gitk:11365
+#: gitk:11398
msgid "Hide remote refs"
msgstr "Cacher les refs distantes"
-#: gitk:11369
+#: gitk:11402
msgid "Diff display options"
msgstr "Options d'affichage des diff"
-#: gitk:11371
+#: gitk:11404
msgid "Tab spacing"
msgstr "Taille des tabulations"
-#: gitk:11374
-#, fuzzy
+#: gitk:11407
msgid "Display nearby tags/heads"
msgstr "Afficher les tags les plus proches"
-#: gitk:11377
+#: gitk:11410
msgid "Maximum # tags/heads to show"
-msgstr ""
+msgstr "Nombre maximum d'étiquettes/heads à afficher"
-#: gitk:11380
+#: gitk:11413
msgid "Limit diffs to listed paths"
msgstr "Limiter les différences aux chemins listés"
-#: gitk:11383
+#: gitk:11416
msgid "Support per-file encodings"
msgstr "Support pour un encodage des caractères par fichier"
-#: gitk:11389 gitk:11536
+#: gitk:11422 gitk:11569
msgid "External diff tool"
msgstr "Outil diff externe"
-#: gitk:11390
+#: gitk:11423
msgid "Choose..."
msgstr "Choisir..."
-#: gitk:11395
-#, fuzzy
+#: gitk:11428
msgid "General options"
-msgstr "Générer le patch"
+msgstr "Options générales"
-#: gitk:11398
+#: gitk:11431
msgid "Use themed widgets"
-msgstr ""
+msgstr "Utiliser des widgets en thème"
-#: gitk:11400
+#: gitk:11433
msgid "(change requires restart)"
-msgstr ""
+msgstr "(la modification nécessite un redémarrage)"
-#: gitk:11402
+#: gitk:11435
msgid "(currently unavailable)"
-msgstr ""
+msgstr "(non disponible actuellement)"
-#: gitk:11413
+#: gitk:11446
msgid "Colors: press to choose"
msgstr "Couleurs : cliquer pour choisir"
-#: gitk:11416
+#: gitk:11449
msgid "Interface"
-msgstr ""
+msgstr "Interface"
-#: gitk:11417
-#, fuzzy
+#: gitk:11450
msgid "interface"
-msgstr "Police de l'interface utilisateur"
+msgstr "interface"
-#: gitk:11420
+#: gitk:11453
msgid "Background"
msgstr "Arrière-plan"
-#: gitk:11421 gitk:11451
+#: gitk:11454 gitk:11484
msgid "background"
msgstr "arrière-plan"
-#: gitk:11424
+#: gitk:11457
msgid "Foreground"
msgstr "Premier plan"
-#: gitk:11425
+#: gitk:11458
msgid "foreground"
msgstr "premier plan"
-#: gitk:11428
+#: gitk:11461
msgid "Diff: old lines"
msgstr "Diff : anciennes lignes"
-#: gitk:11429
+#: gitk:11462
msgid "diff old lines"
msgstr "diff anciennes lignes"
-#: gitk:11433
+#: gitk:11466
msgid "Diff: new lines"
msgstr "Diff : nouvelles lignes"
-#: gitk:11434
+#: gitk:11467
msgid "diff new lines"
msgstr "diff nouvelles lignes"
-#: gitk:11438
+#: gitk:11471
msgid "Diff: hunk header"
msgstr "Diff : entête du hunk"
-#: gitk:11440
+#: gitk:11473
msgid "diff hunk header"
msgstr "diff : entête du hunk"
-#: gitk:11444
+#: gitk:11477
msgid "Marked line bg"
-msgstr "Arrière-plan de la ligne marquée"
+msgstr "Fond de la ligne marquée"
-#: gitk:11446
+#: gitk:11479
msgid "marked line background"
-msgstr "Arrière-plan de la ligne marquée"
+msgstr "Fond de la ligne marquée"
-#: gitk:11450
+#: gitk:11483
msgid "Select bg"
-msgstr "Sélectionner l'arrière-plan"
+msgstr "Sélectionner le fond"
-#: gitk:11459
+#: gitk:11492
msgid "Fonts: press to choose"
msgstr "Polices : cliquer pour choisir"
-#: gitk:11461
+#: gitk:11494
msgid "Main font"
msgstr "Police principale"
-#: gitk:11462
+#: gitk:11495
msgid "Diff display font"
msgstr "Police d'affichage des diff"
-#: gitk:11463
+#: gitk:11496
msgid "User interface font"
msgstr "Police de l'interface utilisateur"
-#: gitk:11485
+#: gitk:11518
msgid "Gitk preferences"
msgstr "Préférences de Gitk"
-#: gitk:11494
-#, fuzzy
+#: gitk:11527
msgid "General"
-msgstr "Générer"
+msgstr "Général"
-#: gitk:11495
+#: gitk:11528
msgid "Colors"
-msgstr ""
+msgstr "Couleurs"
-#: gitk:11496
+#: gitk:11529
msgid "Fonts"
-msgstr ""
+msgstr "Polices"
-#: gitk:11546
+#: gitk:11579
#, tcl-format
msgid "Gitk: choose color for %s"
msgstr "Gitk : choisir la couleur de %s"
-#: gitk:12059
+#: gitk:12092
msgid ""
"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
" Gitk requires at least Tcl/Tk 8.4."
@@ -1387,16 +1368,16 @@ msgstr ""
"Désolé, gitk ne peut être exécuté avec cette version de Tcl/Tk.\n"
" Gitk requiert Tcl/Tk version 8.4 ou supérieur."
-#: gitk:12269
+#: gitk:12302
msgid "Cannot find a git repository here."
msgstr "Impossible de trouver un dépôt git ici."
-#: gitk:12316
+#: gitk:12349
#, tcl-format
msgid "Ambiguous argument '%s': both revision and filename"
msgstr "Argument '%s' ambigu : à la fois une révision et un nom de fichier"
-#: gitk:12328
+#: gitk:12361
msgid "Bad arguments to gitk:"
msgstr "Arguments invalides pour gitk :"
diff --git a/graph.c b/graph.c
index c25a09a..1350bdd 100644
--- a/graph.c
+++ b/graph.c
@@ -234,12 +234,10 @@ struct git_graph *graph_init(struct rev_info *opt)
* We'll automatically grow columns later if we need more room.
*/
graph->column_capacity = 30;
- graph->columns = xmalloc(sizeof(struct column) *
- graph->column_capacity);
- graph->new_columns = xmalloc(sizeof(struct column) *
- graph->column_capacity);
- graph->mapping = xmalloc(sizeof(int) * 2 * graph->column_capacity);
- graph->new_mapping = xmalloc(sizeof(int) * 2 * graph->column_capacity);
+ ALLOC_ARRAY(graph->columns, graph->column_capacity);
+ ALLOC_ARRAY(graph->new_columns, graph->column_capacity);
+ ALLOC_ARRAY(graph->mapping, 2 * graph->column_capacity);
+ ALLOC_ARRAY(graph->new_mapping, 2 * graph->column_capacity);
/*
* The diff output prefix callback, with this we can make
diff --git a/grep.c b/grep.c
index 7b2b96a..528b652 100644
--- a/grep.c
+++ b/grep.c
@@ -1741,7 +1741,7 @@ static int grep_source_load_file(struct grep_source *gs)
i = open(filename, O_RDONLY);
if (i < 0)
goto err_ret;
- data = xmalloc(size + 1);
+ data = xmallocz(size);
if (st.st_size != read_in_full(i, data, size)) {
error(_("'%s': short read %s"), filename, strerror(errno));
close(i);
@@ -1749,7 +1749,6 @@ static int grep_source_load_file(struct grep_source *gs)
return -1;
}
close(i);
- data[size] = 0;
gs->buf = data;
gs->size = size;
diff --git a/hashmap.c b/hashmap.c
index f693839..b10b642 100644
--- a/hashmap.c
+++ b/hashmap.c
@@ -256,10 +256,9 @@ const void *memintern(const void *data, size_t len)
e = hashmap_get(&map, &key, data);
if (!e) {
/* not found: create it */
- e = xmallocz(sizeof(struct pool_entry) + len);
+ FLEX_ALLOC_MEM(e, data, data, len);
hashmap_entry_init(e, key.ent.hash);
e->len = len;
- memcpy(e->data, data, len);
hashmap_add(&map, e);
}
return e->data;
diff --git a/help.c b/help.c
index d996b34..19328ea 100644
--- a/help.c
+++ b/help.c
@@ -11,11 +11,9 @@
void add_cmdname(struct cmdnames *cmds, const char *name, int len)
{
- struct cmdname *ent = xmalloc(sizeof(*ent) + len + 1);
-
+ struct cmdname *ent;
+ FLEX_ALLOC_MEM(ent, name, name, len);
ent->len = len;
- memcpy(ent->name, name, len);
- ent->name[len] = 0;
ALLOC_GROW(cmds->names, cmds->cnt + 1, cmds->alloc);
cmds->names[cmds->cnt++] = ent;
diff --git a/http-push.c b/http-push.c
index d857b13..bd60668 100644
--- a/http-push.c
+++ b/http-push.c
@@ -1277,9 +1277,7 @@ static struct object_list **add_one_object(struct object *obj, struct object_lis
}
static struct object_list **process_blob(struct blob *blob,
- struct object_list **p,
- struct name_path *path,
- const char *name)
+ struct object_list **p)
{
struct object *obj = &blob->object;
@@ -1293,14 +1291,11 @@ static struct object_list **process_blob(struct blob *blob,
}
static struct object_list **process_tree(struct tree *tree,
- struct object_list **p,
- struct name_path *path,
- const char *name)
+ struct object_list **p)
{
struct object *obj = &tree->object;
struct tree_desc desc;
struct name_entry entry;
- struct name_path me;
obj->flags |= LOCAL;
@@ -1310,21 +1305,17 @@ static struct object_list **process_tree(struct tree *tree,
die("bad tree object %s", oid_to_hex(&obj->oid));
obj->flags |= SEEN;
- name = xstrdup(name);
p = add_one_object(obj, p);
- me.up = path;
- me.elem = name;
- me.elem_len = strlen(name);
init_tree_desc(&desc, tree->buffer, tree->size);
while (tree_entry(&desc, &entry))
switch (object_type(entry.mode)) {
case OBJ_TREE:
- p = process_tree(lookup_tree(entry.sha1), p, &me, name);
+ p = process_tree(lookup_tree(entry.sha1), p);
break;
case OBJ_BLOB:
- p = process_blob(lookup_blob(entry.sha1), p, &me, name);
+ p = process_blob(lookup_blob(entry.sha1), p);
break;
default:
/* Subproject commit - not in this repository */
@@ -1343,7 +1334,7 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock)
int count = 0;
while ((commit = get_revision(revs)) != NULL) {
- p = process_tree(commit->tree, p, NULL, "");
+ p = process_tree(commit->tree, p);
commit->object.flags |= LOCAL;
if (!(commit->object.flags & UNINTERESTING))
count += add_send_request(&commit->object, lock);
@@ -1362,11 +1353,11 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock)
continue;
}
if (obj->type == OBJ_TREE) {
- p = process_tree((struct tree *)obj, p, NULL, name);
+ p = process_tree((struct tree *)obj, p);
continue;
}
if (obj->type == OBJ_BLOB) {
- p = process_blob((struct blob *)obj, p, NULL, name);
+ p = process_blob((struct blob *)obj, p);
continue;
}
die("unknown pending object %s (%s)", oid_to_hex(&obj->oid), name);
diff --git a/http.c b/http.c
index dfc53c1..69da445 100644
--- a/http.c
+++ b/http.c
@@ -11,6 +11,11 @@
#include "gettext.h"
#include "transport.h"
+#if LIBCURL_VERSION_NUM >= 0x070a08
+long int git_curl_ipresolve = CURL_IPRESOLVE_WHATEVER;
+#else
+long int git_curl_ipresolve;
+#endif
int active_requests;
int http_is_verbose;
size_t http_post_buffer = 16 * LARGE_PACKET_MAX;
@@ -57,11 +62,15 @@ static const char *ssl_key;
#if LIBCURL_VERSION_NUM >= 0x070908
static const char *ssl_capath;
#endif
+#if LIBCURL_VERSION_NUM >= 0x072c00
+static const char *ssl_pinnedkey;
+#endif
static const char *ssl_cainfo;
static long curl_low_speed_limit = -1;
static long curl_low_speed_time = -1;
static int curl_ftp_no_epsv;
static const char *curl_http_proxy;
+static const char *curl_no_proxy;
static const char *http_proxy_authmethod;
static struct {
const char *name;
@@ -87,6 +96,7 @@ static int curl_save_cookies;
struct credential http_auth = CREDENTIAL_INIT;
static int http_proactive_auth;
static const char *user_agent;
+static int curl_empty_auth;
#if LIBCURL_VERSION_NUM >= 0x071700
/* Use CURLOPT_KEYPASSWD as is */
@@ -299,14 +309,31 @@ static int http_options(const char *var, const char *value, void *cb)
if (!strcmp("http.useragent", var))
return git_config_string(&user_agent, var, value);
+ if (!strcmp("http.emptyauth", var)) {
+ curl_empty_auth = git_config_bool(var, value);
+ return 0;
+ }
+
+ if (!strcmp("http.pinnedpubkey", var)) {
+#if LIBCURL_VERSION_NUM >= 0x072c00
+ return git_config_pathname(&ssl_pinnedkey, var, value);
+#else
+ warning(_("Public key pinning not supported with cURL < 7.44.0"));
+ return 0;
+#endif
+ }
+
/* Fall back on the default ones */
return git_default_config(var, value, cb);
}
static void init_curl_http_auth(CURL *result)
{
- if (!http_auth.username)
+ if (!http_auth.username) {
+ if (curl_empty_auth)
+ curl_easy_setopt(result, CURLOPT_USERPWD, ":");
return;
+ }
credential_fill(&http_auth);
@@ -499,6 +526,10 @@ static CURL *get_curl_handle(void)
if (ssl_capath != NULL)
curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
#endif
+#if LIBCURL_VERSION_NUM >= 0x072c00
+ if (ssl_pinnedkey != NULL)
+ curl_easy_setopt(result, CURLOPT_PINNEDPUBLICKEY, ssl_pinnedkey);
+#endif
if (ssl_cainfo != NULL)
curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
@@ -594,6 +625,11 @@ static CURL *get_curl_handle(void)
}
curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host);
+#if LIBCURL_VERSION_NUM >= 0x071304
+ var_override(&curl_no_proxy, getenv("NO_PROXY"));
+ var_override(&curl_no_proxy, getenv("no_proxy"));
+ curl_easy_setopt(result, CURLOPT_NOPROXY, curl_no_proxy);
+#endif
}
init_curl_proxy_auth(result);
@@ -824,10 +860,14 @@ struct active_request_slot *get_active_slot(void)
curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
curl_easy_setopt(slot->curl, CURLOPT_FAILONERROR, 1);
curl_easy_setopt(slot->curl, CURLOPT_RANGE, NULL);
+
+#if LIBCURL_VERSION_NUM >= 0x070a08
+ curl_easy_setopt(slot->curl, CURLOPT_IPRESOLVE, git_curl_ipresolve);
+#endif
#ifdef LIBCURL_CAN_HANDLE_AUTH_ANY
curl_easy_setopt(slot->curl, CURLOPT_HTTPAUTH, http_auth_methods);
#endif
- if (http_auth.password)
+ if (http_auth.password || curl_empty_auth)
init_curl_http_auth(slot->curl);
return slot;
diff --git a/http.h b/http.h
index f83cfa6..4ef4bbd 100644
--- a/http.h
+++ b/http.h
@@ -107,6 +107,7 @@ extern void http_init(struct remote *remote, const char *url,
int proactive_auth);
extern void http_cleanup(void);
+extern long int git_curl_ipresolve;
extern int active_requests;
extern int http_is_verbose;
extern size_t http_post_buffer;
diff --git a/imap-send.c b/imap-send.c
index 4d3b773..2c52027 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -892,12 +892,11 @@ static char *cram(const char *challenge_64, const char *user, const char *pass)
response = xstrfmt("%s %s", user, hex);
resp_len = strlen(response) + 1;
- response_64 = xmalloc(ENCODED_SIZE(resp_len) + 1);
+ response_64 = xmallocz(ENCODED_SIZE(resp_len));
encoded_len = EVP_EncodeBlock((unsigned char *)response_64,
(unsigned char *)response, resp_len);
if (encoded_len < 0)
die("EVP_EncodeBlock error");
- response_64[encoded_len] = '\0';
return (char *)response_64;
}
@@ -1188,7 +1187,7 @@ static void lf_to_crlf(struct strbuf *msg)
j++;
}
- new = xmalloc(j + 1);
+ new = xmallocz(j);
/*
* Second pass: write the new string. Note that this loop is
diff --git a/khash.h b/khash.h
index 376475a..c0da40d 100644
--- a/khash.h
+++ b/khash.h
@@ -117,7 +117,7 @@ static const double __ac_HASH_UPPER = 0.77;
if (new_n_buckets < 4) new_n_buckets = 4; \
if (h->size >= (khint_t)(new_n_buckets * __ac_HASH_UPPER + 0.5)) j = 0; /* requested size is too small */ \
else { /* hash table size to be changed (shrink or expand); rehash */ \
- new_flags = (khint32_t*)xmalloc(__ac_fsize(new_n_buckets) * sizeof(khint32_t)); \
+ ALLOC_ARRAY(new_flags, __ac_fsize(new_n_buckets)); \
if (!new_flags) return -1; \
memset(new_flags, 0xaa, __ac_fsize(new_n_buckets) * sizeof(khint32_t)); \
if (h->n_buckets < new_n_buckets) { /* expand */ \
diff --git a/levenshtein.c b/levenshtein.c
index fc28159..d263269 100644
--- a/levenshtein.c
+++ b/levenshtein.c
@@ -42,11 +42,13 @@ int levenshtein(const char *string1, const char *string2,
int w, int s, int a, int d)
{
int len1 = strlen(string1), len2 = strlen(string2);
- int *row0 = xmalloc(sizeof(int) * (len2 + 1));
- int *row1 = xmalloc(sizeof(int) * (len2 + 1));
- int *row2 = xmalloc(sizeof(int) * (len2 + 1));
+ int *row0, *row1, *row2;
int i, j;
+ ALLOC_ARRAY(row0, len2 + 1);
+ ALLOC_ARRAY(row1, len2 + 1);
+ ALLOC_ARRAY(row2, len2 + 1);
+
for (j = 0; j <= len2; j++)
row1[j] = j * a;
for (i = 0; i < len1; i++) {
diff --git a/line-log.c b/line-log.c
index af6e2f7..bbe31ed 100644
--- a/line-log.c
+++ b/line-log.c
@@ -14,6 +14,7 @@
#include "graph.h"
#include "userdiff.h"
#include "line-log.h"
+#include "argv-array.h"
static void range_set_grow(struct range_set *rs, size_t extra)
{
@@ -521,7 +522,7 @@ static void fill_line_ends(struct diff_filespec *spec, long *lines,
if (diff_populate_filespec(spec, 0))
die("Cannot read blob %s", sha1_to_hex(spec->sha1));
- ends = xmalloc(size * sizeof(*ends));
+ ALLOC_ARRAY(ends, size);
ends[cur++] = 0;
data = spec->data;
while (num < spec->size) {
@@ -746,22 +747,17 @@ void line_log_init(struct rev_info *rev, const char *prefix, struct string_list
add_line_range(rev, commit, range);
if (!rev->diffopt.detect_rename) {
- int i, count = 0;
- struct line_log_data *r = range;
+ struct line_log_data *r;
+ struct argv_array array = ARGV_ARRAY_INIT;
const char **paths;
- while (r) {
- count++;
- r = r->next;
- }
- paths = xmalloc((count+1)*sizeof(char *));
- r = range;
- for (i = 0; i < count; i++) {
- paths[i] = xstrdup(r->path);
- r = r->next;
- }
- paths[count] = NULL;
+
+ for (r = range; r; r = r->next)
+ argv_array_push(&array, r->path);
+ paths = argv_array_detach(&array);
+
parse_pathspec(&rev->diffopt.pathspec, 0,
PATHSPEC_PREFER_FULL, "", paths);
+ /* strings are now owned by pathspec */
free(paths);
}
}
@@ -1146,9 +1142,9 @@ static int process_ranges_merge_commit(struct rev_info *rev, struct commit *comm
if (nparents > 1 && rev->first_parent_only)
nparents = 1;
- diffqueues = xmalloc(nparents * sizeof(*diffqueues));
- cand = xmalloc(nparents * sizeof(*cand));
- parents = xmalloc(nparents * sizeof(*parents));
+ ALLOC_ARRAY(diffqueues, nparents);
+ ALLOC_ARRAY(cand, nparents);
+ ALLOC_ARRAY(parents, nparents);
p = commit->parents;
for (i = 0; i < nparents; i++) {
diff --git a/list-objects.c b/list-objects.c
index 11732d9..917cc5d 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -11,11 +11,12 @@
static void process_blob(struct rev_info *revs,
struct blob *blob,
show_object_fn show,
- struct name_path *path,
+ struct strbuf *path,
const char *name,
void *cb_data)
{
struct object *obj = &blob->object;
+ size_t pathlen;
if (!revs->blob_objects)
return;
@@ -24,7 +25,11 @@ static void process_blob(struct rev_info *revs,
if (obj->flags & (UNINTERESTING | SEEN))
return;
obj->flags |= SEEN;
- show(obj, path, name, cb_data);
+
+ pathlen = path->len;
+ strbuf_addstr(path, name);
+ show(obj, path->buf, cb_data);
+ strbuf_setlen(path, pathlen);
}
/*
@@ -52,7 +57,7 @@ static void process_blob(struct rev_info *revs,
static void process_gitlink(struct rev_info *revs,
const unsigned char *sha1,
show_object_fn show,
- struct name_path *path,
+ struct strbuf *path,
const char *name,
void *cb_data)
{
@@ -62,7 +67,6 @@ static void process_gitlink(struct rev_info *revs,
static void process_tree(struct rev_info *revs,
struct tree *tree,
show_object_fn show,
- struct name_path *path,
struct strbuf *base,
const char *name,
void *cb_data)
@@ -70,7 +74,6 @@ static void process_tree(struct rev_info *revs,
struct object *obj = &tree->object;
struct tree_desc desc;
struct name_entry entry;
- struct name_path me;
enum interesting match = revs->diffopt.pathspec.nr == 0 ?
all_entries_interesting: entry_not_interesting;
int baselen = base->len;
@@ -86,17 +89,12 @@ static void process_tree(struct rev_info *revs,
return;
die("bad tree object %s", oid_to_hex(&obj->oid));
}
+
obj->flags |= SEEN;
- show(obj, path, name, cb_data);
- me.up = path;
- me.elem = name;
- me.elem_len = strlen(name);
-
- if (!match) {
- strbuf_addstr(base, name);
- if (base->len)
- strbuf_addch(base, '/');
- }
+ strbuf_addstr(base, name);
+ show(obj, base->buf, cb_data);
+ if (base->len)
+ strbuf_addch(base, '/');
init_tree_desc(&desc, tree->buffer, tree->size);
@@ -113,16 +111,16 @@ static void process_tree(struct rev_info *revs,
if (S_ISDIR(entry.mode))
process_tree(revs,
lookup_tree(entry.sha1),
- show, &me, base, entry.path,
+ show, base, entry.path,
cb_data);
else if (S_ISGITLINK(entry.mode))
process_gitlink(revs, entry.sha1,
- show, &me, entry.path,
+ show, base, entry.path,
cb_data);
else
process_blob(revs,
lookup_blob(entry.sha1),
- show, &me, entry.path,
+ show, base, entry.path,
cb_data);
}
strbuf_setlen(base, baselen);
@@ -213,19 +211,19 @@ void traverse_commit_list(struct rev_info *revs,
continue;
if (obj->type == OBJ_TAG) {
obj->flags |= SEEN;
- show_object(obj, NULL, name, data);
+ show_object(obj, name, data);
continue;
}
if (!path)
path = "";
if (obj->type == OBJ_TREE) {
process_tree(revs, (struct tree *)obj, show_object,
- NULL, &base, path, data);
+ &base, path, data);
continue;
}
if (obj->type == OBJ_BLOB) {
process_blob(revs, (struct blob *)obj, show_object,
- NULL, path, data);
+ &base, path, data);
continue;
}
die("unknown pending object %s (%s)",
diff --git a/list-objects.h b/list-objects.h
index 136a1da..0cebf85 100644
--- a/list-objects.h
+++ b/list-objects.h
@@ -2,7 +2,7 @@
#define LIST_OBJECTS_H
typedef void (*show_commit_fn)(struct commit *, void *);
-typedef void (*show_object_fn)(struct object *, const struct name_path *, const char *, void *);
+typedef void (*show_object_fn)(struct object *, const char *, void *);
void traverse_commit_list(struct rev_info *, show_commit_fn, show_object_fn, void *);
typedef void (*show_edge_fn)(struct commit *);
diff --git a/ll-merge.c b/ll-merge.c
index 0338630..ff4a43a 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -205,7 +205,7 @@ static int ll_ext_merge(const struct ll_merge_driver *fn,
if (fstat(fd, &st))
goto close_bad;
result->size = st.st_size;
- result->ptr = xmalloc(result->size + 1);
+ result->ptr = xmallocz(result->size);
if (read_in_full(fd, result->ptr, result->size) != result->size) {
free(result->ptr);
result->ptr = NULL;
diff --git a/log-tree.c b/log-tree.c
index f70a30e..60f9839 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -77,9 +77,8 @@ int parse_decorate_color_config(const char *var, const char *slot_name, const ch
void add_name_decoration(enum decoration_type type, const char *name, struct object *obj)
{
- int nlen = strlen(name);
- struct name_decoration *res = xmalloc(sizeof(*res) + nlen + 1);
- memcpy(res->name, name, nlen + 1);
+ struct name_decoration *res;
+ FLEX_ALLOC_STR(res, name, name);
res->type = type;
res->next = add_decoration(&name_decoration, obj, res);
}
diff --git a/merge-blobs.c b/merge-blobs.c
index ddca601..9b6eac2 100644
--- a/merge-blobs.c
+++ b/merge-blobs.c
@@ -48,40 +48,6 @@ static void *three_way_filemerge(const char *path, mmfile_t *base, mmfile_t *our
return res.ptr;
}
-static int common_outf(void *priv_, mmbuffer_t *mb, int nbuf)
-{
- int i;
- mmfile_t *dst = priv_;
-
- for (i = 0; i < nbuf; i++) {
- memcpy(dst->ptr + dst->size, mb[i].ptr, mb[i].size);
- dst->size += mb[i].size;
- }
- return 0;
-}
-
-static int generate_common_file(mmfile_t *res, mmfile_t *f1, mmfile_t *f2)
-{
- unsigned long size = f1->size < f2->size ? f1->size : f2->size;
- void *ptr = xmalloc(size);
- xpparam_t xpp;
- xdemitconf_t xecfg;
- xdemitcb_t ecb;
-
- memset(&xpp, 0, sizeof(xpp));
- xpp.flags = 0;
- memset(&xecfg, 0, sizeof(xecfg));
- xecfg.ctxlen = 3;
- xecfg.flags = XDL_EMIT_COMMON;
- ecb.outf = common_outf;
-
- res->ptr = ptr;
- res->size = 0;
-
- ecb.priv = res;
- return xdi_diff(f1, f2, &xpp, &xecfg, &ecb);
-}
-
void *merge_blobs(const char *path, struct blob *base, struct blob *our, struct blob *their, unsigned long *size)
{
void *res = NULL;
@@ -112,8 +78,8 @@ void *merge_blobs(const char *path, struct blob *base, struct blob *our, struct
if (fill_mmfile_blob(&common, base) < 0)
goto out_free_f2_f1;
} else {
- if (generate_common_file(&common, &f1, &f2) < 0)
- goto out_free_f2_f1;
+ common.ptr = xstrdup("");
+ common.size = 0;
}
res = three_way_filemerge(path, &common, &f1, &f2, size);
free_mmfile(&common);
diff --git a/merge-recursive.c b/merge-recursive.c
index 8eabde2..b880ae5 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -482,6 +482,9 @@ static struct string_list *get_renames(struct merge_options *o,
struct diff_options opts;
renames = xcalloc(1, sizeof(struct string_list));
+ if (!o->detect_rename)
+ return renames;
+
diff_setup(&opts);
DIFF_OPT_SET(&opts, RECURSIVE);
DIFF_OPT_CLR(&opts, RENAME_EMPTY);
@@ -2039,6 +2042,7 @@ void init_merge_options(struct merge_options *o)
o->diff_rename_limit = -1;
o->merge_rename_limit = -1;
o->renormalize = 0;
+ o->detect_rename = 1;
merge_recursive_config(o);
if (getenv("GIT_MERGE_VERBOSITY"))
o->verbosity =
@@ -2088,9 +2092,17 @@ int parse_merge_opt(struct merge_options *o, const char *s)
o->renormalize = 1;
else if (!strcmp(s, "no-renormalize"))
o->renormalize = 0;
- else if (skip_prefix(s, "rename-threshold=", &arg)) {
+ else if (!strcmp(s, "no-renames"))
+ o->detect_rename = 0;
+ else if (!strcmp(s, "find-renames")) {
+ o->detect_rename = 1;
+ o->rename_score = 0;
+ }
+ else if (skip_prefix(s, "find-renames=", &arg) ||
+ skip_prefix(s, "rename-threshold=", &arg)) {
if ((o->rename_score = parse_rename_score(&arg)) == -1 || *arg != 0)
return -1;
+ o->detect_rename = 1;
}
else
return -1;
diff --git a/merge-recursive.h b/merge-recursive.h
index 9e090a3..52f0201 100644
--- a/merge-recursive.h
+++ b/merge-recursive.h
@@ -17,6 +17,7 @@ struct merge_options {
unsigned renormalize : 1;
long xdl_opts;
int verbosity;
+ int detect_rename;
int diff_rename_limit;
int merge_rename_limit;
int rename_score;
diff --git a/name-hash.c b/name-hash.c
index 332ba95..6d9f23e 100644
--- a/name-hash.c
+++ b/name-hash.c
@@ -55,10 +55,9 @@ static struct dir_entry *hash_dir_entry(struct index_state *istate,
dir = find_dir_entry(istate, ce->name, namelen);
if (!dir) {
/* not found, create it and add to hash table */
- dir = xcalloc(1, sizeof(struct dir_entry) + namelen + 1);
+ FLEX_ALLOC_MEM(dir, name, ce->name, namelen);
hashmap_entry_init(dir, memihash(ce->name, namelen));
dir->namelen = namelen;
- strncpy(dir->name, ce->name, namelen);
hashmap_add(&istate->dir_hash, dir);
/* recursively add missing parent directories */
diff --git a/notes.c b/notes.c
index c1e5035..88cf474 100644
--- a/notes.c
+++ b/notes.c
@@ -1035,7 +1035,7 @@ struct notes_tree **load_notes_trees(struct string_list *refs, int flags)
struct string_list_item *item;
int counter = 0;
struct notes_tree **trees;
- trees = xmalloc((refs->nr+1) * sizeof(struct notes_tree *));
+ ALLOC_ARRAY(trees, refs->nr + 1);
for_each_string_list_item(item, refs) {
struct notes_tree *t = xcalloc(1, sizeof(struct notes_tree));
init_notes(t, item->string, combine_notes_ignore, flags);
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index 6bff970..c30bcd0 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -148,8 +148,7 @@ static uint32_t find_object_pos(const unsigned char *sha1)
return entry->in_pack_pos;
}
-static void show_object(struct object *object, const struct name_path *path,
- const char *last, void *data)
+static void show_object(struct object *object, const char *name, void *data)
{
struct bitmap *base = data;
bitmap_set(base, find_object_pos(object->oid.hash));
diff --git a/pack-bitmap.c b/pack-bitmap.c
index dd8dc16..b949e51 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -414,19 +414,15 @@ static int ext_index_add_object(struct object *object, const char *name)
return bitmap_pos + bitmap_git.pack->num_objects;
}
-static void show_object(struct object *object, const struct name_path *path,
- const char *last, void *data)
+static void show_object(struct object *object, const char *name, void *data)
{
struct bitmap *base = data;
int bitmap_pos;
bitmap_pos = bitmap_position(object->oid.hash);
- if (bitmap_pos < 0) {
- char *name = path_name(path, last);
+ if (bitmap_pos < 0)
bitmap_pos = ext_index_add_object(object, name);
- free(name);
- }
bitmap_set(base, bitmap_pos);
}
@@ -894,9 +890,8 @@ struct bitmap_test_data {
size_t seen;
};
-static void test_show_object(struct object *object,
- const struct name_path *path,
- const char *last, void *data)
+static void test_show_object(struct object *object, const char *name,
+ void *data)
{
struct bitmap_test_data *tdata = data;
int bitmap_pos;
diff --git a/pack-check.c b/pack-check.c
index 433bd86..1da89a4 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -89,7 +89,7 @@ static int verify_packfile(struct packed_git *p,
* we do not do scan-streaming check on the pack file.
*/
nr_objects = p->num_objects;
- entries = xmalloc((nr_objects + 1) * sizeof(*entries));
+ ALLOC_ARRAY(entries, nr_objects + 1);
entries[nr_objects].offset = pack_sig_ofs;
/* first sort entries by pack offset, since unpacking them is more efficient that way */
for (i = 0; i < nr_objects; i++) {
diff --git a/pack-revindex.c b/pack-revindex.c
index 155a8a3..96d51c3 100644
--- a/pack-revindex.c
+++ b/pack-revindex.c
@@ -44,10 +44,14 @@ static void sort_revindex(struct revindex_entry *entries, unsigned n, off_t max)
* keep track of them with alias pointers, always sorting from "from"
* to "to".
*/
- struct revindex_entry *tmp = xmalloc(n * sizeof(*tmp));
- struct revindex_entry *from = entries, *to = tmp;
+ struct revindex_entry *tmp, *from, *to;
int bits;
- unsigned *pos = xmalloc(BUCKETS * sizeof(*pos));
+ unsigned *pos;
+
+ ALLOC_ARRAY(pos, BUCKETS);
+ ALLOC_ARRAY(tmp, n);
+ from = entries;
+ to = tmp;
/*
* If (max >> bits) is zero, then we know that the radix digit we are
@@ -121,7 +125,7 @@ static void create_pack_revindex(struct packed_git *p)
unsigned i;
const char *index = p->index_data;
- p->revindex = xmalloc(sizeof(*p->revindex) * (num_ent + 1));
+ ALLOC_ARRAY(p->revindex, num_ent + 1);
index += 4 * 256;
if (p->index_version > 1) {
diff --git a/pager.c b/pager.c
index e425070..4bc0481 100644
--- a/pager.c
+++ b/pager.c
@@ -11,7 +11,6 @@
* something different on Windows.
*/
-static const char *pager_argv[] = { NULL, NULL };
static struct child_process pager_process = CHILD_PROCESS_INIT;
static void wait_for_pager(int in_signal)
@@ -64,6 +63,16 @@ const char *git_pager(int stdout_is_tty)
return pager;
}
+void prepare_pager_args(struct child_process *pager_process, const char *pager)
+{
+ argv_array_push(&pager_process->args, pager);
+ pager_process->use_shell = 1;
+ if (!getenv("LESS"))
+ argv_array_push(&pager_process->env_array, "LESS=FRX");
+ if (!getenv("LV"))
+ argv_array_push(&pager_process->env_array, "LV=-c");
+}
+
void setup_pager(void)
{
const char *pager = git_pager(isatty(1));
@@ -80,14 +89,8 @@ void setup_pager(void)
setenv("GIT_PAGER_IN_USE", "true", 1);
/* spawn the pager */
- pager_argv[0] = pager;
- pager_process.use_shell = 1;
- pager_process.argv = pager_argv;
+ prepare_pager_args(&pager_process, pager);
pager_process.in = -1;
- if (!getenv("LESS"))
- argv_array_push(&pager_process.env_array, "LESS=FRX");
- if (!getenv("LV"))
- argv_array_push(&pager_process.env_array, "LV=-c");
argv_array_push(&pager_process.env_array, "GIT_PAGER_IN_USE");
if (start_command(&pager_process))
return;
diff --git a/path.c b/path.c
index 8b7e168..969b494 100644
--- a/path.c
+++ b/path.c
@@ -584,6 +584,9 @@ char *expand_user_path(const char *path)
if (!home)
goto return_null;
strbuf_addstr(&user_path, home);
+#ifdef GIT_WINDOWS_NATIVE
+ convert_slashes(user_path.buf);
+#endif
} else {
struct passwd *pw = getpw_str(username, username_len);
if (!pw)
diff --git a/pathspec.c b/pathspec.c
index 9304ee3..c9e9b6c 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -406,7 +406,8 @@ void parse_pathspec(struct pathspec *pathspec,
n++;
pathspec->nr = n;
- pathspec->items = item = xmalloc(sizeof(*item) * n);
+ ALLOC_ARRAY(pathspec->items, n);
+ item = pathspec->items;
pathspec->_raw = argv;
prefixlen = prefix ? strlen(prefix) : 0;
@@ -483,7 +484,7 @@ const char **get_pathspec(const char *prefix, const char **pathspec)
void copy_pathspec(struct pathspec *dst, const struct pathspec *src)
{
*dst = *src;
- dst->items = xmalloc(sizeof(struct pathspec_item) * dst->nr);
+ ALLOC_ARRAY(dst->items, dst->nr);
memcpy(dst->items, src->items,
sizeof(struct pathspec_item) * dst->nr);
}
diff --git a/perl/Git/SVN/GlobSpec.pm b/perl/Git/SVN/GlobSpec.pm
index c95f5d7..a0a8d17 100644
--- a/perl/Git/SVN/GlobSpec.pm
+++ b/perl/Git/SVN/GlobSpec.pm
@@ -8,19 +8,23 @@ sub new {
$re =~ s!/+$!!g; # no need for trailing slashes
my (@left, @right, @patterns);
my $state = "left";
- my $die_msg = "Only one set of wildcard directories " .
- "(e.g. '*' or '*/*/*') is supported: '$glob'\n";
+ my $die_msg = "Only one set of wildcards " .
+ "(e.g. '*' or '*/*/*') is supported: $glob\n";
for my $part (split(m|/|, $glob)) {
- if ($part =~ /\*/ && $part ne "*") {
- die "Invalid pattern in '$glob': $part\n";
- } elsif ($pattern_ok && $part =~ /[{}]/ &&
+ if ($pattern_ok && $part =~ /[{}]/ &&
$part !~ /^\{[^{}]+\}/) {
die "Invalid pattern in '$glob': $part\n";
}
- if ($part eq "*") {
+ my $nstars = $part =~ tr/*//;
+ if ($nstars > 1) {
+ die "Only one '*' is allowed in a pattern: '$part'\n";
+ }
+ if ($part =~ /(.*)\*(.*)/) {
die $die_msg if $state eq "right";
+ my ($l, $r) = ($1, $2);
$state = "pattern";
- push(@patterns, "[^/]*");
+ my $pat = quotemeta($l) . '[^/]*' . quotemeta($r);
+ push(@patterns, $pat);
} elsif ($pattern_ok && $part =~ /^\{(.*)\}$/) {
die $die_msg if $state eq "right";
$state = "pattern";
diff --git a/po/TEAMS b/po/TEAMS
index df12b58..56274ad 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -11,7 +11,7 @@ Leader: Alex Henrie <alexhenrie24@gmail.com>
Language: de (German)
Repository: https://github.com/ralfth/git-po-de
-Leader: Ralf Thielow <ralf.thielow@googlemail.com>
+Leader: Ralf Thielow <ralf.thielow@gmail.com>
Members: Thomas Rast <tr@thomasrast.ch>
Jan Krüger <jk@jk.gs>
Christian Stimming <stimming@tuhh.de>
diff --git a/po/ca.po b/po/ca.po
index d364141..46000d7 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2015-12-22 22:50+0800\n"
-"PO-Revision-Date: 2015-12-27 21:42-0700\n"
+"POT-Creation-Date: 2016-03-16 00:16+0800\n"
+"PO-Revision-Date: 2016-03-19 23:51-0600\n"
"Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n"
"Language-Team: Catalan\n"
"Language: ca\n"
@@ -16,7 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 1.8.6\n"
+"X-Generator: Poedit 1.8.7\n"
#: advice.c:55
#, c-format
@@ -32,7 +32,7 @@ msgstr ""
"'git add/rm <fitxer>' segons sigui apropiat per a marcar la\n"
"resolució i feu una comissió."
-#: advice.c:101 builtin/merge.c:1225
+#: advice.c:101 builtin/merge.c:1226
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "No heu conclòs la vostra fusió (MERGE_HEAD existeix)."
@@ -76,7 +76,7 @@ msgstr "format"
msgid "archive format"
msgstr "format d'arxiu"
-#: archive.c:430 builtin/log.c:1229
+#: archive.c:430 builtin/log.c:1232
msgid "prefix"
msgstr "prefix"
@@ -84,10 +84,10 @@ msgstr "prefix"
msgid "prepend prefix to each pathname in the archive"
msgstr "anteposa el prefix a cada nom de camí en l'arxiu"
-#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2535 builtin/blame.c:2536
-#: builtin/config.c:58 builtin/fast-export.c:987 builtin/fast-export.c:989
-#: builtin/grep.c:707 builtin/hash-object.c:99 builtin/ls-files.c:446
-#: builtin/ls-files.c:449 builtin/notes.c:395 builtin/notes.c:558
+#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2547 builtin/blame.c:2548
+#: builtin/config.c:60 builtin/fast-export.c:987 builtin/fast-export.c:989
+#: builtin/grep.c:720 builtin/hash-object.c:100 builtin/ls-files.c:459
+#: builtin/ls-files.c:462 builtin/notes.c:398 builtin/notes.c:561
#: builtin/read-tree.c:109 parse-options.h:153
msgid "file"
msgstr "fitxer"
@@ -120,7 +120,7 @@ msgstr "comprimeix millor"
msgid "list supported archive formats"
msgstr "allista els formats d'arxiu admesos"
-#: archive.c:451 builtin/archive.c:90 builtin/clone.c:77
+#: archive.c:451 builtin/archive.c:90 builtin/clone.c:78
msgid "repo"
msgstr "dipòsit"
@@ -128,7 +128,7 @@ msgstr "dipòsit"
msgid "retrieve the archive from remote repository <repo>"
msgstr "recupera l'arxiu del dipòsit remot <dipòsit>"
-#: archive.c:453 builtin/archive.c:92 builtin/notes.c:479
+#: archive.c:453 builtin/archive.c:92 builtin/notes.c:482
msgid "command"
msgstr "ordre"
@@ -136,7 +136,7 @@ msgstr "ordre"
msgid "path to the remote git-upload-archive command"
msgstr "camí a l'ordre git-upload-archive remota"
-#: attr.c:265
+#: attr.c:263
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -144,90 +144,107 @@ msgstr ""
"Els patrons negatius s'ignoren en els atributs de git\n"
"Useu '\\!' per exclamació capdavantera literal."
-#: branch.c:61
+#: branch.c:53
+#, c-format
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\"."
+msgstr ""
+"\n"
+"Després de corregir la causa de l'error, podeu\n"
+"intentar corregir la informació de seguiment remot\n"
+"invocant \"git branch --set-upstream-to=%s%s%s\"."
+
+#: branch.c:67
#, c-format
msgid "Not setting branch %s as its own upstream."
msgstr "No establint la branca %s com a la seva pròpia font."
-#: branch.c:84
+#: branch.c:93
#, c-format
msgid "Branch %s set up to track remote branch %s from %s by rebasing."
msgstr ""
"La branca %s està configurada per a seguir la branca remota %s de %s per "
"rebasar."
-#: branch.c:85
+#: branch.c:94
#, c-format
msgid "Branch %s set up to track remote branch %s from %s."
msgstr "La branca %s està configurada per a seguir la branca remota %s de %s."
-#: branch.c:89
+#: branch.c:98
#, c-format
msgid "Branch %s set up to track local branch %s by rebasing."
msgstr ""
"La branca %s està configurada per a seguir la branca local %s per rebasar."
-#: branch.c:90
+#: branch.c:99
#, c-format
msgid "Branch %s set up to track local branch %s."
msgstr "La branca %s està configurada per a seguir la branca local %s."
-#: branch.c:95
+#: branch.c:104
#, c-format
msgid "Branch %s set up to track remote ref %s by rebasing."
msgstr ""
"La branca %s està configurada per a seguir la referència remota %s per "
"rebasar."
-#: branch.c:96
+#: branch.c:105
#, c-format
msgid "Branch %s set up to track remote ref %s."
msgstr "La branca %s està configurada per a seguir la referència remota %s."
-#: branch.c:100
+#: branch.c:109
#, c-format
msgid "Branch %s set up to track local ref %s by rebasing."
msgstr ""
"La branca %s està configurada per a seguir la referència local %s per "
"rebasar."
-#: branch.c:101
+#: branch.c:110
#, c-format
msgid "Branch %s set up to track local ref %s."
msgstr "La branca %s està configurada per a seguir la referència local %s."
-#: branch.c:134
+#: branch.c:119
+msgid "Unable to write upstream branch configuration"
+msgstr "No es pot escriure la configuració de la branca font"
+
+#: branch.c:156
#, c-format
msgid "Not tracking: ambiguous information for ref %s"
msgstr "No seguint: informació ambigua per a la referència %s"
-#: branch.c:163
+#: branch.c:185
#, c-format
msgid "'%s' is not a valid branch name."
msgstr "'%s' no és un nom de branca vàlid."
-#: branch.c:168
+#: branch.c:190
#, c-format
msgid "A branch named '%s' already exists."
msgstr "Una branca amb nom '%s' ja existeix."
-#: branch.c:176
+#: branch.c:198
msgid "Cannot force update the current branch."
msgstr "No es pot actualitzar la branca actual a la força."
-#: branch.c:196
+#: branch.c:218
#, c-format
msgid "Cannot setup tracking information; starting point '%s' is not a branch."
msgstr ""
"No es pot configurar la informació de seguiment; el punt inicial '%s' no és "
"una branca."
-#: branch.c:198
+#: branch.c:220
#, c-format
msgid "the requested upstream branch '%s' does not exist"
msgstr "la branca font demanada '%s' no existeix"
-#: branch.c:200
+#: branch.c:222
msgid ""
"\n"
"If you are planning on basing your work on an upstream\n"
@@ -248,22 +265,22 @@ msgstr ""
"\"git push -u\" per a establir la configuració font\n"
"mentre pugeu."
-#: branch.c:244
+#: branch.c:266
#, c-format
msgid "Not a valid object name: '%s'."
msgstr "No és un nom d'objecte vàlid: '%s'."
-#: branch.c:264
+#: branch.c:286
#, c-format
msgid "Ambiguous object name: '%s'."
msgstr "Nom d'objecte ambigu: '%s'."
-#: branch.c:269
+#: branch.c:291
#, c-format
msgid "Not a valid branch point: '%s'."
msgstr "No és un punt de ramificació vàlid: '%s'."
-#: branch.c:322
+#: branch.c:344
#, c-format
msgid "'%s' is already checked out at '%s'"
msgstr "'%s' ja s'ha agafat a '%s'"
@@ -287,10 +304,10 @@ msgstr "no s'ha pogut obrir '%s'"
msgid "Repository lacks these prerequisite commits:"
msgstr "Al dipòsit li manquen aquestes comissions prerequisits:"
-#: bundle.c:163 ref-filter.c:1372 sequencer.c:636 sequencer.c:1083
-#: builtin/blame.c:2734 builtin/commit.c:1045 builtin/log.c:334
-#: builtin/log.c:849 builtin/log.c:1461 builtin/log.c:1694 builtin/merge.c:358
-#: builtin/shortlog.c:158
+#: bundle.c:163 ref-filter.c:1462 sequencer.c:627 sequencer.c:1074
+#: builtin/blame.c:2754 builtin/commit.c:1045 builtin/log.c:334
+#: builtin/log.c:852 builtin/log.c:1467 builtin/log.c:1700 builtin/merge.c:358
+#: builtin/shortlog.c:170
msgid "revision walk setup failed"
msgstr "la configuració del passeig per revisions ha fallat"
@@ -329,7 +346,7 @@ msgstr "El rev-list s'ha mort"
msgid "ref '%s' is excluded by the rev-list options"
msgstr "les opcions de la llista de revisions exclouen la referència '%s'"
-#: bundle.c:443 builtin/log.c:157 builtin/log.c:1369 builtin/shortlog.c:261
+#: bundle.c:443 builtin/log.c:157 builtin/log.c:1372 builtin/shortlog.c:273
#, c-format
msgid "unrecognized argument: %s"
msgstr "paràmetre no reconegut: %s"
@@ -352,8 +369,8 @@ msgstr "L'index-pack s'ha mort"
msgid "invalid color value: %.*s"
msgstr "valor de color no vàlid: %.*s"
-#: commit.c:40 builtin/am.c:452 builtin/am.c:488 builtin/am.c:1520
-#: builtin/am.c:2149
+#: commit.c:40 builtin/am.c:437 builtin/am.c:473 builtin/am.c:1505
+#: builtin/am.c:2135
#, c-format
msgid "could not parse %s"
msgstr "no s'ha pogut analitzar %s"
@@ -367,59 +384,64 @@ msgstr "%s %s no és una comissió!"
msgid "memory exhausted"
msgstr "memòria esgotada"
-#: config.c:474 config.c:476
+#: config.c:475 config.c:477
#, c-format
-msgid "bad config file line %d in %s"
-msgstr "línia de fitxer de configuració dolenta %d en %s"
+msgid "bad config line %d in %s %s"
+msgstr "línia de fitxer de configuració dolenta %d en %s %s"
-#: config.c:592
+#: config.c:593
#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "valor de configuració numèrica dolent '%s' per '%s' en %s: %s"
+msgid "bad numeric config value '%s' for '%s' in %s %s: %s"
+msgstr "valor de configuració numèrica dolent '%s' per '%s' en %s %s: %s"
-#: config.c:594
+#: config.c:595
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "valor de configuració numèrica dolent '%s' per '%s': %s"
-#: config.c:679
+#: config.c:680
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "s'ha fallat en expandir el directori d'usuari en '%s'"
-#: config.c:757 config.c:768
+#: config.c:758 config.c:769
#, c-format
msgid "bad zlib compression level %d"
msgstr "nivell de compressió de zlib dolent %d"
-#: config.c:890
+#: config.c:891
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "mode de creació d'objecte no vàlid: %s"
-#: config.c:1216
+#: config.c:1220
msgid "unable to parse command-line config"
msgstr "no s'ha pogut analitzar la configuració de la línia d'ordres"
-#: config.c:1277
+#: config.c:1281
msgid "unknown error occured while reading the configuration files"
msgstr "ha ocorregut un error desconegut en llegir els fitxers de configuració"
-#: config.c:1601
+#: config.c:1629
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "no s'ha pogut analitzar '%s' de la configuració de la línia d'ordres"
-#: config.c:1603
+#: config.c:1631
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "variable de configuració dolenta '%s' en el fitxer '%s' a la línia %d"
-#: config.c:1662
+#: config.c:1690
#, c-format
msgid "%s has multiple values"
msgstr "%s té múltiples valors"
+#: config.c:2226
+#, c-format
+msgid "Could not set '%s' to '%s'"
+msgstr "No s'ha pogut establir '%s' com a '%s'"
+
#: connected.c:69
msgid "Could not run 'git rev-list'"
msgstr "No s'ha pogut executar 'git rev-list'"
@@ -536,16 +558,16 @@ msgstr ""
"Errors trobats en la variable de configuració 'diff.dirstat':\n"
"%s"
-#: diff.c:3000
+#: diff.c:2997
#, c-format
msgid "external diff died, stopping at %s"
msgstr "El diff external s'ha mort, aturant a %s"
-#: diff.c:3396
+#: diff.c:3393
msgid "--follow requires exactly one pathspec"
msgstr "--follow requereix exactament una especificació de camí"
-#: diff.c:3559
+#: diff.c:3556
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -554,18 +576,19 @@ msgstr ""
"S'ha fallat en analitzar el paràmetre d'opció de --dirstat/-X:\n"
"%s"
-#: diff.c:3573
+#: diff.c:3570
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "S'ha fallat en analitzar el paràmetre d'opció de --submodule: %s"
-#: dir.c:1915
+#: dir.c:2004
msgid "failed to get kernel name and information"
msgstr "s'ha fallat en obtenir el nombre i la informació del nucli"
-#: dir.c:1998
-msgid "Untracked cache is disabled on this system."
-msgstr "La memòria cau no seguida està deshabilitada en aquest sistema."
+#: dir.c:2123
+msgid "Untracked cache is disabled on this system or location."
+msgstr ""
+"La memòria cau no seguida està inhabilitada en aquest sistema o ubicació."
#: gpg-interface.c:166 gpg-interface.c:237
msgid "could not run gpg."
@@ -604,20 +627,20 @@ msgstr "'%s': %s"
msgid "'%s': short read %s"
msgstr "'%s': lectura curta %s"
-#: help.c:207
+#: help.c:205
#, c-format
msgid "available git commands in '%s'"
msgstr "ordres de git disponibles en '%s'"
-#: help.c:214
+#: help.c:212
msgid "git commands available from elsewhere on your $PATH"
msgstr "ordres de git disponibles d'altres llocs en el vostre $PATH"
-#: help.c:246
+#: help.c:244
msgid "These are common Git commands used in various situations:"
msgstr "Aquestes són ordres del Git comunament usades en diverses situacions:"
-#: help.c:311
+#: help.c:309
#, c-format
msgid ""
"'%s' appears to be a git command, but we were not\n"
@@ -626,11 +649,11 @@ msgstr ""
"'%s' sembla una ordre de git, però no hem pogut\n"
"executar-la. Pot ser que git-%s estigui estropejat?"
-#: help.c:368
+#: help.c:366
msgid "Uh oh. Your system reports no Git commands at all."
msgstr "Ai. El vostre sistema no informa de cap ordre de Git."
-#: help.c:390
+#: help.c:388
#, c-format
msgid ""
"WARNING: You called a Git command named '%s', which does not exist.\n"
@@ -639,17 +662,17 @@ msgstr ""
"AVÍS: Heu invocat una ordre de Git amb nom '%s', la qual no existeix.\n"
"Continuant sota l'assumpció que volíeu dir '%s'"
-#: help.c:395
+#: help.c:393
#, c-format
msgid "in %0.1f seconds automatically..."
msgstr "en %0.1f segons automàticament..."
-#: help.c:402
+#: help.c:400
#, c-format
msgid "git: '%s' is not a git command. See 'git --help'."
msgstr "git: '%s' no és una ordre de git. Vegeu 'git --help'."
-#: help.c:406 help.c:466
+#: help.c:404 help.c:464
msgid ""
"\n"
"Did you mean this?"
@@ -663,7 +686,7 @@ msgstr[1] ""
"\n"
"Volíeu dir un d'aquests?"
-#: help.c:462
+#: help.c:460
#, c-format
msgid "%s: %s - %s"
msgstr "%s: %s - %s"
@@ -672,8 +695,8 @@ msgstr "%s: %s - %s"
msgid "failed to read the cache"
msgstr "s'ha fallat en llegir la memòria cau"
-#: merge.c:94 builtin/am.c:2022 builtin/am.c:2057 builtin/checkout.c:376
-#: builtin/checkout.c:587 builtin/clone.c:722
+#: merge.c:94 builtin/am.c:2008 builtin/am.c:2043 builtin/checkout.c:376
+#: builtin/checkout.c:587 builtin/clone.c:730
msgid "unable to write new index file"
msgstr "no s'ha pogut escriure un fitxer d'índex nou"
@@ -691,64 +714,64 @@ msgstr "addinfo_cache ha fallat per al camí '%s'"
msgid "error building trees"
msgstr "error en construir arbres"
-#: merge-recursive.c:686
+#: merge-recursive.c:689
#, c-format
msgid "failed to create path '%s'%s"
msgstr "s'ha fallat en crear el camí '%s' %s"
-#: merge-recursive.c:697
+#: merge-recursive.c:700
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "Eliminant %s per a fer espai per al subdirectori\n"
-#: merge-recursive.c:711 merge-recursive.c:732
+#: merge-recursive.c:714 merge-recursive.c:735
msgid ": perhaps a D/F conflict?"
msgstr ": potser un conflicte D/F?"
-#: merge-recursive.c:722
+#: merge-recursive.c:725
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr "refusant perdre el fitxer no seguit a '%s'"
-#: merge-recursive.c:762
+#: merge-recursive.c:765
#, c-format
msgid "cannot read object %s '%s'"
msgstr "no es pot llegir l'objecte %s '%s'"
-#: merge-recursive.c:764
+#: merge-recursive.c:767
#, c-format
msgid "blob expected for %s '%s'"
msgstr "blob esperat per a %s '%s'"
-#: merge-recursive.c:787 builtin/clone.c:369
+#: merge-recursive.c:790 builtin/clone.c:374
#, c-format
msgid "failed to open '%s'"
msgstr "s'ha fallat en obrir '%s'"
-#: merge-recursive.c:795
+#: merge-recursive.c:798
#, c-format
msgid "failed to symlink '%s'"
msgstr "s'ha fallat en fer l'enllaç simbòlic '%s'"
-#: merge-recursive.c:798
+#: merge-recursive.c:801
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr "no se sap què fer amb %06o %s '%s'"
-#: merge-recursive.c:936
+#: merge-recursive.c:939
msgid "Failed to execute internal merge"
msgstr "S'ha fallat en executar la fusió interna"
-#: merge-recursive.c:940
+#: merge-recursive.c:943
#, c-format
msgid "Unable to add %s to database"
msgstr "no s'ha pogut afegir %s a la base de dades"
-#: merge-recursive.c:956
+#: merge-recursive.c:959
msgid "unsupported object type in the tree"
msgstr "tipus d'objecte no compatible en l'arbre"
-#: merge-recursive.c:1031 merge-recursive.c:1045
+#: merge-recursive.c:1034 merge-recursive.c:1048
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -757,7 +780,7 @@ msgstr ""
"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
"s'ha deixat en l'arbre."
-#: merge-recursive.c:1037 merge-recursive.c:1050
+#: merge-recursive.c:1040 merge-recursive.c:1053
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -766,20 +789,20 @@ msgstr ""
"CONFLICTE: (%s/supressió): %s suprimit en %s i %s en %s. La versió %s de %s "
"s'ha deixat en l'arbre a %s."
-#: merge-recursive.c:1091
+#: merge-recursive.c:1094
msgid "rename"
msgstr "canvia de nom"
-#: merge-recursive.c:1091
+#: merge-recursive.c:1094
msgid "renamed"
msgstr "canviat de nom"
-#: merge-recursive.c:1147
+#: merge-recursive.c:1150
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "%s és un directori en %s; afegint com a %s en lloc"
-#: merge-recursive.c:1169
+#: merge-recursive.c:1172
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -788,147 +811,147 @@ msgstr ""
"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom \"%s\"->\"%s\" en la "
"branca \"%s\" canvi de nom \"%s\"->\"%s\" en \"%s\"%s"
-#: merge-recursive.c:1174
+#: merge-recursive.c:1177
msgid " (left unresolved)"
msgstr " (deixat sense resolució)"
-#: merge-recursive.c:1228
+#: merge-recursive.c:1231
#, c-format
msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
msgstr ""
"CONFLICTE (canvi de nom/canvi de nom): Canvi de nom %s->%s en %s. Canvi de "
"nom %s->%s en %s"
-#: merge-recursive.c:1258
+#: merge-recursive.c:1261
#, c-format
msgid "Renaming %s to %s and %s to %s instead"
msgstr "Canviant el nom de %s a %s i %s a %s en lloc d'això"
-#: merge-recursive.c:1457
+#: merge-recursive.c:1460
#, c-format
msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
msgstr ""
"CONFLICTE (canvi de nom/afegiment): Canvi de nom %s->%s en %s. %s afegit en "
"%s"
-#: merge-recursive.c:1467
+#: merge-recursive.c:1470
#, c-format
msgid "Adding merged %s"
msgstr "Afegint %s fusionat"
-#: merge-recursive.c:1472 merge-recursive.c:1674
+#: merge-recursive.c:1475 merge-recursive.c:1677
#, c-format
msgid "Adding as %s instead"
msgstr "Afegint com a %s en lloc d'això"
-#: merge-recursive.c:1523
+#: merge-recursive.c:1526
#, c-format
msgid "cannot read object %s"
msgstr "no es pot llegir l'objecte %s"
-#: merge-recursive.c:1526
+#: merge-recursive.c:1529
#, c-format
msgid "object %s is not a blob"
msgstr "L'objecte %s no és un blob"
-#: merge-recursive.c:1578
+#: merge-recursive.c:1581
msgid "modify"
msgstr "modifica"
-#: merge-recursive.c:1578
+#: merge-recursive.c:1581
msgid "modified"
msgstr "modificat"
-#: merge-recursive.c:1588
+#: merge-recursive.c:1591
msgid "content"
msgstr "contingut"
-#: merge-recursive.c:1595
+#: merge-recursive.c:1598
msgid "add/add"
msgstr "afegiment/afegiment"
-#: merge-recursive.c:1629
+#: merge-recursive.c:1632
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "%s saltat (el fusionat és igual a l'existent)"
-#: merge-recursive.c:1643
+#: merge-recursive.c:1646
#, c-format
msgid "Auto-merging %s"
msgstr "Autofusionant %s"
-#: merge-recursive.c:1647 git-submodule.sh:1025
+#: merge-recursive.c:1650 git-submodule.sh:1048
msgid "submodule"
msgstr "submòdul"
-#: merge-recursive.c:1648
+#: merge-recursive.c:1651
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "CONFLICTE (%s): Conflicte de fusió en %s"
-#: merge-recursive.c:1734
+#: merge-recursive.c:1737
#, c-format
msgid "Removing %s"
msgstr "Eliminant %s"
-#: merge-recursive.c:1759
+#: merge-recursive.c:1762
msgid "file/directory"
msgstr "fitxer/directori"
-#: merge-recursive.c:1765
+#: merge-recursive.c:1768
msgid "directory/file"
msgstr "directori/fitxer"
-#: merge-recursive.c:1770
+#: merge-recursive.c:1773
#, c-format
msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
msgstr ""
"CONFLICTE (%s): Hi ha un directori amb nom %s en %s. Afegint %s com a %s"
-#: merge-recursive.c:1780
+#: merge-recursive.c:1783
#, c-format
msgid "Adding %s"
msgstr "Afegint %s"
-#: merge-recursive.c:1797
+#: merge-recursive.c:1800
msgid "Fatal merge failure, shouldn't happen."
msgstr "Fallat de fusió fatal; això no ha de passar."
-#: merge-recursive.c:1816
+#: merge-recursive.c:1819
msgid "Already up-to-date!"
msgstr "Ja al dia!"
-#: merge-recursive.c:1825
+#: merge-recursive.c:1828
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "la fusió dels arbres %s i %s ha fallat"
-#: merge-recursive.c:1855
+#: merge-recursive.c:1858
#, c-format
msgid "Unprocessed path??? %s"
msgstr "Camí no processat??? %s"
-#: merge-recursive.c:1903
+#: merge-recursive.c:1906
msgid "Merging:"
msgstr "Fusionant:"
-#: merge-recursive.c:1916
+#: merge-recursive.c:1919
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "s'ha trobat %u avantpassat:"
msgstr[1] "s'han trobat %u avantpassats:"
-#: merge-recursive.c:1953
+#: merge-recursive.c:1956
msgid "merge returned no commit"
msgstr "la fusió no ha retornat cap comissió"
-#: merge-recursive.c:2010
+#: merge-recursive.c:2013
#, c-format
msgid "Could not parse object '%s'"
msgstr "No s'ha pogut analitzar l'objecte '%s'"
-#: merge-recursive.c:2021 builtin/merge.c:645
+#: merge-recursive.c:2024 builtin/merge.c:646
msgid "Unable to write index."
msgstr "No s'ha pogut escriure l'índex."
@@ -986,7 +1009,7 @@ msgstr "-NUM"
#: parse-options-cb.c:108
#, c-format
msgid "malformed object name '%s'"
-msgstr "nom d'objecte mal format '%s'"
+msgstr "nom de camp mal format '%s'"
#: path.c:752
#, c-format
@@ -1047,12 +1070,12 @@ msgid "%s: pathspec magic not supported by this command: %s"
msgstr ""
"%s: aquesta ordre no és compatible amb la màgia d'especificació de camí: %s"
-#: pathspec.c:432
+#: pathspec.c:433
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "l'especificació de camí '%s' és més enllà d'un enllaç simbòlic"
-#: pathspec.c:441
+#: pathspec.c:442
msgid ""
"There is nothing to exclude from by :(exclude) patterns.\n"
"Perhaps you forgot to add either ':/' or '.' ?"
@@ -1086,164 +1109,249 @@ msgstr ""
"GIT_INDEX_VERSION establert, però el valor no és vàlid.\n"
"Usant la versió %i"
-#: refs.c:543 builtin/merge.c:760 builtin/merge.c:871 builtin/merge.c:973
-#: builtin/merge.c:983
+#: refs.c:543 builtin/merge.c:761 builtin/merge.c:872 builtin/merge.c:974
+#: builtin/merge.c:984
#, c-format
msgid "Could not open '%s' for writing"
msgstr "No s'ha pogut obrir '%s' per a escriptura"
-#: refs/files-backend.c:2359
+#: refs/files-backend.c:2374
#, c-format
msgid "could not delete reference %s: %s"
msgstr "no s'ha pogut suprimir la referència %s: %s"
-#: refs/files-backend.c:2362
+#: refs/files-backend.c:2377
#, c-format
msgid "could not delete references: %s"
msgstr "no s'ha pogut suprimir les referències: %s"
-#: refs/files-backend.c:2371
+#: refs/files-backend.c:2386
#, c-format
msgid "could not remove reference %s"
msgstr "no s'ha pogut eliminar la referència %s"
-#: ref-filter.c:245
+#: ref-filter.c:55
#, c-format
-msgid "format: %%(end) atom used without corresponding atom"
-msgstr "format: s'ha usat l'àtom %%(end) sense l'àtom corresponent"
+msgid "expected format: %%(color:<color>)"
+msgstr "format esperat: %%(color:<color>)"
+
+#: ref-filter.c:57
+#, c-format
+msgid "unrecognized color: %%(color:%s)"
+msgstr "color no reconegut: %%(color:%s)"
+
+#: ref-filter.c:71
+#, c-format
+msgid "unrecognized format: %%(%s)"
+msgstr "format no reconegut: %%(%s)"
+
+#: ref-filter.c:77
+#, c-format
+msgid "%%(body) does not take arguments"
+msgstr "%%(body) no accepta paràmetres"
+
+#: ref-filter.c:84
+#, c-format
+msgid "%%(subject) does not take arguments"
+msgstr "%%(subject) no accepta paràmetres"
-#: ref-filter.c:704
+#: ref-filter.c:101
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "valor positiu esperat contents:lines=%s"
-#: ref-filter.c:833
+#: ref-filter.c:103
#, c-format
-msgid "expected format: %%(color:<color>)"
-msgstr "format esperat: %%(color:<color>)"
+msgid "unrecognized %%(contents) argument: %s"
+msgstr "paràmetre %%(contents) no reconegut: %s"
-#: ref-filter.c:835
-msgid "unable to parse format"
-msgstr "no s'ha pogut analitzar el format"
+#: ref-filter.c:113
+#, c-format
+msgid "unrecognized %%(objectname) argument: %s"
+msgstr "paràmetre %%(objectname) no reconegut: %s"
-#: ref-filter.c:870
+#: ref-filter.c:135
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "format esperat: %%(align:<amplada>,<posició>)"
-#: ref-filter.c:893
+#: ref-filter.c:147
+#, c-format
+msgid "unrecognized position:%s"
+msgstr "posició no reconeguda:%s"
+
+#: ref-filter.c:151
#, c-format
-msgid "improper format entered align:%s"
-msgstr "format impropi introduït align:%s"
+msgid "unrecognized width:%s"
+msgstr "amplada no reconeguda:%s"
-#: ref-filter.c:898
+#: ref-filter.c:157
+#, c-format
+msgid "unrecognized %%(align) argument: %s"
+msgstr "paràmetre %%(align) no reconegut: %s"
+
+#: ref-filter.c:161
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "amplada positiva esperada amb l'àtom %%(align)"
-#: ref-filter.c:1219
+#: ref-filter.c:244
+#, c-format
+msgid "malformed field name: %.*s"
+msgstr "nom d'objecte mal format: %.*s"
+
+#: ref-filter.c:270
+#, c-format
+msgid "unknown field name: %.*s"
+msgstr "nom de camp desconegut: %.*s"
+
+#: ref-filter.c:372
+#, c-format
+msgid "format: %%(end) atom used without corresponding atom"
+msgstr "format: s'ha usat l'àtom %%(end) sense l'àtom corresponent"
+
+#: ref-filter.c:424
+#, c-format
+msgid "malformed format string %s"
+msgstr "cadena de format mal format %s"
+
+#: ref-filter.c:878
+msgid ":strip= requires a positive integer argument"
+msgstr ":strip= requereix un paràmetre enter positiu"
+
+#: ref-filter.c:883
+#, c-format
+msgid "ref '%s' does not have %ld components to :strip"
+msgstr "la referència '%s' no té %ld components per a :strip"
+
+#: ref-filter.c:1046
+#, c-format
+msgid "unknown %.*s format %s"
+msgstr "format de %.*s desconegut %s"
+
+#: ref-filter.c:1066 ref-filter.c:1097
+#, c-format
+msgid "missing object %s for %s"
+msgstr "manca l'objecte %s per a %s"
+
+#: ref-filter.c:1069 ref-filter.c:1100
+#, c-format
+msgid "parse_object_buffer failed on %s for %s"
+msgstr "parse_object_buffer ha fallat en %s per a %s"
+
+#: ref-filter.c:1311
#, c-format
msgid "malformed object at '%s'"
msgstr "objecte mal format a '%s'"
-#: ref-filter.c:1561
+#: ref-filter.c:1373
+#, c-format
+msgid "ignoring ref with broken name %s"
+msgstr "ignorant la referència amb nom trencat %s"
+
+#: ref-filter.c:1378
+#, c-format
+msgid "ignoring broken ref %s"
+msgstr "ignorant la referència trencada %s"
+
+#: ref-filter.c:1651
#, c-format
msgid "format: %%(end) atom missing"
msgstr "format: manca l'àtom %%(end)"
-#: ref-filter.c:1615
+#: ref-filter.c:1705
#, c-format
msgid "malformed object name %s"
msgstr "nom d'objecte %s mal format"
-#: remote.c:756
+#: remote.c:745
#, c-format
msgid "Cannot fetch both %s and %s to %s"
msgstr "No es pot obtenir ambdós %s i %s a %s"
-#: remote.c:760
+#: remote.c:749
#, c-format
msgid "%s usually tracks %s, not %s"
msgstr "%s generalment segueix %s, no %s"
-#: remote.c:764
+#: remote.c:753
#, c-format
msgid "%s tracks both %s and %s"
msgstr "%s segueix ambdós %s i %s"
-#: remote.c:772
+#: remote.c:761
msgid "Internal error"
msgstr "Error intern"
-#: remote.c:1687 remote.c:1730
+#: remote.c:1677 remote.c:1720
msgid "HEAD does not point to a branch"
msgstr "HEAD no assenyala cap branca"
-#: remote.c:1696
+#: remote.c:1686
#, c-format
msgid "no such branch: '%s'"
msgstr "no hi ha tal branca: '%s'"
-#: remote.c:1699
+#: remote.c:1689
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "cap font configurada per a la branca '%s'"
-#: remote.c:1705
+#: remote.c:1695
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "La branca font '%s' no s'emmagatzema com a branca amb seguiment remot"
-#: remote.c:1720
+#: remote.c:1710
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"el destí de pujada '%s' en el remot '%s' no té cap branca seguidora local"
-#: remote.c:1735
+#: remote.c:1725
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "la branca '%s' no té cap remot al qual pujar"
-#: remote.c:1746
+#: remote.c:1736
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "les especificacions de referència de '%s' no inclouen '%s'"
-#: remote.c:1759
+#: remote.c:1749
msgid "push has no destination (push.default is 'nothing')"
msgstr "push no té destí (push.default és 'nothing')"
-#: remote.c:1781
+#: remote.c:1771
msgid "cannot resolve 'simple' push to a single destination"
msgstr "no es pot resoldre una pujada 'simple' a un sol destí"
-#: remote.c:2083
+#: remote.c:2073
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "La vostra branca està basada en '%s', però la font no hi és.\n"
-#: remote.c:2087
+#: remote.c:2077
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (useu \"git branch --unset-upstream\" per a arreglar)\n"
-#: remote.c:2090
+#: remote.c:2080
#, c-format
msgid "Your branch is up-to-date with '%s'.\n"
msgstr "La vostra branca està al dia amb '%s'.\n"
-#: remote.c:2094
+#: remote.c:2084
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "La vostra branca està davant de '%s' per %d comissió.\n"
msgstr[1] "La vostra branca està davant de '%s' per %d comissions.\n"
-#: remote.c:2100
+#: remote.c:2090
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (useu \"git push\" per a publicar les vostres comissions locals)\n"
-#: remote.c:2103
+#: remote.c:2093
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -1255,11 +1363,11 @@ msgstr[1] ""
"La vostra branca està darrere de '%s' per %d comissions, i pot avançar-se "
"ràpidament.\n"
-#: remote.c:2111
+#: remote.c:2101
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (useu \"git pull\" per a actualitzar la vostra branca local)\n"
-#: remote.c:2114
+#: remote.c:2104
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -1274,28 +1382,28 @@ msgstr[1] ""
"La vostra branca i '%s' s'han divergit,\n"
"i tenen %d i %d comissions distintes cada una, respectivament.\n"
-#: remote.c:2124
+#: remote.c:2114
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (useu \"git pull\" per a fusionar la branca remota a la vostra)\n"
-#: revision.c:2193
+#: revision.c:2131
msgid "your current branch appears to be broken"
msgstr "la vostra branca actual sembla trencada"
-#: revision.c:2196
+#: revision.c:2134
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "la vostra branca actual '%s' encara no té cap comissió"
-#: revision.c:2390
+#: revision.c:2328
msgid "--first-parent is incompatible with --bisect"
msgstr "--first-parent és incompatible amb --bisect"
-#: run-command.c:90
+#: run-command.c:92
msgid "open /dev/null failed"
msgstr "s'ha fallat en obrir /dev/null"
-#: run-command.c:92
+#: run-command.c:94
#, c-format
msgid "dup2(%d,%d) failed"
msgstr "dup2(%d,%d) ha fallat"
@@ -1320,7 +1428,7 @@ msgstr ""
msgid "the receiving end does not support --atomic push"
msgstr "el destí receptor no admet pujar --atomic"
-#: sequencer.c:183
+#: sequencer.c:174
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
@@ -1328,7 +1436,7 @@ msgstr ""
"després de resoldre els conflictes, marqueu els camins\n"
"corregits amb 'git add <camins>' o 'git rm <camins>'"
-#: sequencer.c:186
+#: sequencer.c:177
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'\n"
@@ -1338,67 +1446,67 @@ msgstr ""
"corregits amb 'git add <camins>' o 'git rm <camins>'\n"
"i cometeu el resultat amb 'git commit'"
-#: sequencer.c:199 sequencer.c:842 sequencer.c:922
+#: sequencer.c:190 sequencer.c:833 sequencer.c:913
#, c-format
msgid "Could not write to %s"
msgstr "No s'ha pogut escriure a %s"
-#: sequencer.c:202
+#: sequencer.c:193
#, c-format
msgid "Error wrapping up %s"
msgstr "Error en finalitzar %s"
-#: sequencer.c:217
+#: sequencer.c:208
msgid "Your local changes would be overwritten by cherry-pick."
msgstr "Els vostres canvis locals se sobreescriurien pel recull de cireres."
-#: sequencer.c:219
+#: sequencer.c:210
msgid "Your local changes would be overwritten by revert."
msgstr "Els vostres canvis locals se sobreescriurien per la reversió."
-#: sequencer.c:222
+#: sequencer.c:213
msgid "Commit your changes or stash them to proceed."
msgstr "Cometeu els vostres canvis o emmagatzemeu-los per a procedir."
#. TRANSLATORS: %s will be "revert" or "cherry-pick"
-#: sequencer.c:309
+#: sequencer.c:300
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: No s'ha pogut escriure un fitxer d'índex nou"
-#: sequencer.c:327
+#: sequencer.c:318
msgid "Could not resolve HEAD commit\n"
msgstr "No s'ha pogut resoldre la comissió HEAD\n"
-#: sequencer.c:347
+#: sequencer.c:338
msgid "Unable to update cache tree\n"
msgstr "No s'ha pogut actualitzar l'arbre cau\n"
-#: sequencer.c:399
+#: sequencer.c:390
#, c-format
msgid "Could not parse commit %s\n"
msgstr "No s'ha pogut analitzar la comissió %s\n"
-#: sequencer.c:404
+#: sequencer.c:395
#, c-format
msgid "Could not parse parent commit %s\n"
msgstr "No s'ha pogut analitzar la comissió mare %s\n"
-#: sequencer.c:469
+#: sequencer.c:460
msgid "Your index file is unmerged."
msgstr "El vostre fitxer d'índex està sense fusionar."
-#: sequencer.c:488
+#: sequencer.c:479
#, c-format
msgid "Commit %s is a merge but no -m option was given."
msgstr "La comissió %s és una fusió però no s'ha donat cap opció -m."
-#: sequencer.c:496
+#: sequencer.c:487
#, c-format
msgid "Commit %s does not have parent %d"
msgstr "La comissió %s no té mare %d"
-#: sequencer.c:500
+#: sequencer.c:491
#, c-format
msgid "Mainline was specified but commit %s is not a merge."
msgstr ""
@@ -1406,162 +1514,178 @@ msgstr ""
#. TRANSLATORS: The first %s will be "revert" or
#. "cherry-pick", the second %s a SHA1
-#: sequencer.c:513
+#: sequencer.c:504
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: no es pot analitzar la comissió mare %s"
-#: sequencer.c:517
+#: sequencer.c:508
#, c-format
msgid "Cannot get commit message for %s"
msgstr "No es pot obtenir el missatge de comissió de %s"
-#: sequencer.c:603
+#: sequencer.c:594
#, c-format
msgid "could not revert %s... %s"
msgstr "no s'ha pogut revertir %s...%s"
-#: sequencer.c:604
+#: sequencer.c:595
#, c-format
msgid "could not apply %s... %s"
msgstr "no s'ha pogut aplicar %s...%s"
-#: sequencer.c:639
+#: sequencer.c:630
msgid "empty commit set passed"
msgstr "conjunt de comissions buit passat"
-#: sequencer.c:647
+#: sequencer.c:638
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: s'ha fallat en llegir l'índex"
-#: sequencer.c:651
+#: sequencer.c:642
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: s'ha fallat en actualitzar l'índex"
-#: sequencer.c:711
+#: sequencer.c:702
#, c-format
msgid "Cannot %s during a %s"
msgstr "No es pot %s durant un %s"
-#: sequencer.c:733
+#: sequencer.c:724
#, c-format
msgid "Could not parse line %d."
msgstr "No s'ha pogut analitzar la línia %d."
-#: sequencer.c:738
+#: sequencer.c:729
msgid "No commits parsed."
msgstr "Cap comissió analitzada."
-#: sequencer.c:750
+#: sequencer.c:741
#, c-format
msgid "Could not open %s"
msgstr "No s'ha pogut obrir %s"
-#: sequencer.c:754
+#: sequencer.c:745
#, c-format
msgid "Could not read %s."
msgstr "No s'ha pogut llegir %s."
-#: sequencer.c:761
+#: sequencer.c:752
#, c-format
msgid "Unusable instruction sheet: %s"
msgstr "Full d'instruccions inusable: %s"
-#: sequencer.c:791
+#: sequencer.c:782
#, c-format
msgid "Invalid key: %s"
msgstr "Clau no vàlida: %s"
-#: sequencer.c:794 builtin/pull.c:47 builtin/pull.c:49
+#: sequencer.c:785 builtin/pull.c:50 builtin/pull.c:52
#, c-format
msgid "Invalid value for %s: %s"
msgstr "Valor no vàlid per a %s: %s"
-#: sequencer.c:804
+#: sequencer.c:795
#, c-format
msgid "Malformed options sheet: %s"
msgstr "Full d'opcions mal format: %s"
-#: sequencer.c:823
+#: sequencer.c:814
msgid "a cherry-pick or revert is already in progress"
msgstr "un recull de cireres o una reversió ja està en curs"
-#: sequencer.c:824
+#: sequencer.c:815
msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
msgstr "intenteu \"git cherry-pick (--continue | --quit | --abort)\""
-#: sequencer.c:828
+#: sequencer.c:819
#, c-format
msgid "Could not create sequencer directory %s"
msgstr "No s'ha pogut crear el directori de seqüenciador %s"
-#: sequencer.c:844 sequencer.c:926
+#: sequencer.c:835 sequencer.c:917
#, c-format
msgid "Error wrapping up %s."
msgstr "Error en finalitzar %s."
-#: sequencer.c:863 sequencer.c:996
+#: sequencer.c:854 sequencer.c:987
msgid "no cherry-pick or revert in progress"
msgstr "ni hi ha cap recull de cireres ni cap reversió en curs"
-#: sequencer.c:865
+#: sequencer.c:856
msgid "cannot resolve HEAD"
msgstr "no es pot resoldre HEAD"
-#: sequencer.c:867
+#: sequencer.c:858
msgid "cannot abort from a branch yet to be born"
msgstr "no es pot avortar des d'una branca que encara ha de nàixer"
-#: sequencer.c:887 builtin/apply.c:4287
+#: sequencer.c:878 builtin/apply.c:4287
#, c-format
msgid "cannot open %s: %s"
msgstr "no es pot obrir %s: %s"
-#: sequencer.c:890
+#: sequencer.c:881
#, c-format
msgid "cannot read %s: %s"
msgstr "no es pot llegir %s: %s"
-#: sequencer.c:891
+#: sequencer.c:882
msgid "unexpected end of file"
msgstr "final de fitxer inesperat"
-#: sequencer.c:897
+#: sequencer.c:888
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr "el fitxer HEAD emmagatzemat abans del recull de cireres '%s' és malmès"
-#: sequencer.c:919
+#: sequencer.c:910
#, c-format
msgid "Could not format %s."
msgstr "No s'ha pogut formatar %s."
-#: sequencer.c:1064
+#: sequencer.c:1055
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: no es pot recollir com a cirera un %s"
-#: sequencer.c:1067
+#: sequencer.c:1058
#, c-format
msgid "%s: bad revision"
msgstr "%s: revisió dolenta"
-#: sequencer.c:1101
+#: sequencer.c:1092
msgid "Can't revert as initial commit"
msgstr "No es pot revertir com a comissió inicial"
-#: sequencer.c:1102
+#: sequencer.c:1093
msgid "Can't cherry-pick into empty head"
msgstr "No es pot recollir cireres en un cap buit"
-#: setup.c:248
+#: setup.c:246
#, c-format
msgid "failed to read %s"
msgstr "s'ha fallat en llegir %s"
-#: sha1_name.c:463
+#: sha1_file.c:1080
+msgid "offset before end of packfile (broken .idx?)"
+msgstr "desplaçament abans de la fi del fitxer de paquet (.idx trencat?)"
+
+#: sha1_file.c:2459
+#, c-format
+msgid "offset before start of pack index for %s (corrupt index?)"
+msgstr ""
+"desplaçament abans d'inici d'índex de paquet per a %s (índex corromput?)"
+
+#: sha1_file.c:2463
+#, c-format
+msgid "offset beyond end of pack index for %s (truncated index?)"
+msgstr ""
+"desplaçament més enllà de la fi d'índex de paquet per a %s (índex truncat?)"
+
+#: sha1_name.c:462
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -1585,62 +1709,86 @@ msgstr ""
"suprimiu-les. Desactiveu aquest missatge executant\n"
"\"git config advice.objectNameWarning false\""
-#: submodule.c:61 submodule.c:95
+#: submodule.c:62 submodule.c:96
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
msgstr ""
"No es pot canviar un .gitmodules no fusionat, primer resoldreu els "
"conflictes de fusió"
-#: submodule.c:65 submodule.c:99
+#: submodule.c:66 submodule.c:100
#, c-format
msgid "Could not find section in .gitmodules where path=%s"
msgstr "No s'ha pogut trobar la secció en .gitmodules on path=%s"
-#: submodule.c:73
+#: submodule.c:74
#, c-format
msgid "Could not update .gitmodules entry %s"
msgstr "No s'ha pogut actualitzar l'entrada de .gitmodules %s"
-#: submodule.c:106
+#: submodule.c:107
#, c-format
msgid "Could not remove .gitmodules entry for %s"
msgstr "No s'ha pogut eliminar l'entrada de .gitmodules per a %s"
-#: submodule.c:117
+#: submodule.c:118
msgid "staging updated .gitmodules failed"
msgstr "L'allistament del .gitmodules actualitzat ha fallat"
-#: submodule.c:1040
+#: trailer.c:237
#, c-format
-msgid "Could not set core.worktree in %s"
-msgstr "No s'ha pogut establir core.worktree en %s"
+msgid "running trailer command '%s' failed"
+msgstr "l'execució de l'ordre de remolc '%s' ha fallat"
-#: trailer.c:491 trailer.c:495 trailer.c:499 trailer.c:553 trailer.c:557
-#: trailer.c:561
+#: trailer.c:492 trailer.c:496 trailer.c:500 trailer.c:554 trailer.c:558
+#: trailer.c:562
#, c-format
msgid "unknown value '%s' for key '%s'"
msgstr "valor desconegut '%s' per a la clau '%s'"
-#: trailer.c:543 trailer.c:548 builtin/remote.c:296
+#: trailer.c:544 trailer.c:549 builtin/remote.c:289
#, c-format
msgid "more than one %s"
msgstr "més d'un %s"
-#: trailer.c:581
+#: trailer.c:582
#, c-format
msgid "empty trailer token in trailer '%.*s'"
msgstr "fitxa de remolc buida en el remolc '%.*s'"
-#: trailer.c:701
+#: trailer.c:702
#, c-format
msgid "could not read input file '%s'"
msgstr "no s'ha pogut llegir el fitxer d'entrada '%s'"
-#: trailer.c:704
+#: trailer.c:705
msgid "could not read from stdin"
msgstr "No s'ha pogut llegir des d'stdin"
-#: transport-helper.c:1025
+#: trailer.c:857 builtin/am.c:42
+#, c-format
+msgid "could not stat %s"
+msgstr "no s'ha pogut fer stat a %s"
+
+#: trailer.c:859
+#, c-format
+msgid "file %s is not a regular file"
+msgstr "el fitxer %s no és un fitxer regular"
+
+#: trailer.c:861
+#, c-format
+msgid "file %s is not writable by user"
+msgstr "el fitxer %s no és gravable per l'usuari"
+
+#: trailer.c:873
+msgid "could not open temporary file"
+msgstr "no s'ha pogut obrir el fitxer temporal"
+
+#: trailer.c:912
+#, c-format
+msgid "could not rename temporary file to %s"
+msgstr "no s'ha pogut canviar el nom del fitxer temporal a %s"
+
+#: transport-helper.c:1041
#, c-format
msgid "Could not read ref %s"
msgstr "No s'ha pogut llegir la referència %s"
@@ -1678,47 +1826,47 @@ msgstr "número de port no vàlid"
msgid "invalid '..' path segment"
msgstr "segment de camí '..' no vàlid"
-#: wrapper.c:219 wrapper.c:362
+#: wrapper.c:222 wrapper.c:381
#, c-format
msgid "could not open '%s' for reading and writing"
msgstr "no s'ha pogut obrir '%s' per a lectura i escriptura"
-#: wrapper.c:221 wrapper.c:364
+#: wrapper.c:224 wrapper.c:383
#, c-format
msgid "could not open '%s' for writing"
msgstr "no s'ha pogut obrir '%s' per a escriptura"
-#: wrapper.c:223 wrapper.c:366 builtin/am.c:338 builtin/commit.c:1691
-#: builtin/merge.c:1074 builtin/pull.c:380
+#: wrapper.c:226 wrapper.c:385 builtin/am.c:323 builtin/commit.c:1691
+#: builtin/merge.c:1075 builtin/pull.c:387
#, c-format
msgid "could not open '%s' for reading"
msgstr "no s'ha pogut obrir '%s' per a lectura"
-#: wrapper.c:579
+#: wrapper.c:611
#, c-format
msgid "unable to access '%s': %s"
msgstr "no s'ha pogut accedir a '%s': %s"
-#: wrapper.c:600
+#: wrapper.c:632
#, c-format
msgid "unable to access '%s'"
msgstr "no s'ha pogut accedir a '%s'"
-#: wrapper.c:608
+#: wrapper.c:640
msgid "unable to get current working directory"
msgstr "no s'ha pogut obtenir el directori de treball actual"
-#: wrapper.c:635
+#: wrapper.c:667
#, c-format
msgid "could not open %s for writing"
msgstr "no s'ha pogut obrir '%s' per a escriptura"
-#: wrapper.c:646 builtin/am.c:425
+#: wrapper.c:678 builtin/am.c:410
#, c-format
msgid "could not write to %s"
msgstr "no s'ha pogut escriure a %s"
-#: wrapper.c:652
+#: wrapper.c:684
#, c-format
msgid "could not close %s"
msgstr "no s'ha pogut tancar %s"
@@ -2189,7 +2337,11 @@ msgstr "no hi és"
msgid "behind "
msgstr "darrere "
-#: compat/precompose_utf8.c:56 builtin/clone.c:408
+#: wt-status.c:1680 wt-status.c:1683
+msgid "ahead "
+msgstr "davant per "
+
+#: compat/precompose_utf8.c:57 builtin/clone.c:413
#, c-format
msgid "failed to unlink '%s'"
msgstr "s'ha fallat en desenllaçar '%s'"
@@ -2216,7 +2368,7 @@ msgstr "elimina '%s'\n"
msgid "Unstaged changes after refreshing the index:"
msgstr "Canvis no allistats després d'actualitzar l'índex:"
-#: builtin/add.c:194 builtin/rev-parse.c:796
+#: builtin/add.c:194 builtin/rev-parse.c:797
msgid "Could not read the index"
msgstr "No s'ha pogut llegir l'índex"
@@ -2252,15 +2404,15 @@ msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Els camins següents s'ignoren per un dels vostres fitxers .gitignore:\n"
-#: builtin/add.c:249 builtin/clean.c:894 builtin/fetch.c:108 builtin/mv.c:110
-#: builtin/prune-packed.c:55 builtin/pull.c:182 builtin/push.c:543
-#: builtin/remote.c:1345 builtin/rm.c:268 builtin/send-pack.c:162
+#: builtin/add.c:249 builtin/clean.c:870 builtin/fetch.c:112 builtin/mv.c:111
+#: builtin/prune-packed.c:55 builtin/pull.c:189 builtin/push.c:511
+#: builtin/remote.c:1330 builtin/rm.c:268 builtin/send-pack.c:162
msgid "dry run"
msgstr "marxa en sec"
-#: builtin/add.c:250 builtin/apply.c:4571 builtin/check-ignore.c:19
+#: builtin/add.c:250 builtin/apply.c:4561 builtin/check-ignore.c:19
#: builtin/commit.c:1322 builtin/count-objects.c:85 builtin/fsck.c:558
-#: builtin/log.c:1645 builtin/mv.c:109 builtin/read-tree.c:114
+#: builtin/log.c:1651 builtin/mv.c:110 builtin/read-tree.c:114
msgid "be verbose"
msgstr "sigues detallat"
@@ -2268,7 +2420,7 @@ msgstr "sigues detallat"
msgid "interactive picking"
msgstr "recull interactiu"
-#: builtin/add.c:253 builtin/checkout.c:1153 builtin/reset.c:286
+#: builtin/add.c:253 builtin/checkout.c:1155 builtin/reset.c:286
msgid "select hunks interactively"
msgstr "selecciona els trossos interactivament"
@@ -2337,139 +2489,134 @@ msgstr "Res especificat, res afegit.\n"
msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Potser volíeu dir 'git add .'?\n"
-#: builtin/add.c:358 builtin/check-ignore.c:172 builtin/clean.c:938
-#: builtin/commit.c:337 builtin/mv.c:130 builtin/reset.c:235 builtin/rm.c:298
-#: builtin/submodule--helper.c:40
+#: builtin/add.c:358 builtin/check-ignore.c:172 builtin/clean.c:914
+#: builtin/commit.c:337 builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298
+#: builtin/submodule--helper.c:35
msgid "index file corrupt"
msgstr "fitxer d'índex malmès"
-#: builtin/add.c:439 builtin/apply.c:4669 builtin/mv.c:279 builtin/rm.c:430
+#: builtin/add.c:439 builtin/apply.c:4659 builtin/mv.c:280 builtin/rm.c:430
msgid "Unable to write new index file"
msgstr "no s'ha pogut escriure un fitxer d'índex nou"
-#: builtin/am.c:42
-#, c-format
-msgid "could not stat %s"
-msgstr "no s'ha pogut fer stat a '%s'"
-
-#: builtin/am.c:271 builtin/commit.c:738 builtin/merge.c:1077
+#: builtin/am.c:256 builtin/commit.c:738 builtin/merge.c:1078
#, c-format
msgid "could not read '%s'"
msgstr "no s'ha pogut llegir '%s'"
-#: builtin/am.c:445
+#: builtin/am.c:430
msgid "could not parse author script"
msgstr "no s'ha pogut analitzar l'script d'autor"
-#: builtin/am.c:522
+#: builtin/am.c:507
#, c-format
msgid "'%s' was deleted by the applypatch-msg hook"
msgstr "s'ha suprimit '%s' per el ganxo applypatch-msg"
-#: builtin/am.c:563 builtin/notes.c:300
+#: builtin/am.c:548 builtin/notes.c:300
#, c-format
msgid "Malformed input line: '%s'."
msgstr "Línia d'entrada mal formada: '%s'."
-#: builtin/am.c:600 builtin/notes.c:315
+#: builtin/am.c:585 builtin/notes.c:315
#, c-format
msgid "Failed to copy notes from '%s' to '%s'"
msgstr "S'ha fallat en copiar les notes de '%s' a '%s'"
-#: builtin/am.c:626
+#: builtin/am.c:611
msgid "fseek failed"
msgstr "fseek ha fallat"
-#: builtin/am.c:787 builtin/am.c:875
+#: builtin/am.c:772 builtin/am.c:860
#, c-format
msgid "could not open '%s' for reading: %s"
msgstr "no s'ha pogut obrir '%s' per a lectura: %s"
-#: builtin/am.c:794
+#: builtin/am.c:779
#, c-format
msgid "could not open '%s' for writing: %s"
msgstr "no s'ha pogut obrir '%s' per a escriptura: %s"
-#: builtin/am.c:803
+#: builtin/am.c:788
#, c-format
msgid "could not parse patch '%s'"
msgstr "no s'ha pogut analitzar el pedaç '%s'"
-#: builtin/am.c:868
+#: builtin/am.c:853
msgid "Only one StGIT patch series can be applied at once"
msgstr "només una sèrie de pedaços StGIT es pot aplicar a la vegada"
-#: builtin/am.c:916
+#: builtin/am.c:901
msgid "invalid timestamp"
msgstr "marca de temps no vàlida"
-#: builtin/am.c:919 builtin/am.c:927
+#: builtin/am.c:904 builtin/am.c:912
msgid "invalid Date line"
msgstr "línia Date no vàlida"
-#: builtin/am.c:924
+#: builtin/am.c:909
msgid "invalid timezone offset"
msgstr "desplaçament de zona de temps no vàlid"
-#: builtin/am.c:1011
+#: builtin/am.c:996
msgid "Patch format detection failed."
msgstr "La detecció de format de pedaç ha fallat."
-#: builtin/am.c:1016 builtin/clone.c:373
+#: builtin/am.c:1001 builtin/clone.c:378
#, c-format
msgid "failed to create directory '%s'"
msgstr "s'ha fallat en crear el directori '%s'"
-#: builtin/am.c:1020
+#: builtin/am.c:1005
msgid "Failed to split patches."
msgstr "S'ha fallat en dividir els pedaços."
-#: builtin/am.c:1152 builtin/commit.c:363
+#: builtin/am.c:1137 builtin/commit.c:363
msgid "unable to write index file"
msgstr "no s'ha pogut escriure el fitxer d'índex"
-#: builtin/am.c:1203
+#: builtin/am.c:1188
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\"."
msgstr "Quan hàgiu resolt aquest problema, executeu \"%s --continue\"."
-#: builtin/am.c:1204
+#: builtin/am.c:1189
#, c-format
msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
msgstr "Si preferiu saltar aquest pedaç, executeu \"%s --skip\" en lloc."
-#: builtin/am.c:1205
+#: builtin/am.c:1190
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr ""
"Per a restaurar la branca original i deixar d'apedaçar, executeu \"%s --abort"
"\"."
-#: builtin/am.c:1343
+#: builtin/am.c:1328
msgid "Patch is empty. Was it split wrong?"
msgstr "El pedaç és buit. S'ha dividit malament?"
-#: builtin/am.c:1417 builtin/log.c:1347
+#: builtin/am.c:1402 builtin/log.c:1350
#, c-format
msgid "invalid ident line: %s"
msgstr "línia d'identitat no vàlida: %s"
-#: builtin/am.c:1444
+#: builtin/am.c:1429
#, c-format
msgid "unable to parse commit %s"
msgstr "no s'ha pogut analitzar la comissió %s"
-#: builtin/am.c:1646
+#: builtin/am.c:1631
msgid "Repository lacks necessary blobs to fall back on 3-way merge."
msgstr ""
"Al dipòsit li manquen els blobs necessaris per a retrocedir a una fusió de 3 "
"vies."
-#: builtin/am.c:1648
+#: builtin/am.c:1633
msgid "Using index info to reconstruct a base tree..."
msgstr "Usant la informació d'índex per a reconstruir un arbre base..."
-#: builtin/am.c:1667
+#: builtin/am.c:1652
msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
@@ -2477,38 +2624,38 @@ msgstr ""
"Heu editat el vostre pedaç a mà?\n"
"No s'aplica als blobs recordats en el seu índex."
-#: builtin/am.c:1673
+#: builtin/am.c:1658
msgid "Falling back to patching base and 3-way merge..."
msgstr "Retrocedint a apedaçar la base i fusionar de 3 vies..."
-#: builtin/am.c:1688
+#: builtin/am.c:1673
msgid "Failed to merge in the changes."
msgstr "S'ha fallat en fusionar els canvis."
-#: builtin/am.c:1712 builtin/merge.c:632
+#: builtin/am.c:1697 builtin/merge.c:633
msgid "git write-tree failed to write a tree"
msgstr "git write-tree ha fallat en escriure un arbre"
-#: builtin/am.c:1719
+#: builtin/am.c:1704
msgid "applying to an empty history"
msgstr "aplicant a una història buida"
-#: builtin/am.c:1732 builtin/commit.c:1755 builtin/merge.c:829
-#: builtin/merge.c:854
+#: builtin/am.c:1717 builtin/commit.c:1755 builtin/merge.c:830
+#: builtin/merge.c:855
msgid "failed to write commit object"
msgstr "s'ha fallat en escriure l'objecte de comissió"
-#: builtin/am.c:1764 builtin/am.c:1768
+#: builtin/am.c:1749 builtin/am.c:1753
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "no es pot reprendre: %s no existeix."
-#: builtin/am.c:1784
+#: builtin/am.c:1769
msgid "cannot be interactive without stdin connected to a terminal."
msgstr ""
"no es pot ser interactiu sense que stdin sigui connectat a un terminal."
-#: builtin/am.c:1789
+#: builtin/am.c:1774
msgid "Commit Body is:"
msgstr "El cos de la comissió és:"
@@ -2516,37 +2663,37 @@ msgstr "El cos de la comissió és:"
#. in your translation. The program will only accept English
#. input at this point.
#.
-#: builtin/am.c:1799
+#: builtin/am.c:1784
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr ""
"Voleu aplicar-lo? [y]es/[n]o/[e]dita/[v]isualitza el pedaç/[a]ccepta'ls "
"tots: "
-#: builtin/am.c:1849
+#: builtin/am.c:1834
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr "Índex brut: no es pot aplicar pedaços (bruts: %s)"
-#: builtin/am.c:1884 builtin/am.c:1955
+#: builtin/am.c:1869 builtin/am.c:1941
#, c-format
msgid "Applying: %.*s"
msgstr "Aplicant: %.*s"
-#: builtin/am.c:1900
+#: builtin/am.c:1885
msgid "No changes -- Patch already applied."
msgstr "Sense canvis -- El pedaç ja s'ha aplicat."
-#: builtin/am.c:1908
+#: builtin/am.c:1893
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "El pedaç ha fallat a %s %.*s"
-#: builtin/am.c:1914
+#: builtin/am.c:1899
#, c-format
msgid "The copy of the patch that failed is found in: %s"
msgstr "La còpia del pedaç que ha fallat es troba en: %s"
-#: builtin/am.c:1958
+#: builtin/am.c:1944
msgid ""
"No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n"
@@ -2556,7 +2703,7 @@ msgstr ""
"Si no hi ha res a allistar, probablement alguna altra cosa\n"
"ja ha introduït els mateixos canvis; potser voleu ometre aquest pedaç."
-#: builtin/am.c:1965
+#: builtin/am.c:1951
msgid ""
"You still have unmerged paths in your index.\n"
"Did you forget to use 'git add'?"
@@ -2564,17 +2711,17 @@ msgstr ""
"Encara teniu camins sense fusionar en el vostre índex.\n"
"Heu oblidat d'usar 'git add'?"
-#: builtin/am.c:2073 builtin/am.c:2077 builtin/am.c:2089 builtin/reset.c:308
+#: builtin/am.c:2059 builtin/am.c:2063 builtin/am.c:2075 builtin/reset.c:308
#: builtin/reset.c:316
#, c-format
msgid "Could not parse object '%s'."
msgstr "No s'ha pogut analitzar l'objecte '%s'."
-#: builtin/am.c:2125
+#: builtin/am.c:2111
msgid "failed to clean index"
msgstr "s'ha fallat en netejar l'índex"
-#: builtin/am.c:2159
+#: builtin/am.c:2145
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -2582,154 +2729,154 @@ msgstr ""
"Sembla que heu mogut HEAD després de l'última fallada de 'am'.\n"
"No rebobinant a ORIG_HEAD"
-#: builtin/am.c:2220
+#: builtin/am.c:2206
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Valor no vàlid per a --patch-format: %s"
-#: builtin/am.c:2253
+#: builtin/am.c:2239
msgid "git am [<options>] [(<mbox>|<Maildir>)...]"
msgstr "git am [<opcions>] [(<bústia>|<directori-de-correu>)...]"
-#: builtin/am.c:2254
+#: builtin/am.c:2240
msgid "git am [<options>] (--continue | --skip | --abort)"
msgstr "git am [<opcions>] (--continue | --skip | --abort)"
-#: builtin/am.c:2260
+#: builtin/am.c:2246
msgid "run interactively"
msgstr "executa interactivament"
-#: builtin/am.c:2262
+#: builtin/am.c:2248
msgid "historical option -- no-op"
msgstr "opció històrica -- no-op"
-#: builtin/am.c:2264
+#: builtin/am.c:2250
msgid "allow fall back on 3way merging if needed"
msgstr "permet retrocedir a una fusió de 3 vies si és necessari"
-#: builtin/am.c:2265 builtin/init-db.c:474 builtin/prune-packed.c:57
+#: builtin/am.c:2251 builtin/init-db.c:474 builtin/prune-packed.c:57
#: builtin/repack.c:171
msgid "be quiet"
msgstr "calla"
-#: builtin/am.c:2267
+#: builtin/am.c:2253
msgid "add a Signed-off-by line to the commit message"
msgstr "afegeix una línia Signed-off-by al missatge de comissió"
-#: builtin/am.c:2270
+#: builtin/am.c:2256
msgid "recode into utf8 (default)"
msgstr "recodifica en utf8 (per defecte)"
-#: builtin/am.c:2272
+#: builtin/am.c:2258
msgid "pass -k flag to git-mailinfo"
msgstr "passa la bandera -k al git-mailinfo"
-#: builtin/am.c:2274
+#: builtin/am.c:2260
msgid "pass -b flag to git-mailinfo"
msgstr "passa la bandera -b al git-mailinfo"
-#: builtin/am.c:2276
+#: builtin/am.c:2262
msgid "pass -m flag to git-mailinfo"
msgstr "passa la bandera -m al git-mailinfo"
-#: builtin/am.c:2278
+#: builtin/am.c:2264
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr "passa la bandera --keep-cr al git-mailsplit pel format mbox"
-#: builtin/am.c:2281
+#: builtin/am.c:2267
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"no passis la bandera --keep-cr al git-mailsplit independent de am.keepcr"
-#: builtin/am.c:2284
+#: builtin/am.c:2270
msgid "strip everything before a scissors line"
msgstr "despulla tot abans d'una línia de tissores"
-#: builtin/am.c:2285 builtin/apply.c:4554
+#: builtin/am.c:2271 builtin/apply.c:4544
msgid "action"
msgstr "acció"
-#: builtin/am.c:2286 builtin/am.c:2289 builtin/am.c:2292 builtin/am.c:2295
-#: builtin/am.c:2298 builtin/am.c:2301 builtin/am.c:2304 builtin/am.c:2307
-#: builtin/am.c:2313
+#: builtin/am.c:2272 builtin/am.c:2275 builtin/am.c:2278 builtin/am.c:2281
+#: builtin/am.c:2284 builtin/am.c:2287 builtin/am.c:2290 builtin/am.c:2293
+#: builtin/am.c:2299
msgid "pass it through git-apply"
msgstr "passa-ho a través del git-apply"
-#: builtin/am.c:2294 builtin/apply.c:4578
+#: builtin/am.c:2280 builtin/apply.c:4568
msgid "root"
msgstr "arrel"
-#: builtin/am.c:2297 builtin/am.c:2300 builtin/apply.c:4516
-#: builtin/apply.c:4519 builtin/clone.c:85 builtin/fetch.c:93
-#: builtin/pull.c:167 builtin/submodule--helper.c:78
-#: builtin/submodule--helper.c:166 builtin/submodule--helper.c:169
+#: builtin/am.c:2283 builtin/am.c:2286 builtin/apply.c:4506
+#: builtin/apply.c:4509 builtin/clone.c:86 builtin/fetch.c:95
+#: builtin/pull.c:171 builtin/submodule--helper.c:72
+#: builtin/submodule--helper.c:160 builtin/submodule--helper.c:163
msgid "path"
msgstr "camí"
-#: builtin/am.c:2303 builtin/fmt-merge-msg.c:666 builtin/fmt-merge-msg.c:669
-#: builtin/grep.c:693 builtin/merge.c:198 builtin/pull.c:127
+#: builtin/am.c:2289 builtin/fmt-merge-msg.c:666 builtin/fmt-merge-msg.c:669
+#: builtin/grep.c:704 builtin/merge.c:198 builtin/pull.c:131 builtin/pull.c:185
#: builtin/repack.c:178 builtin/repack.c:182 builtin/show-branch.c:645
#: builtin/show-ref.c:175 builtin/tag.c:340 parse-options.h:132
#: parse-options.h:134 parse-options.h:244
msgid "n"
msgstr "n"
-#: builtin/am.c:2306 builtin/apply.c:4522
+#: builtin/am.c:2292 builtin/apply.c:4512
msgid "num"
msgstr "número"
-#: builtin/am.c:2309 builtin/for-each-ref.c:37 builtin/replace.c:438
+#: builtin/am.c:2295 builtin/for-each-ref.c:37 builtin/replace.c:438
#: builtin/tag.c:372
msgid "format"
msgstr "format"
-#: builtin/am.c:2310
+#: builtin/am.c:2296
msgid "format the patch(es) are in"
msgstr "el format en el qual estan els pedaços"
-#: builtin/am.c:2316
+#: builtin/am.c:2302
msgid "override error message when patch failure occurs"
msgstr ""
"passa per alt el missatge d'error quan s'ocorre una fallada en apedaçar"
-#: builtin/am.c:2318
+#: builtin/am.c:2304
msgid "continue applying patches after resolving a conflict"
msgstr "segueix aplicant pedaços després de resoldre un conflicte"
-#: builtin/am.c:2321
+#: builtin/am.c:2307
msgid "synonyms for --continue"
msgstr "sinònims de --continue"
-#: builtin/am.c:2324
+#: builtin/am.c:2310
msgid "skip the current patch"
msgstr "salta el pedaç actual"
-#: builtin/am.c:2327
+#: builtin/am.c:2313
msgid "restore the original branch and abort the patching operation."
msgstr "restaura la branca original i avorta l'operació d'apedaçament."
-#: builtin/am.c:2331
+#: builtin/am.c:2317
msgid "lie about committer date"
msgstr "menteix sobre la data del comitent"
-#: builtin/am.c:2333
+#: builtin/am.c:2319
msgid "use current timestamp for author date"
msgstr "usa el marc de temps actual per la data d'autor"
-#: builtin/am.c:2335 builtin/commit.c:1593 builtin/merge.c:225
-#: builtin/pull.c:155 builtin/revert.c:92 builtin/tag.c:355
+#: builtin/am.c:2321 builtin/commit.c:1593 builtin/merge.c:225
+#: builtin/pull.c:159 builtin/revert.c:92 builtin/tag.c:355
msgid "key-id"
msgstr "ID de clau"
-#: builtin/am.c:2336
+#: builtin/am.c:2322
msgid "GPG-sign commits"
msgstr "firma les comissions amb GPG"
-#: builtin/am.c:2339
+#: builtin/am.c:2325
msgid "(internal use for git-rebase)"
msgstr "(ús intern per al git-rebase)"
-#: builtin/am.c:2354
+#: builtin/am.c:2340
msgid ""
"The -b/--binary option has been a no-op for long time, and\n"
"it will be removed. Please do not use it anymore."
@@ -2737,18 +2884,18 @@ msgstr ""
"Fa molt que l'opció -b/--binary no ha fet res, i\n"
"s'eliminarà. Si us plau, no l'useu més."
-#: builtin/am.c:2361
+#: builtin/am.c:2347
msgid "failed to read the index"
msgstr "s'ha fallat en llegir l'índex"
-#: builtin/am.c:2376
+#: builtin/am.c:2362
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr ""
"un directori de rebasament anterior %s encara existeix però s'ha donat una "
"bústia."
-#: builtin/am.c:2400
+#: builtin/am.c:2386
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -2757,7 +2904,7 @@ msgstr ""
"Directori %s extraviat trobat.\n"
"Useu \"git am --abort\" per a eliminar-lo."
-#: builtin/am.c:2406
+#: builtin/am.c:2392
msgid "Resolve operation not in progress, we are not resuming."
msgstr "Operació de resolució no en curs; no reprenem."
@@ -3108,135 +3255,135 @@ msgstr "entrada no reconeguda"
msgid "unable to read index file"
msgstr "no es pot llegir el fitxer d'índex"
-#: builtin/apply.c:4517
+#: builtin/apply.c:4507
msgid "don't apply changes matching the given path"
msgstr "no apliquis els canvis que coincideixin amb el camí donat"
-#: builtin/apply.c:4520
+#: builtin/apply.c:4510
msgid "apply changes matching the given path"
msgstr "aplica els canvis que coincideixin amb el camí donat"
-#: builtin/apply.c:4523
+#: builtin/apply.c:4513
msgid "remove <num> leading slashes from traditional diff paths"
msgstr ""
"elimina <nombre> barres obliqües inicials dels camins de diferència "
"tradicionals"
-#: builtin/apply.c:4526
+#: builtin/apply.c:4516
msgid "ignore additions made by the patch"
msgstr "ignora afegiments fets pel pedaç"
-#: builtin/apply.c:4528
+#: builtin/apply.c:4518
msgid "instead of applying the patch, output diffstat for the input"
msgstr ""
"en lloc d'aplicar el pedaç, emet les estadístiques de diferència de l'entrada"
-#: builtin/apply.c:4532
+#: builtin/apply.c:4522
msgid "show number of added and deleted lines in decimal notation"
msgstr "mostra el nombre de línies afegides i suprimides en notació decimal"
-#: builtin/apply.c:4534
+#: builtin/apply.c:4524
msgid "instead of applying the patch, output a summary for the input"
msgstr "en lloc d'aplicar el pedaç, emet un resum de l'entrada"
-#: builtin/apply.c:4536
+#: builtin/apply.c:4526
msgid "instead of applying the patch, see if the patch is applicable"
msgstr "en lloc d'aplicar el pedaç, veges si el pedaç és aplicable"
-#: builtin/apply.c:4538
+#: builtin/apply.c:4528
msgid "make sure the patch is applicable to the current index"
msgstr "assegura que el pedaç sigui aplicable a l'índex actual"
-#: builtin/apply.c:4540
+#: builtin/apply.c:4530
msgid "apply a patch without touching the working tree"
msgstr "aplica un pedaç sense tocar l'arbre de treball"
-#: builtin/apply.c:4542
+#: builtin/apply.c:4532
msgid "accept a patch that touches outside the working area"
msgstr "accepta un pedaç que toqui fora de l'àrea de treball"
-#: builtin/apply.c:4544
+#: builtin/apply.c:4534
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr "aplica el pedaç també (useu amb --stat/--summary/--check)"
-#: builtin/apply.c:4546
+#: builtin/apply.c:4536
msgid "attempt three-way merge if a patch does not apply"
msgstr "intenta una fusió de tres vies si el pedaç no s'aplica"
-#: builtin/apply.c:4548
+#: builtin/apply.c:4538
msgid "build a temporary index based on embedded index information"
msgstr "construeix un índex temporal basat en la informació d'índex incrustada"
-#: builtin/apply.c:4550 builtin/checkout-index.c:198 builtin/ls-files.c:412
+#: builtin/apply.c:4541 builtin/checkout-index.c:169 builtin/ls-files.c:425
msgid "paths are separated with NUL character"
msgstr "els camins se separen amb el caràcter NUL"
-#: builtin/apply.c:4553
+#: builtin/apply.c:4543
msgid "ensure at least <n> lines of context match"
msgstr "assegura't que almenys <n> línies de context coincideixin"
-#: builtin/apply.c:4555
+#: builtin/apply.c:4545
msgid "detect new or modified lines that have whitespace errors"
msgstr ""
"detecta les línies noves o modificades que tinguin errors d'espai en blanc"
-#: builtin/apply.c:4558 builtin/apply.c:4561
+#: builtin/apply.c:4548 builtin/apply.c:4551
msgid "ignore changes in whitespace when finding context"
msgstr "ignora els canvis d'espai en blanc en cercar context"
-#: builtin/apply.c:4564
+#: builtin/apply.c:4554
msgid "apply the patch in reverse"
msgstr "aplica el pedaç al revés"
-#: builtin/apply.c:4566
+#: builtin/apply.c:4556
msgid "don't expect at least one line of context"
msgstr "no esperis almenys una línia de context"
-#: builtin/apply.c:4568
+#: builtin/apply.c:4558
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "deixa els trossos rebutjats en fitxers *.reg coresspondents"
-#: builtin/apply.c:4570
+#: builtin/apply.c:4560
msgid "allow overlapping hunks"
msgstr "permet trossos encavalcants"
-#: builtin/apply.c:4573
+#: builtin/apply.c:4563
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "tolera una línia nova incorrectament detectada al final del fitxer"
-#: builtin/apply.c:4576
+#: builtin/apply.c:4566
msgid "do not trust the line counts in the hunk headers"
msgstr "no confiïs en els recomptes de línia en les capçaleres dels trossos"
-#: builtin/apply.c:4579
+#: builtin/apply.c:4569
msgid "prepend <root> to all filenames"
msgstr "anteposa <arrel> a tots els noms de fitxer"
-#: builtin/apply.c:4601
+#: builtin/apply.c:4591
msgid "--3way outside a repository"
msgstr "--3way fora d'un dipòsit"
-#: builtin/apply.c:4609
+#: builtin/apply.c:4599
msgid "--index outside a repository"
msgstr "--index fora d'un dipòsit"
-#: builtin/apply.c:4612
+#: builtin/apply.c:4602
msgid "--cached outside a repository"
msgstr "--cached fora d'un dipòsit"
-#: builtin/apply.c:4631
+#: builtin/apply.c:4621
#, c-format
msgid "can't open patch '%s'"
msgstr "no es pot obrir el pedaç '%s'"
-#: builtin/apply.c:4645
+#: builtin/apply.c:4635
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "%d error d'espai en blanc omès"
msgstr[1] "%d errors d'espai en blanc omesos"
-#: builtin/apply.c:4651 builtin/apply.c:4661
+#: builtin/apply.c:4641 builtin/apply.c:4651
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
@@ -3290,109 +3437,117 @@ msgstr "realitza 'git bisect next'"
msgid "update BISECT_HEAD instead of checking out the current commit"
msgstr "actualitza BISECT_HEAD en lloc d'agafar la comissió actual"
-#: builtin/blame.c:32
+#: builtin/blame.c:33
msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
msgstr "git blame [<opcions>] [<opcions-de-revisió>] [<revisió>] [--] fitxer"
-#: builtin/blame.c:37
+#: builtin/blame.c:38
msgid "<rev-opts> are documented in git-rev-list(1)"
msgstr "es documenten les <opcions-de-revisió> en git-rev-list(1)"
-#: builtin/blame.c:2519
+#: builtin/blame.c:1782
+msgid "Blaming lines"
+msgstr "Culpant les línies"
+
+#: builtin/blame.c:2530
msgid "Show blame entries as we find them, incrementally"
msgstr "Mostra les entrades de culpa mentre les trobem, incrementalment"
-#: builtin/blame.c:2520
+#: builtin/blame.c:2531
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr ""
"Mostra un SHA-1 en blanc per les comissions de frontera (Per defecte: "
"desactivat)"
-#: builtin/blame.c:2521
+#: builtin/blame.c:2532
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr ""
"No tractis les comissions d'arrel com a límits (Per defecte: desactivat)"
-#: builtin/blame.c:2522
+#: builtin/blame.c:2533
msgid "Show work cost statistics"
msgstr "Mostra les estadístiques de preu de treball"
-#: builtin/blame.c:2523
+#: builtin/blame.c:2534
+msgid "Force progress reporting"
+msgstr "Força l'informe de progrés"
+
+#: builtin/blame.c:2535
msgid "Show output score for blame entries"
msgstr "Mostra la puntuació de sortida de les entrades de culpa"
-#: builtin/blame.c:2524
+#: builtin/blame.c:2536
msgid "Show original filename (Default: auto)"
msgstr "Mostra el nom de fitxer original (Per defecte: automàtic)"
-#: builtin/blame.c:2525
+#: builtin/blame.c:2537
msgid "Show original linenumber (Default: off)"
msgstr "Mostra el número de línia original (Per defecte: desactivat)"
-#: builtin/blame.c:2526
+#: builtin/blame.c:2538
msgid "Show in a format designed for machine consumption"
msgstr "Presenta en un format dissenyat per consumpció per màquina"
-#: builtin/blame.c:2527
+#: builtin/blame.c:2539
msgid "Show porcelain format with per-line commit information"
msgstr "Mostra el format de porcellana amb informació de comissió per línia"
-#: builtin/blame.c:2528
+#: builtin/blame.c:2540
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr ""
"Usa el mateix mode de sortida que git-annotate (Per defecte: desactivat)"
-#: builtin/blame.c:2529
+#: builtin/blame.c:2541
msgid "Show raw timestamp (Default: off)"
msgstr "Mostra la marca de temps crua (Per defecte: desactivat)"
-#: builtin/blame.c:2530
+#: builtin/blame.c:2542
msgid "Show long commit SHA1 (Default: off)"
msgstr "Mostra l'SHA1 de comissió llarg (Per defecte: desactivat)"
-#: builtin/blame.c:2531
+#: builtin/blame.c:2543
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Omet el nom d'autor i la marca de temps (Per defecte: desactivat)"
-#: builtin/blame.c:2532
+#: builtin/blame.c:2544
msgid "Show author email instead of name (Default: off)"
msgstr ""
"Mostra l'adreça de correu electrònic de l'autor en lloc del nom (Per "
"defecte: desactivat)"
-#: builtin/blame.c:2533
+#: builtin/blame.c:2545
msgid "Ignore whitespace differences"
msgstr "Ignora les diferències d'espai en blanc"
-#: builtin/blame.c:2534
+#: builtin/blame.c:2546
msgid "Spend extra cycles to find better match"
msgstr "Gasta cicles extres per a trobar una coincidència millor"
-#: builtin/blame.c:2535
+#: builtin/blame.c:2547
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Usa les revisions de <fitxer> en lloc d'invocar git-rev-list"
-#: builtin/blame.c:2536
+#: builtin/blame.c:2548
msgid "Use <file>'s contents as the final image"
msgstr "Usa els continguts de <fitxer> com a la imatge final"
-#: builtin/blame.c:2537 builtin/blame.c:2538
+#: builtin/blame.c:2549 builtin/blame.c:2550
msgid "score"
msgstr "puntuació"
-#: builtin/blame.c:2537
+#: builtin/blame.c:2549
msgid "Find line copies within and across files"
msgstr "Troba còpies de línia dins i a través dels fitxers"
-#: builtin/blame.c:2538
+#: builtin/blame.c:2550
msgid "Find line movements within and across files"
msgstr "Troba moviments de línia dins i a través dels fitxers"
-#: builtin/blame.c:2539
+#: builtin/blame.c:2551
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:2539
+#: builtin/blame.c:2551
msgid "Process only line range n,m, counting from 1"
msgstr "Processa només el rang de línies n,m, comptant des d'1"
@@ -3402,7 +3557,7 @@ msgstr "Processa només el rang de línies n,m, comptant des d'1"
#. takes 22 places, is the longest among various forms of
#. relative timestamps, but your language may need more or
#. fewer display columns.
-#: builtin/blame.c:2620
+#: builtin/blame.c:2640
msgid "4 years, 11 months ago"
msgstr "fa 4 anys i 11 mesos"
@@ -3604,196 +3759,196 @@ msgstr ""
"La branca està canviada de nom, però l'actualització del fitxer de "
"configuració ha fallat"
-#: builtin/branch.c:587
+#: builtin/branch.c:586
#, c-format
msgid "could not write branch description template: %s"
msgstr "no s'ha pogut escriure la plantilla de descripció de branca: %s"
-#: builtin/branch.c:616
+#: builtin/branch.c:615
msgid "Generic options"
msgstr "Opcions genèriques"
-#: builtin/branch.c:618
+#: builtin/branch.c:617
msgid "show hash and subject, give twice for upstream branch"
msgstr "mostra el hash i l'assumpte, doneu dues vegades per la branca font"
-#: builtin/branch.c:619
+#: builtin/branch.c:618
msgid "suppress informational messages"
msgstr "omet els missatges informatius"
-#: builtin/branch.c:620
+#: builtin/branch.c:619
msgid "set up tracking mode (see git-pull(1))"
msgstr "configura el mode de seguiment (vegeu git-pull(1))"
-#: builtin/branch.c:622
+#: builtin/branch.c:621
msgid "change upstream info"
msgstr "canvia la informació de font"
-#: builtin/branch.c:626
+#: builtin/branch.c:625
msgid "use colored output"
msgstr "usa sortida colorada"
-#: builtin/branch.c:627
+#: builtin/branch.c:626
msgid "act on remote-tracking branches"
msgstr "actua en branques amb seguiment remot"
-#: builtin/branch.c:629 builtin/branch.c:630
+#: builtin/branch.c:628 builtin/branch.c:629
msgid "print only branches that contain the commit"
msgstr "imprimeix només les branques que continguin la comissió"
-#: builtin/branch.c:633
+#: builtin/branch.c:632
msgid "Specific git-branch actions:"
msgstr "Accions de git-branch específiques:"
-#: builtin/branch.c:634
+#: builtin/branch.c:633
msgid "list both remote-tracking and local branches"
msgstr "llista les branques amb seguiment remot i les locals"
-#: builtin/branch.c:636
+#: builtin/branch.c:635
msgid "delete fully merged branch"
msgstr "suprimeix la branca si està completament fusionada"
-#: builtin/branch.c:637
+#: builtin/branch.c:636
msgid "delete branch (even if not merged)"
msgstr "suprimeix la branca (encara que no estigui fusionada)"
-#: builtin/branch.c:638
+#: builtin/branch.c:637
msgid "move/rename a branch and its reflog"
msgstr "mou/canvia de nom una branca i el seu registre de referència"
-#: builtin/branch.c:639
+#: builtin/branch.c:638
msgid "move/rename a branch, even if target exists"
msgstr "mou/canvia de nom una branca, encara que el destí existeixi"
-#: builtin/branch.c:640
+#: builtin/branch.c:639
msgid "list branch names"
msgstr "llista els noms de branca"
-#: builtin/branch.c:641
+#: builtin/branch.c:640
msgid "create the branch's reflog"
msgstr "crea el registre de referència de la branca"
-#: builtin/branch.c:643
+#: builtin/branch.c:642
msgid "edit the description for the branch"
msgstr "edita la descripció de la branca"
-#: builtin/branch.c:644
+#: builtin/branch.c:643
msgid "force creation, move/rename, deletion"
msgstr "força creació, moviment/canvi de nom, supressió"
-#: builtin/branch.c:645
+#: builtin/branch.c:644
msgid "print only branches that are merged"
msgstr "imprimeix només les branques que s'han fusionat"
-#: builtin/branch.c:646
+#: builtin/branch.c:645
msgid "print only branches that are not merged"
msgstr "imprimeix només les branques que no s'han fusionat"
-#: builtin/branch.c:647
+#: builtin/branch.c:646
msgid "list branches in columns"
msgstr "llista les branques en columnes"
-#: builtin/branch.c:648 builtin/for-each-ref.c:38 builtin/tag.c:366
+#: builtin/branch.c:647 builtin/for-each-ref.c:38 builtin/tag.c:366
msgid "key"
msgstr "clau"
-#: builtin/branch.c:649 builtin/for-each-ref.c:39 builtin/tag.c:367
+#: builtin/branch.c:648 builtin/for-each-ref.c:39 builtin/tag.c:367
msgid "field name to sort on"
msgstr "nom del camp en el qual ordenar"
-#: builtin/branch.c:651 builtin/for-each-ref.c:41 builtin/notes.c:398
-#: builtin/notes.c:401 builtin/notes.c:561 builtin/notes.c:564
+#: builtin/branch.c:650 builtin/for-each-ref.c:41 builtin/notes.c:401
+#: builtin/notes.c:404 builtin/notes.c:564 builtin/notes.c:567
#: builtin/tag.c:369
msgid "object"
msgstr "objecte"
-#: builtin/branch.c:652
+#: builtin/branch.c:651
msgid "print only branches of the object"
msgstr "imprimeix només les branques de l'objecte"
-#: builtin/branch.c:670
+#: builtin/branch.c:669
msgid "Failed to resolve HEAD as a valid ref."
msgstr "S'ha fallat en resoldre HEAD com a referència vàlida."
-#: builtin/branch.c:674 builtin/clone.c:697
+#: builtin/branch.c:673 builtin/clone.c:705
msgid "HEAD not found below refs/heads!"
msgstr "HEAD no trobat sota refs/heads!"
-#: builtin/branch.c:694
+#: builtin/branch.c:693
msgid "--column and --verbose are incompatible"
msgstr "--column i --verbose són incompatibles"
-#: builtin/branch.c:705 builtin/branch.c:747
+#: builtin/branch.c:704 builtin/branch.c:746
msgid "branch name required"
msgstr "cal el nom de branca"
-#: builtin/branch.c:723
+#: builtin/branch.c:722
msgid "Cannot give description to detached HEAD"
msgstr "No es pot donar descripció a un HEAD separat"
-#: builtin/branch.c:728
+#: builtin/branch.c:727
msgid "cannot edit description of more than one branch"
msgstr "no es pot editar la descripció de més d'una branca"
-#: builtin/branch.c:735
+#: builtin/branch.c:734
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "Encara no hi ha comissió en la branca '%s'."
-#: builtin/branch.c:738
+#: builtin/branch.c:737
#, c-format
msgid "No branch named '%s'."
msgstr "No hi ha branca amb nom '%s'."
-#: builtin/branch.c:753
+#: builtin/branch.c:752
msgid "too many branches for a rename operation"
msgstr "hi ha massa branques per a una operació de canvi de nom"
-#: builtin/branch.c:758
+#: builtin/branch.c:757
msgid "too many branches to set new upstream"
msgstr "hi ha massa branques per a establir una nova font"
-#: builtin/branch.c:762
+#: builtin/branch.c:761
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
msgstr ""
"no s'ha pogut establir la font de HEAD com a %s quan no assenyala cap branca."
-#: builtin/branch.c:765 builtin/branch.c:787 builtin/branch.c:808
+#: builtin/branch.c:764 builtin/branch.c:786 builtin/branch.c:807
#, c-format
msgid "no such branch '%s'"
msgstr "no hi ha tal branca '%s'"
-#: builtin/branch.c:769
+#: builtin/branch.c:768
#, c-format
msgid "branch '%s' does not exist"
msgstr "la branca '%s' no existeix"
-#: builtin/branch.c:781
+#: builtin/branch.c:780
msgid "too many branches to unset upstream"
msgstr "hi ha massa branques per a desestablir la font"
-#: builtin/branch.c:785
+#: builtin/branch.c:784
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"no s'ha pogut desestablir la font de HEAD perquè no assenyala cap branca."
-#: builtin/branch.c:791
+#: builtin/branch.c:790
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "La branca '%s' no té informació de font"
-#: builtin/branch.c:805
+#: builtin/branch.c:804
msgid "it does not make sense to create 'HEAD' manually"
msgstr "no té sentit crear 'HEAD' manualment"
-#: builtin/branch.c:811
+#: builtin/branch.c:810
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr ""
"les opcions -a i -r a 'git branch' no tenen sentit amb un nom de branca"
-#: builtin/branch.c:814
+#: builtin/branch.c:813
#, c-format
msgid ""
"The --set-upstream flag is deprecated and will be removed. Consider using --"
@@ -3802,7 +3957,7 @@ msgstr ""
"La bandera --set-upstream està desaprovada i s'eliminarà. Considereu usar --"
"track o --set-upstream-to\n"
-#: builtin/branch.c:831
+#: builtin/branch.c:830
#, c-format
msgid ""
"\n"
@@ -3813,12 +3968,12 @@ msgstr ""
"Si volíeu fer '%s' seguir '%s', feu això:\n"
"\n"
-#: builtin/branch.c:832
+#: builtin/branch.c:831
#, c-format
msgid " git branch -d %s\n"
msgstr " git branch -d %s\n"
-#: builtin/branch.c:833
+#: builtin/branch.c:832
#, c-format
msgid " git branch --set-upstream-to %s\n"
msgstr " git branch --set-upstream-to %s\n"
@@ -3914,7 +4069,7 @@ msgstr "informa de tots els atributs establerts en el fitxer"
msgid "use .gitattributes only from the index"
msgstr "usa .gitattributes només des de l'índex"
-#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:96
+#: builtin/check-attr.c:21 builtin/check-ignore.c:22 builtin/hash-object.c:97
msgid "read file names from stdin"
msgstr "llegeix els noms de fitxer d'stdin"
@@ -3922,7 +4077,7 @@ msgstr "llegeix els noms de fitxer d'stdin"
msgid "terminate input and output records by a NUL character"
msgstr "acaba els registres d'entrada i de sortida amb un caràcter NUL"
-#: builtin/check-ignore.c:18 builtin/checkout.c:1134 builtin/gc.c:325
+#: builtin/check-ignore.c:18 builtin/checkout.c:1136 builtin/gc.c:325
msgid "suppress progress reporting"
msgstr "omet el reportatge de progrés"
@@ -3975,49 +4130,53 @@ msgstr "no s'ha pogut analitzar el contacte: %s"
msgid "no contacts specified"
msgstr "no hi ha contactes especificats"
-#: builtin/checkout-index.c:126
+#: builtin/checkout-index.c:127
msgid "git checkout-index [<options>] [--] [<file>...]"
msgstr "git checkout-index [<opcions>] [--] [<fitxer>...]"
-#: builtin/checkout-index.c:188
+#: builtin/checkout-index.c:144
+msgid "stage should be between 1 and 3 or all"
+msgstr "l'etapa ha de ser entre 1 i 3 o all"
+
+#: builtin/checkout-index.c:160
msgid "check out all files in the index"
msgstr "agafa tots els fitxers en l'índex"
-#: builtin/checkout-index.c:189
+#: builtin/checkout-index.c:161
msgid "force overwrite of existing files"
msgstr "força la sobreescriptura de fitxers existents"
-#: builtin/checkout-index.c:191
+#: builtin/checkout-index.c:163
msgid "no warning for existing files and files not in index"
msgstr "cap avís per a fitxers existents i fitxers no en l'índex"
-#: builtin/checkout-index.c:193
+#: builtin/checkout-index.c:165
msgid "don't checkout new files"
msgstr "no agafis fitxers nous"
-#: builtin/checkout-index.c:195
+#: builtin/checkout-index.c:167
msgid "update stat information in the index file"
msgstr "actualitza la informació d'estadístiques en el fitxer d'índex"
-#: builtin/checkout-index.c:201
+#: builtin/checkout-index.c:171
msgid "read list of paths from the standard input"
msgstr "llegeix la llista de camins des de l'entrada estàndard"
-#: builtin/checkout-index.c:203
+#: builtin/checkout-index.c:173
msgid "write the content to temporary files"
msgstr "escriu el contingut a fitxers temporals"
-#: builtin/checkout-index.c:204 builtin/column.c:30
+#: builtin/checkout-index.c:174 builtin/column.c:30
+#: builtin/submodule--helper.c:166 builtin/submodule--helper.c:169
#: builtin/submodule--helper.c:172 builtin/submodule--helper.c:175
-#: builtin/submodule--helper.c:178 builtin/submodule--helper.c:181
msgid "string"
msgstr "cadena"
-#: builtin/checkout-index.c:205
+#: builtin/checkout-index.c:175
msgid "when creating files, prepend <string>"
msgstr "en crear fitxers, anteposa <cadena>"
-#: builtin/checkout-index.c:208
+#: builtin/checkout-index.c:177
msgid "copy out the files from named stage"
msgstr "copia els fitxers des de l'etapa anomenada"
@@ -4098,37 +4257,41 @@ msgstr "No es pot fer reflog per a '%s': %s\n"
msgid "HEAD is now at"
msgstr "HEAD ara és a"
-#: builtin/checkout.c:668
+#: builtin/checkout.c:665 builtin/clone.c:659
+msgid "unable to update HEAD"
+msgstr "no s'ha pogut actualitzar HEAD"
+
+#: builtin/checkout.c:669
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Restableix la branca '%s'\n"
-#: builtin/checkout.c:671
+#: builtin/checkout.c:672
#, c-format
msgid "Already on '%s'\n"
msgstr "Ja en '%s'\n"
-#: builtin/checkout.c:675
+#: builtin/checkout.c:676
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "S'ha agafat i restablert la branca '%s'\n"
-#: builtin/checkout.c:677 builtin/checkout.c:1066
+#: builtin/checkout.c:678 builtin/checkout.c:1068
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "S'ha agafat la branca nova '%s'\n"
-#: builtin/checkout.c:679
+#: builtin/checkout.c:680
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "S'ha agafat la branca '%s'\n"
-#: builtin/checkout.c:731
+#: builtin/checkout.c:732
#, c-format
msgid " ... and %d more.\n"
msgstr " ... i %d més.\n"
-#: builtin/checkout.c:737
+#: builtin/checkout.c:738
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -4151,7 +4314,7 @@ msgstr[1] ""
"\n"
"%s\n"
-#: builtin/checkout.c:756
+#: builtin/checkout.c:757
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -4178,150 +4341,150 @@ msgstr[1] ""
" git branch <nom-de-branca-nova> %s\n"
"\n"
-#: builtin/checkout.c:792
+#: builtin/checkout.c:793
msgid "internal error in revision walk"
msgstr "error intern en el passeig per revisions"
-#: builtin/checkout.c:796
+#: builtin/checkout.c:797
msgid "Previous HEAD position was"
msgstr "La posició de HEAD anterior era"
-#: builtin/checkout.c:823 builtin/checkout.c:1061
+#: builtin/checkout.c:824 builtin/checkout.c:1063
msgid "You are on a branch yet to be born"
msgstr "Sou en una branca que encara ha de nàixer"
-#: builtin/checkout.c:968
+#: builtin/checkout.c:969
#, c-format
msgid "only one reference expected, %d given."
msgstr "només una referència esperada, %d donades."
-#: builtin/checkout.c:1007 builtin/worktree.c:213
+#: builtin/checkout.c:1009 builtin/worktree.c:211
#, c-format
msgid "invalid reference: %s"
msgstr "referència no vàlida: %s"
-#: builtin/checkout.c:1036
+#: builtin/checkout.c:1038
#, c-format
msgid "reference is not a tree: %s"
msgstr "la referència no és un arbre: %s"
-#: builtin/checkout.c:1075
+#: builtin/checkout.c:1077
msgid "paths cannot be used with switching branches"
msgstr "els camins no es poden usar amb canvi de branca"
-#: builtin/checkout.c:1078 builtin/checkout.c:1082
+#: builtin/checkout.c:1080 builtin/checkout.c:1084
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "'%s' no es pot usar amb canvi de branca"
-#: builtin/checkout.c:1086 builtin/checkout.c:1089 builtin/checkout.c:1094
-#: builtin/checkout.c:1097
+#: builtin/checkout.c:1088 builtin/checkout.c:1091 builtin/checkout.c:1096
+#: builtin/checkout.c:1099
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "'%s' no es pot usar amb '%s'"
-#: builtin/checkout.c:1102
+#: builtin/checkout.c:1104
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr "No es pot canviar la branca a la no comissió '%s'"
-#: builtin/checkout.c:1135 builtin/checkout.c:1137 builtin/clone.c:83
-#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:320
-#: builtin/worktree.c:322
+#: builtin/checkout.c:1137 builtin/checkout.c:1139 builtin/clone.c:84
+#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:318
+#: builtin/worktree.c:320
msgid "branch"
msgstr "branca"
-#: builtin/checkout.c:1136
+#: builtin/checkout.c:1138
msgid "create and checkout a new branch"
msgstr "crea i agafa una branca nova"
-#: builtin/checkout.c:1138
+#: builtin/checkout.c:1140
msgid "create/reset and checkout a branch"
msgstr "crea/restableix i agafa una branca"
-#: builtin/checkout.c:1139
+#: builtin/checkout.c:1141
msgid "create reflog for new branch"
msgstr "crea un registre de referència per a la branca nova"
-#: builtin/checkout.c:1140
+#: builtin/checkout.c:1142
msgid "detach the HEAD at named commit"
msgstr "separa el HEAD a la comissió anomenada"
-#: builtin/checkout.c:1141
+#: builtin/checkout.c:1143
msgid "set upstream info for new branch"
msgstr "estableix la informació de font de la branca nova"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1145
msgid "new-branch"
msgstr "branca-nova"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1145
msgid "new unparented branch"
msgstr "branca òrfena nova"
-#: builtin/checkout.c:1144
+#: builtin/checkout.c:1146
msgid "checkout our version for unmerged files"
msgstr "agafa la versió nostra dels fitxers sense fusionar"
-#: builtin/checkout.c:1146
+#: builtin/checkout.c:1148
msgid "checkout their version for unmerged files"
msgstr "agafa la versió seva dels fitxers sense fusionar"
-#: builtin/checkout.c:1148
+#: builtin/checkout.c:1150
msgid "force checkout (throw away local modifications)"
msgstr "agafa a la força (descarta qualsevulla modificació local)"
-#: builtin/checkout.c:1149
+#: builtin/checkout.c:1151
msgid "perform a 3-way merge with the new branch"
msgstr "realitza una fusió de 3 vies amb la branca nova"
-#: builtin/checkout.c:1150 builtin/merge.c:227
+#: builtin/checkout.c:1152 builtin/merge.c:227
msgid "update ignored files (default)"
msgstr "actualitza els fitxers ignorats (per defecte)"
-#: builtin/checkout.c:1151 builtin/log.c:1266 parse-options.h:250
+#: builtin/checkout.c:1153 builtin/log.c:1269 parse-options.h:250
msgid "style"
msgstr "estil"
-#: builtin/checkout.c:1152
+#: builtin/checkout.c:1154
msgid "conflict style (merge or diff3)"
msgstr "estil de conflicte (fusió o diff3)"
-#: builtin/checkout.c:1155
+#: builtin/checkout.c:1157
msgid "do not limit pathspecs to sparse entries only"
msgstr "no limitis les especificacions de camí només a entrades disperses"
-#: builtin/checkout.c:1157
+#: builtin/checkout.c:1159
msgid "second guess 'git checkout <no-such-branch>'"
msgstr "dubta 'git checkout <cap-branca-així>'"
-#: builtin/checkout.c:1159
+#: builtin/checkout.c:1161
msgid "do not check if another worktree is holding the given ref"
msgstr "no comprovis si altre arbre de treball té la referència donada"
-#: builtin/checkout.c:1160 builtin/clone.c:57 builtin/fetch.c:112
-#: builtin/merge.c:224 builtin/pull.c:109 builtin/push.c:558
+#: builtin/checkout.c:1162 builtin/clone.c:58 builtin/fetch.c:116
+#: builtin/merge.c:224 builtin/pull.c:113 builtin/push.c:526
#: builtin/send-pack.c:168
msgid "force progress reporting"
msgstr "força l'informe de progrés"
-#: builtin/checkout.c:1191
+#: builtin/checkout.c:1193
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "-b, -B i --orphan són mutualment exclusius"
-#: builtin/checkout.c:1208
+#: builtin/checkout.c:1210
msgid "--track needs a branch name"
msgstr "--track necessita un nom de branca"
-#: builtin/checkout.c:1213
+#: builtin/checkout.c:1215
msgid "Missing branch name; try -b"
msgstr "Manca el nom de branca; proveu -b"
-#: builtin/checkout.c:1249
+#: builtin/checkout.c:1251
msgid "invalid path specification"
msgstr "especificació de camí no vàlida"
-#: builtin/checkout.c:1256
+#: builtin/checkout.c:1258
#, c-format
msgid ""
"Cannot update paths and switch to branch '%s' at the same time.\n"
@@ -4330,12 +4493,12 @@ msgstr ""
"No es poden actualitzar els camins i canviar a la branca '%s' a la vegada.\n"
"Volíeu agafar '%s', la qual no es pot resoldre com a comissió?"
-#: builtin/checkout.c:1261
+#: builtin/checkout.c:1263
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: --detach no accepta un paràmetre de camí '%s'"
-#: builtin/checkout.c:1265
+#: builtin/checkout.c:1267
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -4374,7 +4537,7 @@ msgstr "Saltaria el dipòsit %s\n"
msgid "failed to remove %s"
msgstr "s'ha fallat en eliminar %s"
-#: builtin/clean.c:315
+#: builtin/clean.c:291
msgid ""
"Prompt help:\n"
"1 - select a numbered item\n"
@@ -4386,7 +4549,7 @@ msgstr ""
"foo - selecciona un ítem basat en un prefix únic\n"
" - (buit) no seleccionis res"
-#: builtin/clean.c:319
+#: builtin/clean.c:295
msgid ""
"Prompt help:\n"
"1 - select a single item\n"
@@ -4406,36 +4569,36 @@ msgstr ""
"* - tria tots els ítems\n"
" - (buit) finalitza la selecció"
-#: builtin/clean.c:535
+#: builtin/clean.c:511
#, c-format
msgid "Huh (%s)?"
msgstr "Perdó (%s)?"
-#: builtin/clean.c:677
+#: builtin/clean.c:653
#, c-format
msgid "Input ignore patterns>> "
msgstr "Introduïu els patrons a ignorar>> "
-#: builtin/clean.c:714
+#: builtin/clean.c:690
#, c-format
msgid "WARNING: Cannot find items matched by: %s"
msgstr "AVÍS: No es pot trobar ítems que coincideixin amb: %s"
-#: builtin/clean.c:735
+#: builtin/clean.c:711
msgid "Select items to delete"
msgstr "Selecciona els ítems a suprimir"
#. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:776
+#: builtin/clean.c:752
#, c-format
msgid "Remove %s [y/N]? "
msgstr "Voleu eliminar %s [y/N]? "
-#: builtin/clean.c:801
+#: builtin/clean.c:777
msgid "Bye."
msgstr "Adéu."
-#: builtin/clean.c:809
+#: builtin/clean.c:785
msgid ""
"clean - start cleaning\n"
"filter by pattern - exclude items from deletion\n"
@@ -4453,62 +4616,62 @@ msgstr ""
"help - aquesta pantalla\n"
"? - ajuda de selecció de l'avís"
-#: builtin/clean.c:836
+#: builtin/clean.c:812
msgid "*** Commands ***"
msgstr "*** Ordres ***"
-#: builtin/clean.c:837
+#: builtin/clean.c:813
msgid "What now"
msgstr "I ara què"
-#: builtin/clean.c:845
+#: builtin/clean.c:821
msgid "Would remove the following item:"
msgid_plural "Would remove the following items:"
msgstr[0] "Eliminaria l'ítem següent:"
msgstr[1] "Eliminaria els ítems següents:"
-#: builtin/clean.c:862
+#: builtin/clean.c:838
msgid "No more files to clean, exiting."
msgstr "No hi ha més fitxers a netejar; sortint."
-#: builtin/clean.c:893
+#: builtin/clean.c:869
msgid "do not print names of files removed"
msgstr "no imprimeixis els noms dels fitxers eliminats"
-#: builtin/clean.c:895
+#: builtin/clean.c:871
msgid "force"
msgstr "força"
-#: builtin/clean.c:896
+#: builtin/clean.c:872
msgid "interactive cleaning"
msgstr "neteja interactiva"
-#: builtin/clean.c:898
+#: builtin/clean.c:874
msgid "remove whole directories"
msgstr "elimina directoris sencers"
-#: builtin/clean.c:899 builtin/describe.c:407 builtin/grep.c:709
-#: builtin/ls-files.c:443 builtin/name-rev.c:307 builtin/show-ref.c:182
+#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:722
+#: builtin/ls-files.c:456 builtin/name-rev.c:307 builtin/show-ref.c:182
msgid "pattern"
msgstr "patró"
-#: builtin/clean.c:900
+#: builtin/clean.c:876
msgid "add <pattern> to ignore rules"
msgstr "afegiu <patró> per a ignorar les regles"
-#: builtin/clean.c:901
+#: builtin/clean.c:877
msgid "remove ignored files, too"
msgstr "elimina els fitxers ignorats, també"
-#: builtin/clean.c:903
+#: builtin/clean.c:879
msgid "remove only ignored files"
msgstr "elimina només els fitxers ignorats"
-#: builtin/clean.c:921
+#: builtin/clean.c:897
msgid "-x and -X cannot be used together"
msgstr "-x i -X no es poden usar junts"
-#: builtin/clean.c:925
+#: builtin/clean.c:901
msgid ""
"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
"clean"
@@ -4516,7 +4679,7 @@ msgstr ""
"clean.requireForce està establerta a veritat i ni -i, -n ni -f s'ha donat; "
"refusant netejar"
-#: builtin/clean.c:928
+#: builtin/clean.c:904
msgid ""
"clean.requireForce defaults to true and neither -i, -n, nor -f given; "
"refusing to clean"
@@ -4528,146 +4691,162 @@ msgstr ""
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [<opcions>] [--] <dipòsit> [<directori>]"
-#: builtin/clone.c:59
+#: builtin/clone.c:60
msgid "don't create a checkout"
msgstr "no facis cap agafament"
-#: builtin/clone.c:60 builtin/clone.c:62 builtin/init-db.c:469
+#: builtin/clone.c:61 builtin/clone.c:63 builtin/init-db.c:469
msgid "create a bare repository"
msgstr "crea un dipòsit nu"
-#: builtin/clone.c:64
+#: builtin/clone.c:65
msgid "create a mirror repository (implies bare)"
msgstr "crea un dipòsit reflectit (implica bare)"
-#: builtin/clone.c:66
+#: builtin/clone.c:67
msgid "to clone from a local repository"
msgstr "per a clonar des d'un dipòsit local"
-#: builtin/clone.c:68
+#: builtin/clone.c:69
msgid "don't use local hardlinks, always copy"
msgstr "no usis enllaços durs locals, sempre copia"
-#: builtin/clone.c:70
+#: builtin/clone.c:71
msgid "setup as shared repository"
msgstr "configura com a dipòsit compartit"
-#: builtin/clone.c:72 builtin/clone.c:74
+#: builtin/clone.c:73 builtin/clone.c:75
msgid "initialize submodules in the clone"
msgstr "inicialitza els submòduls en el clon"
-#: builtin/clone.c:75 builtin/init-db.c:466
+#: builtin/clone.c:76 builtin/init-db.c:466
msgid "template-directory"
msgstr "directori-de-plantilla"
-#: builtin/clone.c:76 builtin/init-db.c:467
+#: builtin/clone.c:77 builtin/init-db.c:467
msgid "directory from which templates will be used"
msgstr "directori del qual les plantilles s'usaran"
-#: builtin/clone.c:78 builtin/submodule--helper.c:179
+#: builtin/clone.c:79 builtin/submodule--helper.c:173
msgid "reference repository"
msgstr "dipòsit de referència"
-#: builtin/clone.c:80
+#: builtin/clone.c:81
msgid "use --reference only while cloning"
msgstr "usa --reference només en clonar"
-#: builtin/clone.c:81 builtin/column.c:26 builtin/merge-file.c:44
+#: builtin/clone.c:82 builtin/column.c:26 builtin/merge-file.c:44
msgid "name"
msgstr "nom"
-#: builtin/clone.c:82
+#: builtin/clone.c:83
msgid "use <name> instead of 'origin' to track upstream"
msgstr "usa <nom> en lloc de 'origin' per a seguir la font"
-#: builtin/clone.c:84
+#: builtin/clone.c:85
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "agafa <branca> en lloc del HEAD del remot"
-#: builtin/clone.c:86
+#: builtin/clone.c:87
msgid "path to git-upload-pack on the remote"
msgstr "camí a git-upload-pack en el remot"
-#: builtin/clone.c:87 builtin/fetch.c:113 builtin/grep.c:654 builtin/pull.c:186
+#: builtin/clone.c:88 builtin/fetch.c:117 builtin/grep.c:665 builtin/pull.c:193
msgid "depth"
msgstr "profunditat"
-#: builtin/clone.c:88
+#: builtin/clone.c:89
msgid "create a shallow clone of that depth"
msgstr "crea un clon superficial de tal profunditat"
-#: builtin/clone.c:90
+#: builtin/clone.c:91
msgid "clone only one branch, HEAD or --branch"
msgstr "clona només una branca, HEAD o --branch"
-#: builtin/clone.c:91 builtin/init-db.c:475
+#: builtin/clone.c:92 builtin/init-db.c:475
msgid "gitdir"
msgstr "directori de git"
-#: builtin/clone.c:92 builtin/init-db.c:476
+#: builtin/clone.c:93 builtin/init-db.c:476
msgid "separate git dir from working tree"
msgstr "separa el directori de git de l'arbre de treball"
-#: builtin/clone.c:93
+#: builtin/clone.c:94
msgid "key=value"
msgstr "clau=valor"
-#: builtin/clone.c:94
+#: builtin/clone.c:95
msgid "set config inside the new repository"
msgstr "estableix la configuració dins del dipòsit nou"
-#: builtin/clone.c:300
+#: builtin/clone.c:96 builtin/fetch.c:131 builtin/push.c:536
+msgid "use IPv4 addresses only"
+msgstr "usa només les adreces IPv4"
+
+#: builtin/clone.c:98 builtin/fetch.c:133 builtin/push.c:538
+msgid "use IPv6 addresses only"
+msgstr "usa només les adreces IPv6"
+
+#: builtin/clone.c:239
+msgid ""
+"No directory name could be guessed.\n"
+"Please specify a directory on the command line"
+msgstr ""
+"No s'ha pogut endevinar cap nom de directori.\n"
+"Si us plau, especifiqueu un directori en la línia d'ordres"
+
+#: builtin/clone.c:305
#, c-format
msgid "reference repository '%s' as a linked checkout is not supported yet."
msgstr ""
"Encara no se suporta el dipòsit de referència '%s' com a agafament enllaçat."
-#: builtin/clone.c:302
+#: builtin/clone.c:307
#, c-format
msgid "reference repository '%s' is not a local repository."
msgstr "el dipòsit de referència '%s' no és un dipòsit local."
-#: builtin/clone.c:307
+#: builtin/clone.c:312
#, c-format
msgid "reference repository '%s' is shallow"
msgstr "el dipòsit de referència '%s' és superficial"
-#: builtin/clone.c:310
+#: builtin/clone.c:315
#, c-format
msgid "reference repository '%s' is grafted"
msgstr "el dipòsit de referència '%s' és empeltat"
-#: builtin/clone.c:375 builtin/diff.c:84
+#: builtin/clone.c:380 builtin/diff.c:84
#, c-format
msgid "failed to stat '%s'"
msgstr "s'ha fallat en fer stat a '%s'"
-#: builtin/clone.c:377
+#: builtin/clone.c:382
#, c-format
msgid "%s exists and is not a directory"
msgstr "%s existeix i no és directori"
-#: builtin/clone.c:391
+#: builtin/clone.c:396
#, c-format
msgid "failed to stat %s\n"
msgstr "s'ha fallat en fer stat a '%s'\n"
-#: builtin/clone.c:413
+#: builtin/clone.c:418
#, c-format
msgid "failed to create link '%s'"
msgstr "s'ha fallat en crear l'enllaç '%s'"
-#: builtin/clone.c:417
+#: builtin/clone.c:422
#, c-format
msgid "failed to copy file to '%s'"
msgstr "s'ha fallat en copiar el fitxer a '%s'"
-#: builtin/clone.c:442 builtin/clone.c:626
+#: builtin/clone.c:447 builtin/clone.c:631
#, c-format
msgid "done.\n"
msgstr "fet.\n"
-#: builtin/clone.c:454
+#: builtin/clone.c:459
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -4678,119 +4857,128 @@ msgstr ""
"'git status' i tornar a intentar l'agafament amb\n"
"'git checkout -f HEAD'\n"
-#: builtin/clone.c:531
+#: builtin/clone.c:536
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr "No s'ha pogut trobar la branca remota %s per a clonar."
-#: builtin/clone.c:621
+#: builtin/clone.c:626
#, c-format
msgid "Checking connectivity... "
msgstr "Provant connectivitat... "
-#: builtin/clone.c:624
+#: builtin/clone.c:629
msgid "remote did not send all necessary objects"
msgstr "el remot no ha enviat tots els objectes necessaris"
-#: builtin/clone.c:688
+#: builtin/clone.c:647
+#, c-format
+msgid "unable to update %s"
+msgstr "no s'ha pogut actualizar %s"
+
+#: builtin/clone.c:696
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"el HEAD remot es refereix a una referència que no existeix; no s'ha pogut "
"agafar.\n"
-#: builtin/clone.c:719
+#: builtin/clone.c:727
msgid "unable to checkout working tree"
msgstr "no s'ha pogut agafar l'arbre de treball"
-#: builtin/clone.c:808
+#: builtin/clone.c:753
+msgid "unable to write parameters to config file"
+msgstr "no s'ha pogut escriure les paràmetres al fitxer de configuració"
+
+#: builtin/clone.c:816
msgid "cannot repack to clean up"
msgstr "no es pot reempaquetar per a netejar"
-#: builtin/clone.c:810
+#: builtin/clone.c:818
msgid "cannot unlink temporary alternates file"
msgstr "no es pot desenllaçar el fitxer d'alternatives temporal"
-#: builtin/clone.c:842
+#: builtin/clone.c:850
msgid "Too many arguments."
msgstr "Hi ha massa paràmetres."
-#: builtin/clone.c:846
+#: builtin/clone.c:854
msgid "You must specify a repository to clone."
msgstr "Heu d'especificar un dipòsit per a clonar."
-#: builtin/clone.c:857
+#: builtin/clone.c:865
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "les opcions --bare i --origin %s són incompatibles."
-#: builtin/clone.c:860
+#: builtin/clone.c:868
msgid "--bare and --separate-git-dir are incompatible."
msgstr "--bare i --separate-git-dir són incompatibles."
-#: builtin/clone.c:873
+#: builtin/clone.c:881
#, c-format
msgid "repository '%s' does not exist"
msgstr "el dipòsit '%s' no existeix"
-#: builtin/clone.c:879 builtin/fetch.c:1166
+#: builtin/clone.c:887 builtin/fetch.c:1174
#, c-format
msgid "depth %s is not a positive number"
msgstr "la profunditat %s no és nombre positiu"
-#: builtin/clone.c:889
+#: builtin/clone.c:897
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "el camí destí '%s' ja existeix i no és un directori buit."
-#: builtin/clone.c:899
+#: builtin/clone.c:907
#, c-format
msgid "working tree '%s' already exists."
msgstr "l'arbre de treball '%s' ja existeix."
-#: builtin/clone.c:914 builtin/clone.c:925 builtin/submodule--helper.c:224
-#: builtin/worktree.c:221 builtin/worktree.c:248
+#: builtin/clone.c:922 builtin/clone.c:933 builtin/submodule--helper.c:218
+#: builtin/worktree.c:219 builtin/worktree.c:246
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "no s'ha pogut crear els directoris inicials de '%s'"
-#: builtin/clone.c:917
+#: builtin/clone.c:925
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "no s'ha pogut crear el directori d'arbre de treball '%s'"
-#: builtin/clone.c:935
+#: builtin/clone.c:943
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Clonant al dipòsit nu '%s'...\n"
-#: builtin/clone.c:937
+#: builtin/clone.c:945
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Clonant a '%s'...\n"
-#: builtin/clone.c:975
+#: builtin/clone.c:984
msgid "--depth is ignored in local clones; use file:// instead."
msgstr "--depth s'ignora en els clons locals; useu file:// en lloc d'això."
-#: builtin/clone.c:978
+#: builtin/clone.c:987
msgid "source repository is shallow, ignoring --local"
msgstr "el dipòsit font és superficial, ignorant --local"
-#: builtin/clone.c:983
+#: builtin/clone.c:992
msgid "--local is ignored"
msgstr "--local s'ignora"
-#: builtin/clone.c:987
+#: builtin/clone.c:996
#, c-format
msgid "Don't know how to clone %s"
msgstr "No se sap com clonar %s"
-#: builtin/clone.c:1036 builtin/clone.c:1044
+#: builtin/clone.c:1045 builtin/clone.c:1053
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "La branca remota %s no es troba en la font %s"
-#: builtin/clone.c:1047
+#: builtin/clone.c:1056
msgid "You appear to have cloned an empty repository."
msgstr "Sembla que heu clonat un dipòsit buit."
@@ -5004,7 +5192,7 @@ msgstr ""
msgid "could not lookup commit %s"
msgstr "no s'ha pogut trobar la comissió %s"
-#: builtin/commit.c:702 builtin/shortlog.c:273
+#: builtin/commit.c:702 builtin/shortlog.c:285
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(llegint el missatge de registre des de l'entrada estàndard)\n"
@@ -5191,8 +5379,8 @@ msgstr "mostra l'estat concisament"
msgid "show branch information"
msgstr "mostra la informació de branca"
-#: builtin/commit.c:1328 builtin/commit.c:1609 builtin/push.c:544
-#: builtin/worktree.c:423
+#: builtin/commit.c:1328 builtin/commit.c:1609 builtin/push.c:512
+#: builtin/worktree.c:430
msgid "machine-readable output"
msgstr "sortida llegible per màquina"
@@ -5283,8 +5471,8 @@ msgstr "data"
msgid "override date for commit"
msgstr "data corregida de la comissió"
-#: builtin/commit.c:1582 builtin/merge.c:218 builtin/notes.c:392
-#: builtin/notes.c:555 builtin/tag.c:349
+#: builtin/commit.c:1582 builtin/merge.c:218 builtin/notes.c:395
+#: builtin/notes.c:558 builtin/tag.c:349
msgid "message"
msgstr "missatge"
@@ -5321,7 +5509,7 @@ msgstr ""
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr "l'autor de la comissió ja sóc jo (s'usa amb -C/-c/--amend)"
-#: builtin/commit.c:1588 builtin/log.c:1216 builtin/revert.c:86
+#: builtin/commit.c:1588 builtin/log.c:1219 builtin/revert.c:86
msgid "add Signed-off-by:"
msgstr "afegeix Signed-off-by:"
@@ -5345,7 +5533,7 @@ msgstr "com despullar els espais i #comentaris del missatge"
msgid "include status in commit message template"
msgstr "inclou l'estat en la plantilla de missatge de comissió"
-#: builtin/commit.c:1594 builtin/merge.c:226 builtin/pull.c:156
+#: builtin/commit.c:1594 builtin/merge.c:226 builtin/pull.c:160
#: builtin/revert.c:93
msgid "GPG sign commit"
msgstr "firma la comissió amb GPG"
@@ -5437,140 +5625,146 @@ msgstr ""
"que la quota no estigui excedida, i després\n"
"\"git reset HEAD\" per a recuperar."
-#: builtin/config.c:8
+#: builtin/config.c:9
msgid "git config [<options>]"
msgstr "git config [<opcions>]"
-#: builtin/config.c:54
+#: builtin/config.c:56
msgid "Config file location"
msgstr "Ubicació del fitxer de configuració"
-#: builtin/config.c:55
+#: builtin/config.c:57
msgid "use global config file"
msgstr "usa el fitxer de configuració global"
-#: builtin/config.c:56
+#: builtin/config.c:58
msgid "use system config file"
msgstr "usa el fitxer de configuració del sistema"
-#: builtin/config.c:57
+#: builtin/config.c:59
msgid "use repository config file"
msgstr "usa el fitxer de configuració del dipòsit"
-#: builtin/config.c:58
+#: builtin/config.c:60
msgid "use given config file"
msgstr "usa el fitxer de configuració donat"
-#: builtin/config.c:59
+#: builtin/config.c:61
msgid "blob-id"
msgstr "ID de blob"
-#: builtin/config.c:59
+#: builtin/config.c:61
msgid "read config from given blob object"
msgstr "llegeix la configuració de l'objecte de blob donat"
-#: builtin/config.c:60
+#: builtin/config.c:62
msgid "Action"
msgstr "Acció"
-#: builtin/config.c:61
+#: builtin/config.c:63
msgid "get value: name [value-regex]"
msgstr "obtén valor: nom [regex-de-valors]"
-#: builtin/config.c:62
+#: builtin/config.c:64
msgid "get all values: key [value-regex]"
msgstr "obtén tots els valors: clau [regex-de-valors]"
-#: builtin/config.c:63
+#: builtin/config.c:65
msgid "get values for regexp: name-regex [value-regex]"
msgstr "obtén valors de regexp: regex-de-noms [regex-de-valors]"
-#: builtin/config.c:64
+#: builtin/config.c:66
msgid "get value specific for the URL: section[.var] URL"
msgstr "obtén el valor específic per a l'URL: secció[.variable] URL"
-#: builtin/config.c:65
+#: builtin/config.c:67
msgid "replace all matching variables: name value [value_regex]"
msgstr ""
"reemplaça totes les variables que coincideixen: nom valor [regex_de_valors]"
-#: builtin/config.c:66
+#: builtin/config.c:68
msgid "add a new variable: name value"
msgstr "afegeix una variable nova: nom valor"
-#: builtin/config.c:67
+#: builtin/config.c:69
msgid "remove a variable: name [value-regex]"
msgstr "elimina una variable: nom [regex-de-valors]"
-#: builtin/config.c:68
+#: builtin/config.c:70
msgid "remove all matches: name [value-regex]"
msgstr "elimina totes les coincidències: nom [regex-de-valors]"
-#: builtin/config.c:69
+#: builtin/config.c:71
msgid "rename section: old-name new-name"
msgstr "canvia el nom de secció: nom-antic nom-nou"
-#: builtin/config.c:70
+#: builtin/config.c:72
msgid "remove a section: name"
msgstr "elimina una secció: nom"
-#: builtin/config.c:71
+#: builtin/config.c:73
msgid "list all"
msgstr "llista tots"
-#: builtin/config.c:72
+#: builtin/config.c:74
msgid "open an editor"
msgstr "obre un editor"
-#: builtin/config.c:73
+#: builtin/config.c:75
msgid "find the color configured: slot [default]"
msgstr "troba el color configurat: ranura [per defecte]"
-#: builtin/config.c:74
+#: builtin/config.c:76
msgid "find the color setting: slot [stdout-is-tty]"
msgstr "troba l'ajust de color: ranura [stdout-és-tty]"
-#: builtin/config.c:75
+#: builtin/config.c:77
msgid "Type"
msgstr "Tipus"
-#: builtin/config.c:76
+#: builtin/config.c:78
msgid "value is \"true\" or \"false\""
msgstr "el valor és \"true\" o \"false\""
-#: builtin/config.c:77
+#: builtin/config.c:79
msgid "value is decimal number"
msgstr "el valor és un nombre decimal"
-#: builtin/config.c:78
+#: builtin/config.c:80
msgid "value is --bool or --int"
msgstr "el valor és --bool o --int"
-#: builtin/config.c:79
+#: builtin/config.c:81
msgid "value is a path (file or directory name)"
msgstr "el valor és un camí (nom de fitxer o directori)"
-#: builtin/config.c:80
+#: builtin/config.c:82
msgid "Other"
msgstr "Altre"
-#: builtin/config.c:81
+#: builtin/config.c:83
msgid "terminate values with NUL byte"
msgstr "acaba els valors amb un octet NUL"
-#: builtin/config.c:82
+#: builtin/config.c:84
msgid "show variable names only"
msgstr "mostra només els noms de variable"
-#: builtin/config.c:83
+#: builtin/config.c:85
msgid "respect include directives on lookup"
msgstr "respecta les directives d'inclusió en cercar"
-#: builtin/config.c:303
+#: builtin/config.c:86
+msgid "show origin of config (file, standard input, blob, command line)"
+msgstr ""
+"mostra l'origen de la configuració (fitxer, entrada estàndar, blob, línia "
+"d'ordres)"
+
+#: builtin/config.c:328
msgid "unable to parse default color value"
msgstr "no s'ha pogut analitzar el valor de color per defecte"
-#: builtin/config.c:441
+#: builtin/config.c:469
#, c-format
msgid ""
"# This is Git's per-user configuration file.\n"
@@ -5585,7 +5779,7 @@ msgstr ""
"#\tname = %s\n"
"#\temail = %s\n"
-#: builtin/config.c:575
+#: builtin/config.c:611
#, c-format
msgid "cannot create configuration file %s"
msgstr "no es pot crear el fitxer de configuració '%s'"
@@ -5835,162 +6029,166 @@ msgstr "git fetch --multiple [<opcions>] [(<dipòsit> | <grup>)...]"
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [<opcions>]"
-#: builtin/fetch.c:90 builtin/pull.c:162
+#: builtin/fetch.c:92 builtin/pull.c:166
msgid "fetch from all remotes"
msgstr "obtén de tots els remots"
-#: builtin/fetch.c:92 builtin/pull.c:165
+#: builtin/fetch.c:94 builtin/pull.c:169
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "annexa a .git/FETCH_HEAD en lloc de sobreescriure"
-#: builtin/fetch.c:94 builtin/pull.c:168
+#: builtin/fetch.c:96 builtin/pull.c:172
msgid "path to upload pack on remote end"
msgstr "camí al qual pujar el paquet al costat remot"
-#: builtin/fetch.c:95 builtin/pull.c:170
+#: builtin/fetch.c:97 builtin/pull.c:174
msgid "force overwrite of local branch"
msgstr "força la sobreescriptura de la branca local"
-#: builtin/fetch.c:97
+#: builtin/fetch.c:99
msgid "fetch from multiple remotes"
msgstr "obtén de múltiples remots"
-#: builtin/fetch.c:99 builtin/pull.c:172
+#: builtin/fetch.c:101 builtin/pull.c:176
msgid "fetch all tags and associated objects"
msgstr "obtén totes les etiquetes i tots els objectes associats"
-#: builtin/fetch.c:101
+#: builtin/fetch.c:103
msgid "do not fetch all tags (--no-tags)"
msgstr "no obtinguis les etiquetes (--no-tags)"
-#: builtin/fetch.c:103 builtin/pull.c:175
+#: builtin/fetch.c:105
+msgid "number of submodules fetched in parallel"
+msgstr "nombre de submòduls obtinguts en paral·lel"
+
+#: builtin/fetch.c:107 builtin/pull.c:179
msgid "prune remote-tracking branches no longer on remote"
msgstr "poda les branques amb seguiment remot que ja no estiguin en el remot"
-#: builtin/fetch.c:104 builtin/pull.c:178
+#: builtin/fetch.c:108 builtin/pull.c:182
msgid "on-demand"
msgstr "sota demanda"
-#: builtin/fetch.c:105 builtin/pull.c:179
+#: builtin/fetch.c:109 builtin/pull.c:183
msgid "control recursive fetching of submodules"
msgstr "controla l'obtenció recursiva de submòduls"
-#: builtin/fetch.c:109 builtin/pull.c:184
+#: builtin/fetch.c:113 builtin/pull.c:191
msgid "keep downloaded pack"
msgstr "retén el paquet baixat"
-#: builtin/fetch.c:111
+#: builtin/fetch.c:115
msgid "allow updating of HEAD ref"
msgstr "permet l'actualització de la referència HEAD"
-#: builtin/fetch.c:114 builtin/pull.c:187
+#: builtin/fetch.c:118 builtin/pull.c:194
msgid "deepen history of shallow clone"
msgstr "aprofundeix la història d'un clon superficial"
-#: builtin/fetch.c:116 builtin/pull.c:190
+#: builtin/fetch.c:120 builtin/pull.c:197
msgid "convert to a complete repository"
msgstr "converteix en un dipòsit complet"
-#: builtin/fetch.c:118 builtin/log.c:1233
+#: builtin/fetch.c:122 builtin/log.c:1236
msgid "dir"
msgstr "directori"
-#: builtin/fetch.c:119
+#: builtin/fetch.c:123
msgid "prepend this to submodule path output"
msgstr "anteposa això a la sortida de camí del submòdul"
-#: builtin/fetch.c:122
+#: builtin/fetch.c:126
msgid "default mode for recursion"
msgstr "mode de recursivitat per defecte"
-#: builtin/fetch.c:124 builtin/pull.c:193
+#: builtin/fetch.c:128 builtin/pull.c:200
msgid "accept refs that update .git/shallow"
msgstr "accepta les referències que actualitzin .git/shallow"
-#: builtin/fetch.c:125 builtin/pull.c:195
+#: builtin/fetch.c:129 builtin/pull.c:202
msgid "refmap"
msgstr "mapa de referències"
-#: builtin/fetch.c:126 builtin/pull.c:196
+#: builtin/fetch.c:130 builtin/pull.c:203
msgid "specify fetch refmap"
msgstr "mostra el mapa de referències d'obtenció"
-#: builtin/fetch.c:378
+#: builtin/fetch.c:386
msgid "Couldn't find remote ref HEAD"
msgstr "No s'ha pogut trobar la referència HEAD remota"
-#: builtin/fetch.c:458
+#: builtin/fetch.c:466
#, c-format
msgid "object %s not found"
msgstr "objecte %s no trobat"
-#: builtin/fetch.c:463
+#: builtin/fetch.c:471
msgid "[up to date]"
msgstr "[al dia]"
-#: builtin/fetch.c:477
+#: builtin/fetch.c:485
#, c-format
msgid "! %-*s %-*s -> %s (can't fetch in current branch)"
msgstr "! %-*s %-*s -> %s (no es pot obtenir en la branca actual)"
-#: builtin/fetch.c:478 builtin/fetch.c:566
+#: builtin/fetch.c:486 builtin/fetch.c:574
msgid "[rejected]"
msgstr "[rebutjat]"
-#: builtin/fetch.c:489
+#: builtin/fetch.c:497
msgid "[tag update]"
msgstr "[actualització d'etiqueta]"
-#: builtin/fetch.c:491 builtin/fetch.c:526 builtin/fetch.c:544
+#: builtin/fetch.c:499 builtin/fetch.c:534 builtin/fetch.c:552
msgid " (unable to update local ref)"
msgstr " (no s'ha pogut actualitzar la referència local)"
-#: builtin/fetch.c:509
+#: builtin/fetch.c:517
msgid "[new tag]"
msgstr "[etiqueta nova]"
-#: builtin/fetch.c:512
+#: builtin/fetch.c:520
msgid "[new branch]"
msgstr "[branca nova]"
-#: builtin/fetch.c:515
+#: builtin/fetch.c:523
msgid "[new ref]"
msgstr "[referència nova]"
-#: builtin/fetch.c:561
+#: builtin/fetch.c:569
msgid "unable to update local ref"
msgstr "no s'ha pogut actualitzar la referència local"
-#: builtin/fetch.c:561
+#: builtin/fetch.c:569
msgid "forced update"
msgstr "actualització forçada"
-#: builtin/fetch.c:568
+#: builtin/fetch.c:576
msgid "(non-fast-forward)"
msgstr "(sense avanç ràpid)"
-#: builtin/fetch.c:602 builtin/fetch.c:843
+#: builtin/fetch.c:610 builtin/fetch.c:851
#, c-format
msgid "cannot open %s: %s\n"
msgstr "no es pot obrir %s: %s\n"
-#: builtin/fetch.c:611
+#: builtin/fetch.c:619
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "%s no ha enviat tots els objectes necessaris\n"
-#: builtin/fetch.c:629
+#: builtin/fetch.c:637
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
"rebutja %s perquè no es permet que les arrels superficials s'actualitzin"
-#: builtin/fetch.c:716 builtin/fetch.c:808
+#: builtin/fetch.c:724 builtin/fetch.c:816
#, c-format
msgid "From %.*s\n"
msgstr "De %.*s\n"
-#: builtin/fetch.c:727
+#: builtin/fetch.c:735
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -6000,55 +6198,55 @@ msgstr ""
" intenteu executar 'git remote prune %s' per a eliminar\n"
" qualsevulla branca antiga o conflictiva"
-#: builtin/fetch.c:779
+#: builtin/fetch.c:787
#, c-format
msgid " (%s will become dangling)"
msgstr " (%s es tornarà penjant)"
-#: builtin/fetch.c:780
+#: builtin/fetch.c:788
#, c-format
msgid " (%s has become dangling)"
msgstr " (%s s'ha tornat penjant)"
-#: builtin/fetch.c:812
+#: builtin/fetch.c:820
msgid "[deleted]"
msgstr "[suprimit]"
-#: builtin/fetch.c:813 builtin/remote.c:1040
+#: builtin/fetch.c:821 builtin/remote.c:1025
msgid "(none)"
msgstr "(cap)"
-#: builtin/fetch.c:833
+#: builtin/fetch.c:841
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Refusant obtenir en la branca actual %s d'un dipòsit no nu"
-#: builtin/fetch.c:852
+#: builtin/fetch.c:860
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "L'opció \"%s\" amb valor \"%s\" no és vàlida per a %s"
-#: builtin/fetch.c:855
+#: builtin/fetch.c:863
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "S'ignora l'opció \"%s\" per a %s\n"
-#: builtin/fetch.c:911
+#: builtin/fetch.c:920
#, c-format
msgid "Don't know how to fetch from %s"
msgstr "No se sap com obtenir de %s"
-#: builtin/fetch.c:1072
+#: builtin/fetch.c:1080
#, c-format
msgid "Fetching %s\n"
msgstr "Obtenint %s\n"
-#: builtin/fetch.c:1074 builtin/remote.c:96
+#: builtin/fetch.c:1082 builtin/remote.c:96
#, c-format
msgid "Could not fetch %s"
msgstr "No s'ha pogut obtenir %s"
-#: builtin/fetch.c:1092
+#: builtin/fetch.c:1100
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -6056,32 +6254,32 @@ msgstr ""
"Cap dipòsit remot especificat. Si us plau, especifiqueu o un URL o\n"
"un nom remot del qual es deuen obtenir les revisions noves."
-#: builtin/fetch.c:1115
+#: builtin/fetch.c:1123
msgid "You need to specify a tag name."
msgstr "Necessiteu especificar un nom d'etiqueta."
-#: builtin/fetch.c:1157
+#: builtin/fetch.c:1165
msgid "--depth and --unshallow cannot be used together"
msgstr "--depth i --unshallow no es poden usar junts"
-#: builtin/fetch.c:1159
+#: builtin/fetch.c:1167
msgid "--unshallow on a complete repository does not make sense"
msgstr "--unshallow en un dipòsit complet no té sentit"
-#: builtin/fetch.c:1179
+#: builtin/fetch.c:1187
msgid "fetch --all does not take a repository argument"
msgstr "fetch --all no accepta un paràmetre de dipòsit"
-#: builtin/fetch.c:1181
+#: builtin/fetch.c:1189
msgid "fetch --all does not make sense with refspecs"
msgstr "fetch --all no té sentit amb especificacions de referència"
-#: builtin/fetch.c:1192
+#: builtin/fetch.c:1200
#, c-format
msgid "No such remote or remote group: %s"
msgstr "No hi ha tal remot ni tal grup remot: %s"
-#: builtin/fetch.c:1200
+#: builtin/fetch.c:1208
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Obtenir un grup i especificar referències no té sentit"
@@ -6308,228 +6506,242 @@ msgstr ""
msgid "git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"
msgstr "git grep [<opcions>] [-e] <patró> [<revisió>...] [[--] <camí>...]"
-#: builtin/grep.c:218
+#: builtin/grep.c:219
#, c-format
msgid "grep: failed to create thread: %s"
msgstr "grep: s'ha fallat en crear fil: %s"
-#: builtin/grep.c:441 builtin/grep.c:476
+#: builtin/grep.c:277
+#, c-format
+msgid "invalid number of threads specified (%d) for %s"
+msgstr "s'ha especificat un nombre de fils no vàlid (%d) per a %s"
+
+#: builtin/grep.c:452 builtin/grep.c:487
#, c-format
msgid "unable to read tree (%s)"
msgstr "no s'ha pogut llegir l'arbre (%s)"
-#: builtin/grep.c:491
+#: builtin/grep.c:502
#, c-format
msgid "unable to grep from object of type %s"
msgstr "no es pot fer grep des d'un objecte de tipus %s"
-#: builtin/grep.c:547
+#: builtin/grep.c:558
#, c-format
msgid "switch `%c' expects a numerical value"
msgstr "l'opció `%c' espera un valor numèric"
-#: builtin/grep.c:564
+#: builtin/grep.c:575
#, c-format
msgid "cannot open '%s'"
msgstr "no es pot obrir '%s'"
-#: builtin/grep.c:633
+#: builtin/grep.c:644
msgid "search in index instead of in the work tree"
msgstr "cerca en l'índex en lloc de l'arbre de treball"
-#: builtin/grep.c:635
+#: builtin/grep.c:646
msgid "find in contents not managed by git"
msgstr "cerca en continguts no gestionats per git"
-#: builtin/grep.c:637
+#: builtin/grep.c:648
msgid "search in both tracked and untracked files"
msgstr "cerca tant en fitxers seguits com en no seguits"
-#: builtin/grep.c:639
+#: builtin/grep.c:650
msgid "ignore files specified via '.gitignore'"
msgstr "ignora els fitxers especificats mitjançant '.gitignore'"
-#: builtin/grep.c:642
+#: builtin/grep.c:653
msgid "show non-matching lines"
msgstr "mostra les línies no coincidents"
-#: builtin/grep.c:644
+#: builtin/grep.c:655
msgid "case insensitive matching"
msgstr "coincidència insensible a majúscula i minúscula"
-#: builtin/grep.c:646
+#: builtin/grep.c:657
msgid "match patterns only at word boundaries"
msgstr "coincideix amb els patrons només als límits de paraula"
-#: builtin/grep.c:648
+#: builtin/grep.c:659
msgid "process binary files as text"
msgstr "processa els fitxers binaris com a text"
-#: builtin/grep.c:650
+#: builtin/grep.c:661
msgid "don't match patterns in binary files"
msgstr "no coincideixis amb els patrons en els fitxers binaris"
-#: builtin/grep.c:653
+#: builtin/grep.c:664
msgid "process binary files with textconv filters"
msgstr "processa els fitxers binaris amb filtres de textconv"
-#: builtin/grep.c:655
+#: builtin/grep.c:666
msgid "descend at most <depth> levels"
msgstr "descendeix com a màxim <profunditat> nivells"
-#: builtin/grep.c:659
+#: builtin/grep.c:670
msgid "use extended POSIX regular expressions"
msgstr "usa les expressions regulars POSIX esteses"
-#: builtin/grep.c:662
+#: builtin/grep.c:673
msgid "use basic POSIX regular expressions (default)"
msgstr "usa les expressions regulars POSIX bàsiques (per defecte)"
-#: builtin/grep.c:665
+#: builtin/grep.c:676
msgid "interpret patterns as fixed strings"
msgstr "interpreta els patrons com a cadenes fixes"
-#: builtin/grep.c:668
+#: builtin/grep.c:679
msgid "use Perl-compatible regular expressions"
msgstr "usa les expressions regulars compatibles amb Perl"
-#: builtin/grep.c:671
+#: builtin/grep.c:682
msgid "show line numbers"
msgstr "mostra els números de línia"
-#: builtin/grep.c:672
+#: builtin/grep.c:683
msgid "don't show filenames"
msgstr "no mostris els noms de fitxer"
-#: builtin/grep.c:673
+#: builtin/grep.c:684
msgid "show filenames"
msgstr "mostra els noms de fitxer"
-#: builtin/grep.c:675
+#: builtin/grep.c:686
msgid "show filenames relative to top directory"
msgstr "mostra els noms de fitxer relatius al directori superior"
-#: builtin/grep.c:677
+#: builtin/grep.c:688
msgid "show only filenames instead of matching lines"
msgstr "mostra només els noms de fitxer en lloc de les línies coincidents"
-#: builtin/grep.c:679
+#: builtin/grep.c:690
msgid "synonym for --files-with-matches"
msgstr "sinònim de --files-with-matches"
-#: builtin/grep.c:682
+#: builtin/grep.c:693
msgid "show only the names of files without match"
msgstr "mostra només els noms dels fitxers sense coincidència"
-#: builtin/grep.c:684
+#: builtin/grep.c:695
msgid "print NUL after filenames"
msgstr "imprimeix NUL després dels noms de fitxer"
-#: builtin/grep.c:686
+#: builtin/grep.c:697
msgid "show the number of matches instead of matching lines"
msgstr "mostra el nombre de coincidències en lloc de les línies coincidents"
-#: builtin/grep.c:687
+#: builtin/grep.c:698
msgid "highlight matches"
msgstr "ressalta les coincidències"
-#: builtin/grep.c:689
+#: builtin/grep.c:700
msgid "print empty line between matches from different files"
msgstr "imprimeix una línia buida entre coincidències de fitxers distints"
-#: builtin/grep.c:691
+#: builtin/grep.c:702
msgid "show filename only once above matches from same file"
msgstr ""
"mostra el nom de fitxer només una vegada a dalt de les coincidències del "
"mateix fitxer"
-#: builtin/grep.c:694
+#: builtin/grep.c:705
msgid "show <n> context lines before and after matches"
msgstr "mostra <n> línies de context abans i després d'una coincidència"
-#: builtin/grep.c:697
+#: builtin/grep.c:708
msgid "show <n> context lines before matches"
msgstr "mostra <n> línies de context abans d'una coincidència"
-#: builtin/grep.c:699
+#: builtin/grep.c:710
msgid "show <n> context lines after matches"
msgstr "mostra <n> línies de context després d'una coincidència"
-#: builtin/grep.c:700
+#: builtin/grep.c:712
+msgid "use <n> worker threads"
+msgstr "usa <n> fils obrers"
+
+#: builtin/grep.c:713
msgid "shortcut for -C NUM"
msgstr "drecera per -C NUM"
-#: builtin/grep.c:703
+#: builtin/grep.c:716
msgid "show a line with the function name before matches"
msgstr "mostra una línia amb el nom de funció abans de les coincidències"
-#: builtin/grep.c:705
+#: builtin/grep.c:718
msgid "show the surrounding function"
msgstr "mostra la funció circumdant"
-#: builtin/grep.c:708
+#: builtin/grep.c:721
msgid "read patterns from file"
msgstr "llegeix els patrons des d'un fitxer"
-#: builtin/grep.c:710
+#: builtin/grep.c:723
msgid "match <pattern>"
msgstr "coincideix amb <patró>"
-#: builtin/grep.c:712
+#: builtin/grep.c:725
msgid "combine patterns specified with -e"
msgstr "combina els patrons especificats amb -e"
-#: builtin/grep.c:724
+#: builtin/grep.c:737
msgid "indicate hit with exit status without output"
msgstr "indica coincidència amb estat de sortida sense sortida textual"
-#: builtin/grep.c:726
+#: builtin/grep.c:739
msgid "show only matches from files that match all patterns"
msgstr ""
"mostra només les coincidències dels fitxers que coincideixin amb tots els "
"patrons"
-#: builtin/grep.c:728
+#: builtin/grep.c:741
msgid "show parse tree for grep expression"
msgstr "mostra l'arbre d'anàlisis de l'expressió de grep"
-#: builtin/grep.c:732
+#: builtin/grep.c:745
msgid "pager"
msgstr "paginador"
-#: builtin/grep.c:732
+#: builtin/grep.c:745
msgid "show matching files in the pager"
msgstr "mostra els fitxers coincidents en el paginador"
-#: builtin/grep.c:735
+#: builtin/grep.c:748
msgid "allow calling of grep(1) (ignored by this build)"
msgstr "permet la invocació de grep(1) (ignorat per aquesta compilació)"
-#: builtin/grep.c:793
+#: builtin/grep.c:811
msgid "no pattern given."
msgstr "cap patró donat."
-#: builtin/grep.c:851
+#: builtin/grep.c:843 builtin/index-pack.c:1475
+#, c-format
+msgid "invalid number of threads specified (%d)"
+msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
+
+#: builtin/grep.c:873
msgid "--open-files-in-pager only works on the worktree"
msgstr "--open-files-in-pager només funciona en l'arbre de treball"
-#: builtin/grep.c:877
+#: builtin/grep.c:899
msgid "--cached or --untracked cannot be used with --no-index."
msgstr "--cached o --untracked no es pot usar amb --no-index."
-#: builtin/grep.c:882
+#: builtin/grep.c:904
msgid "--no-index or --untracked cannot be used with revs."
msgstr "--no-index o --untracked no es pot usar amb revisions."
-#: builtin/grep.c:885
+#: builtin/grep.c:907
msgid "--[no-]exclude-standard cannot be used for tracked contents."
msgstr "--[no-]exclude-standard no es pot usar per als continguts seguits."
-#: builtin/grep.c:893
+#: builtin/grep.c:915
msgid "both --cached and trees are given."
msgstr "s'han donat ambdós --caches i arbres."
-#: builtin/hash-object.c:80
+#: builtin/hash-object.c:81
msgid ""
"git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] "
"[--] <file>..."
@@ -6537,38 +6749,38 @@ msgstr ""
"git hash-object [-t <tipus>] [-w] [--path=<fitxer> | --no-filters] [--stdin] "
"[--] <fitxer>..."
-#: builtin/hash-object.c:81
+#: builtin/hash-object.c:82
msgid "git hash-object --stdin-paths"
msgstr "git hash-object --stdin-paths"
-#: builtin/hash-object.c:92
+#: builtin/hash-object.c:93
msgid "type"
msgstr "tipus"
-#: builtin/hash-object.c:92
+#: builtin/hash-object.c:93
msgid "object type"
msgstr "tipus d'objecte"
-#: builtin/hash-object.c:93
+#: builtin/hash-object.c:94
msgid "write the object into the object database"
msgstr "escriu l'objecte a la base de dades d'objectes"
-#: builtin/hash-object.c:95
+#: builtin/hash-object.c:96
msgid "read the object from stdin"
msgstr "llegeix l'objecte des d'stdin"
-#: builtin/hash-object.c:97
+#: builtin/hash-object.c:98
msgid "store file as is without filters"
msgstr "emmagatzema el fitxer tal com és sense filtres"
-#: builtin/hash-object.c:98
+#: builtin/hash-object.c:99
msgid ""
"just hash any random garbage to create corrupt objects for debugging Git"
msgstr ""
"només suma qualsevulla brossa aleatòria per a crear objectes malmesos per a "
"depurar al Git"
-#: builtin/hash-object.c:99
+#: builtin/hash-object.c:100
msgid "process file as it were from this path"
msgstr "processa el fitxer com si fos d'aquest camí"
@@ -6619,7 +6831,7 @@ msgstr "la versió d'emacsclient '%d' és massa vella (< 22)."
msgid "failed to exec '%s': %s"
msgstr "s'ha fallat en executar '%s': %s"
-#: builtin/help.c:208
+#: builtin/help.c:205
#, c-format
msgid ""
"'%s': path for unsupported man viewer.\n"
@@ -6628,7 +6840,7 @@ msgstr ""
"'%s': camí a un visualitzador de manuals no compatible.\n"
"Si us plau, considereu usar 'man.<eina>.cmd' en lloc d'això."
-#: builtin/help.c:220
+#: builtin/help.c:217
#, c-format
msgid ""
"'%s': cmd for supported man viewer.\n"
@@ -6637,61 +6849,61 @@ msgstr ""
"'%s': ordre per a un visualitzador de manuals compatible.\n"
"Si us plau, considereu usar 'man.<eina>.path' en lloc d'això."
-#: builtin/help.c:337
+#: builtin/help.c:334
#, c-format
msgid "'%s': unknown man viewer."
msgstr "'%s': visualitzador de manuals desconegut"
-#: builtin/help.c:354
+#: builtin/help.c:351
msgid "no man viewer handled the request"
msgstr "cap visualitzador de manuals ha gestionat la sol·licitud"
-#: builtin/help.c:362
+#: builtin/help.c:359
msgid "no info viewer handled the request"
msgstr "cap visualitzador d'informació ha gestionat la sol·licitud"
-#: builtin/help.c:411
+#: builtin/help.c:408
msgid "Defining attributes per path"
msgstr "La definició d'atributs per camí"
-#: builtin/help.c:412
+#: builtin/help.c:409
msgid "Everyday Git With 20 Commands Or So"
msgstr "Git quotidià amb més o menys 20 ordres"
-#: builtin/help.c:413
+#: builtin/help.c:410
msgid "A Git glossary"
msgstr "Un glossari de Git"
-#: builtin/help.c:414
+#: builtin/help.c:411
msgid "Specifies intentionally untracked files to ignore"
msgstr "Especifica els fitxers intencionalment no seguits a ignorar"
-#: builtin/help.c:415
+#: builtin/help.c:412
msgid "Defining submodule properties"
msgstr "La definició de les propietats de submòduls"
-#: builtin/help.c:416
+#: builtin/help.c:413
msgid "Specifying revisions and ranges for Git"
msgstr "L'especificació de revisions i rangs per al Git"
-#: builtin/help.c:417
+#: builtin/help.c:414
msgid "A tutorial introduction to Git (for version 1.5.1 or newer)"
msgstr "Una introducció tutorial al Git (per a la versió 1.5.1 o més nou)"
-#: builtin/help.c:418
+#: builtin/help.c:415
msgid "An overview of recommended workflows with Git"
msgstr "Una visió de conjunt de fluxos de treball recomanats amb Git"
-#: builtin/help.c:430
+#: builtin/help.c:427
msgid "The common Git guides are:\n"
msgstr "Les guies de Git comunes són:\n"
-#: builtin/help.c:451 builtin/help.c:468
+#: builtin/help.c:448 builtin/help.c:465
#, c-format
msgid "usage: %s%s"
msgstr "ús: %s%s"
-#: builtin/help.c:484
+#: builtin/help.c:481
#, c-format
msgid "`git %s' is aliased to `%s'"
msgstr "`git %s' és un àlies de `%s'"
@@ -6927,60 +7139,55 @@ msgstr "no es pot emmagatzemar el fitxer d'índex"
msgid "bad pack.indexversion=%<PRIu32>"
msgstr "pack.indexversion=%<PRIu32> dolent"
-#: builtin/index-pack.c:1475
-#, c-format
-msgid "invalid number of threads specified (%d)"
-msgstr "s'ha especificat un nombre de fils no vàlid (%d)"
-
-#: builtin/index-pack.c:1479 builtin/index-pack.c:1663
+#: builtin/index-pack.c:1479 builtin/index-pack.c:1664
#, c-format
msgid "no threads support, ignoring %s"
msgstr "no hi ha suport de fils, ignorant %s"
-#: builtin/index-pack.c:1537
+#: builtin/index-pack.c:1538
#, c-format
msgid "Cannot open existing pack file '%s'"
msgstr "No es pot obrir el fitxer de paquet existent '%s'"
-#: builtin/index-pack.c:1539
+#: builtin/index-pack.c:1540
#, c-format
msgid "Cannot open existing pack idx file for '%s'"
msgstr "No es pot obrir el fitxer d'índex de paquets existent de '%s'"
-#: builtin/index-pack.c:1586
+#: builtin/index-pack.c:1587
#, c-format
msgid "non delta: %d object"
msgid_plural "non delta: %d objects"
msgstr[0] "sense delta: %d objecte"
msgstr[1] "sense delta: %d objectes"
-#: builtin/index-pack.c:1593
+#: builtin/index-pack.c:1594
#, c-format
msgid "chain length = %d: %lu object"
msgid_plural "chain length = %d: %lu objects"
msgstr[0] "longitud de cadena = %d: %lu objecte"
msgstr[1] "longitud de cadena = %d: %lu objectes"
-#: builtin/index-pack.c:1623
+#: builtin/index-pack.c:1624
msgid "Cannot come back to cwd"
msgstr "No es pot tornar al directori de treball actual"
-#: builtin/index-pack.c:1675 builtin/index-pack.c:1678
-#: builtin/index-pack.c:1690 builtin/index-pack.c:1694
+#: builtin/index-pack.c:1676 builtin/index-pack.c:1679
+#: builtin/index-pack.c:1691 builtin/index-pack.c:1695
#, c-format
msgid "bad %s"
msgstr "%s dolent"
-#: builtin/index-pack.c:1708
+#: builtin/index-pack.c:1709
msgid "--fix-thin cannot be used without --stdin"
msgstr "--fix-thin no es pot usar sense --stdin"
-#: builtin/index-pack.c:1712 builtin/index-pack.c:1721
+#: builtin/index-pack.c:1713 builtin/index-pack.c:1722
#, c-format
msgid "packfile name '%s' does not end with '.pack'"
msgstr "el nom de fitxer de paquet '%s' no acaba amb '.pack'"
-#: builtin/index-pack.c:1729
+#: builtin/index-pack.c:1730
msgid "--verify with no packfile name given"
msgstr "s'ha donat --verify sense nom de fitxer de paquet"
@@ -7106,24 +7313,32 @@ msgstr "No es pot accedir a l'arbre de treball '%s'"
#: builtin/interpret-trailers.c:15
msgid ""
-"git interpret-trailers [--trim-empty] [(--trailer <token>[(=|:)<value>])...] "
-"[<file>...]"
+"git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
+"<token>[(=|:)<value>])...] [<file>...]"
msgstr ""
-"git interpret-trailers [--trim-empty] [(--trailer <fitxa>[(=|:)<valor>])...] "
-"[<fitxer>...]"
+"git interpret-trailers [--in-place] [--trim-empty] [(--trailer "
+"<fitxa>[(=|:)<valor>])...] [<fitxer>...]"
-#: builtin/interpret-trailers.c:25
+#: builtin/interpret-trailers.c:26
+msgid "edit files in place"
+msgstr "edita els fitxers in situ"
+
+#: builtin/interpret-trailers.c:27
msgid "trim empty trailers"
msgstr "escurça els remolcs buits"
-#: builtin/interpret-trailers.c:26
+#: builtin/interpret-trailers.c:28
msgid "trailer"
msgstr "remolc"
-#: builtin/interpret-trailers.c:27
+#: builtin/interpret-trailers.c:29
msgid "trailer(s) to add"
msgstr "remolcs a afegir"
+#: builtin/interpret-trailers.c:42
+msgid "no input file given for in-place editing"
+msgstr "no s'ha donat cap fitxer d'entrada per a edició in situ"
+
#: builtin/log.c:43
msgid "git log [<options>] [<revision-range>] [[--] <path>...]"
msgstr "git log [<opcions>] [<rang-de-revisions>] [[--] <camí>...]"
@@ -7177,225 +7392,225 @@ msgstr "No es pot llegir l'objecte %s"
msgid "Unknown type: %d"
msgstr "Tipus desconegut: %d"
-#: builtin/log.c:714
+#: builtin/log.c:715
msgid "format.headers without value"
msgstr "format.headers sense valor"
-#: builtin/log.c:798
+#: builtin/log.c:801
msgid "name of output directory is too long"
msgstr "el nom del directori de sortida és massa llarg"
-#: builtin/log.c:813
+#: builtin/log.c:816
#, c-format
msgid "Cannot open patch file %s"
msgstr "No es pot obrir el fitxer de pedaç %s"
-#: builtin/log.c:827
+#: builtin/log.c:830
msgid "Need exactly one range."
msgstr "Cal exactament un rang."
-#: builtin/log.c:837
+#: builtin/log.c:840
msgid "Not a range."
msgstr "No és un rang."
-#: builtin/log.c:943
+#: builtin/log.c:946
msgid "Cover letter needs email format"
msgstr "La carta de presentació necessita el format de correu electrònic"
-#: builtin/log.c:1022
+#: builtin/log.c:1025
#, c-format
msgid "insane in-reply-to: %s"
msgstr "in-reply-to boig: %s"
-#: builtin/log.c:1050
+#: builtin/log.c:1053
msgid "git format-patch [<options>] [<since> | <revision-range>]"
msgstr "git format-patch [<opcions>] [<des-de> | <rang-de-revisions>]"
-#: builtin/log.c:1095
+#: builtin/log.c:1098
msgid "Two output directories?"
msgstr "Dos directoris de sortida?"
-#: builtin/log.c:1211
+#: builtin/log.c:1214
msgid "use [PATCH n/m] even with a single patch"
msgstr "usa [PATCH n/m] fins i tot amb un sol pedaç"
-#: builtin/log.c:1214
+#: builtin/log.c:1217
msgid "use [PATCH] even with multiple patches"
msgstr "usa [PATCH] fins i tot amb múltiples pedaços"
-#: builtin/log.c:1218
+#: builtin/log.c:1221
msgid "print patches to standard out"
msgstr "imprimeix els pedaços a la sortida estàndard"
-#: builtin/log.c:1220
+#: builtin/log.c:1223
msgid "generate a cover letter"
msgstr "genera una carta de presentació"
-#: builtin/log.c:1222
+#: builtin/log.c:1225
msgid "use simple number sequence for output file names"
msgstr "usa una seqüència de números per als noms dels fitxers de sortida"
-#: builtin/log.c:1223
+#: builtin/log.c:1226
msgid "sfx"
msgstr "sufix"
-#: builtin/log.c:1224
+#: builtin/log.c:1227
msgid "use <sfx> instead of '.patch'"
msgstr "usa <sufix> en lloc de '.patch'"
-#: builtin/log.c:1226
+#: builtin/log.c:1229
msgid "start numbering patches at <n> instead of 1"
msgstr "comença numerant els pedaços a <n> en lloc d'1"
-#: builtin/log.c:1228
+#: builtin/log.c:1231
msgid "mark the series as Nth re-roll"
msgstr "marca la sèrie com a l'enèsima llançada"
-#: builtin/log.c:1230
+#: builtin/log.c:1233
msgid "Use [<prefix>] instead of [PATCH]"
msgstr "Usa [<prefix>] en lloc de [PATCH]"
-#: builtin/log.c:1233
+#: builtin/log.c:1236
msgid "store resulting files in <dir>"
msgstr "emmagatzema els fitxers resultants a <directori>"
-#: builtin/log.c:1236
+#: builtin/log.c:1239
msgid "don't strip/add [PATCH]"
msgstr "no despullis/afegeixis [PATCH]"
-#: builtin/log.c:1239
+#: builtin/log.c:1242
msgid "don't output binary diffs"
msgstr "no emetis diferències binàries"
-#: builtin/log.c:1241
+#: builtin/log.c:1244
msgid "output all-zero hash in From header"
msgstr "emet un hash de tots zeros en la capçalera From"
-#: builtin/log.c:1243
+#: builtin/log.c:1246
msgid "don't include a patch matching a commit upstream"
msgstr "no incloguis pedaços que coincideixin amb comissions a la font"
-#: builtin/log.c:1245
+#: builtin/log.c:1248
msgid "show patch format instead of default (patch + stat)"
msgstr ""
"mostra el format de pedaç en lloc del per defecte (pedaç + estadístiques)"
-#: builtin/log.c:1247
+#: builtin/log.c:1250
msgid "Messaging"
msgstr "Missatgeria"
-#: builtin/log.c:1248
+#: builtin/log.c:1251
msgid "header"
msgstr "capçalera"
-#: builtin/log.c:1249
+#: builtin/log.c:1252
msgid "add email header"
msgstr "afegeix una capçalera de correu electrònic"
-#: builtin/log.c:1250 builtin/log.c:1252
+#: builtin/log.c:1253 builtin/log.c:1255
msgid "email"
msgstr "correu electrònic"
-#: builtin/log.c:1250
+#: builtin/log.c:1253
msgid "add To: header"
msgstr "afegeix la capçalera To:"
-#: builtin/log.c:1252
+#: builtin/log.c:1255
msgid "add Cc: header"
msgstr "afegeix la capçalera Cc:"
-#: builtin/log.c:1254
+#: builtin/log.c:1257
msgid "ident"
msgstr "identitat"
-#: builtin/log.c:1255
+#: builtin/log.c:1258
msgid "set From address to <ident> (or committer ident if absent)"
msgstr ""
"estableix l'adreça From a <identitat> (o la identitat del comitent si manca)"
-#: builtin/log.c:1257
+#: builtin/log.c:1260
msgid "message-id"
msgstr "ID de missatge"
-#: builtin/log.c:1258
+#: builtin/log.c:1261
msgid "make first mail a reply to <message-id>"
msgstr "fes del primer missatge una resposta a <ID de missatge>"
-#: builtin/log.c:1259 builtin/log.c:1262
+#: builtin/log.c:1262 builtin/log.c:1265
msgid "boundary"
msgstr "límit"
-#: builtin/log.c:1260
+#: builtin/log.c:1263
msgid "attach the patch"
msgstr "ajunta el pedaç"
-#: builtin/log.c:1263
+#: builtin/log.c:1266
msgid "inline the patch"
msgstr "posa el pedaç en el cos"
-#: builtin/log.c:1267
+#: builtin/log.c:1270
msgid "enable message threading, styles: shallow, deep"
msgstr "habilita l'enfilada de missatges, estils: shallow, deep"
-#: builtin/log.c:1269
+#: builtin/log.c:1272
msgid "signature"
msgstr "firma"
-#: builtin/log.c:1270
+#: builtin/log.c:1273
msgid "add a signature"
msgstr "afegeix una firma"
-#: builtin/log.c:1272
+#: builtin/log.c:1275
msgid "add a signature from a file"
msgstr "afegeix una firma des d'un fitxer"
-#: builtin/log.c:1273
+#: builtin/log.c:1276
msgid "don't print the patch filenames"
msgstr "no imprimeixis els noms de fitxer del pedaç"
-#: builtin/log.c:1362
+#: builtin/log.c:1365
msgid "-n and -k are mutually exclusive."
msgstr "-n i -k són mutualment exclusius."
-#: builtin/log.c:1364
+#: builtin/log.c:1367
msgid "--subject-prefix and -k are mutually exclusive."
msgstr "--subject-prefix i -k són mutualment exclusius."
-#: builtin/log.c:1372
+#: builtin/log.c:1375
msgid "--name-only does not make sense"
msgstr "--name-only no té sentit"
-#: builtin/log.c:1374
+#: builtin/log.c:1377
msgid "--name-status does not make sense"
msgstr "--name-status no té sentit"
-#: builtin/log.c:1376
+#: builtin/log.c:1379
msgid "--check does not make sense"
msgstr "--check no té sentit"
-#: builtin/log.c:1401
+#: builtin/log.c:1407
msgid "standard output, or directory, which one?"
msgstr "sortida estàndard o directori, quin dels dos?"
-#: builtin/log.c:1403
+#: builtin/log.c:1409
#, c-format
msgid "Could not create directory '%s'"
msgstr "No s'ha pogut crear el directori '%s'"
-#: builtin/log.c:1500
+#: builtin/log.c:1506
#, c-format
msgid "unable to read signature file '%s'"
msgstr "no s'ha pogut llegir el fitxer de firma '%s'"
-#: builtin/log.c:1563
+#: builtin/log.c:1569
msgid "Failed to create output files"
msgstr "S'ha fallat en crear els fitxers de sortida"
-#: builtin/log.c:1611
+#: builtin/log.c:1617
msgid "git cherry [-v] [<upstream> [<head> [<limit>]]]"
msgstr "git cherry [-v] [<font> [<cap> [<límit>]]]"
-#: builtin/log.c:1665
+#: builtin/log.c:1671
#, c-format
msgid ""
"Could not find a tracked remote branch, please specify <upstream> manually.\n"
@@ -7403,105 +7618,156 @@ msgstr ""
"No s'ha pogut trobar una branca remota seguida. Si us plau, especifiqueu "
"<font> manualment.\n"
-#: builtin/log.c:1676 builtin/log.c:1678 builtin/log.c:1690
+#: builtin/log.c:1682 builtin/log.c:1684 builtin/log.c:1696
#, c-format
msgid "Unknown commit %s"
msgstr "Comissió desconeguda %s"
-#: builtin/ls-files.c:358
+#: builtin/ls-files.c:378
msgid "git ls-files [<options>] [<file>...]"
msgstr "git ls-files [<opcions>] [<fitxer>...]"
-#: builtin/ls-files.c:415
+#: builtin/ls-files.c:427
msgid "identify the file status with tags"
msgstr "identifica l'estat de fitxer amb etiquetes"
-#: builtin/ls-files.c:417
+#: builtin/ls-files.c:429
msgid "use lowercase letters for 'assume unchanged' files"
msgstr "usa lletres minúscules per als fitxers 'assume unchanged'"
-#: builtin/ls-files.c:419
+#: builtin/ls-files.c:431
msgid "show cached files in the output (default)"
msgstr ""
"mostra en la sortida els fitxers desats en la memòria cau (per defecte)"
-#: builtin/ls-files.c:421
+#: builtin/ls-files.c:433
msgid "show deleted files in the output"
msgstr "mostra en la sortida els fitxers suprimits"
-#: builtin/ls-files.c:423
+#: builtin/ls-files.c:435
msgid "show modified files in the output"
msgstr "mostra en la sortida els fitxers modificats"
-#: builtin/ls-files.c:425
+#: builtin/ls-files.c:437
msgid "show other files in the output"
msgstr "mostra en la sortida els altres fitxers"
-#: builtin/ls-files.c:427
+#: builtin/ls-files.c:439
msgid "show ignored files in the output"
msgstr "mostra en la sortida els fitxers ignorats"
-#: builtin/ls-files.c:430
+#: builtin/ls-files.c:442
msgid "show staged contents' object name in the output"
msgstr "mostra en la sortida el nom d'objecte dels continguts allistats"
-#: builtin/ls-files.c:432
+#: builtin/ls-files.c:444
msgid "show files on the filesystem that need to be removed"
msgstr "mostra els fitxers en el sistema de fitxers que s'han d'eliminar"
-#: builtin/ls-files.c:434
+#: builtin/ls-files.c:446
msgid "show 'other' directories' names only"
msgstr "mostra només els noms dels directoris 'other'"
-#: builtin/ls-files.c:437
+#: builtin/ls-files.c:448
+msgid "show line endings of files"
+msgstr "mostra els terminis de línia dels fitxers"
+
+#: builtin/ls-files.c:450
msgid "don't show empty directories"
msgstr "no mostris els directoris buits"
-#: builtin/ls-files.c:440
+#: builtin/ls-files.c:453
msgid "show unmerged files in the output"
msgstr "mostra en la sortida els fitxers sense fusionar"
-#: builtin/ls-files.c:442
+#: builtin/ls-files.c:455
msgid "show resolve-undo information"
msgstr "mostra la informació de resolució de desfet"
-#: builtin/ls-files.c:444
+#: builtin/ls-files.c:457
msgid "skip files matching pattern"
msgstr "salta els fitxers coincidents amb el patró"
-#: builtin/ls-files.c:447
+#: builtin/ls-files.c:460
msgid "exclude patterns are read from <file>"
msgstr "els patrons d'exclusió es llegeixen de <fitxer>"
-#: builtin/ls-files.c:450
+#: builtin/ls-files.c:463
msgid "read additional per-directory exclude patterns in <file>"
msgstr "llegeix els patrons addicionals d'exclusió per directori en <fitxer>"
-#: builtin/ls-files.c:452
+#: builtin/ls-files.c:465
msgid "add the standard git exclusions"
msgstr "afegeix les exclusions estàndards de git"
-#: builtin/ls-files.c:455
+#: builtin/ls-files.c:468
msgid "make the output relative to the project top directory"
msgstr "fes que la sortida sigui relativa al directori superior del projecte"
-#: builtin/ls-files.c:458
+#: builtin/ls-files.c:471
msgid "if any <file> is not in the index, treat this as an error"
msgstr "si qualsevol <fitxer> no és en l'índex, tracta això com a error"
-#: builtin/ls-files.c:459
+#: builtin/ls-files.c:472
msgid "tree-ish"
msgstr "arbre"
-#: builtin/ls-files.c:460
+#: builtin/ls-files.c:473
msgid "pretend that paths removed since <tree-ish> are still present"
msgstr ""
"pretén que els camins eliminats després de <arbre> encara siguin presents"
-#: builtin/ls-files.c:462
+#: builtin/ls-files.c:475
msgid "show debugging data"
msgstr "mostra les dades de depuració"
+#: builtin/ls-remote.c:7
+msgid ""
+"git ls-remote [--heads] [--tags] [--refs] [--upload-pack=<exec>]\n"
+" [-q | --quiet] [--exit-code] [--get-url]\n"
+" [--symref] [<repository> [<refs>...]]"
+msgstr ""
+"git ls-remote [--heads] [--tags] [--refs]\n"
+" [--upload-pack=<executable>] [-q | --quiet]\n"
+" [--exit-code] [--get-url] [--symref]\n"
+" [<dipòsit> [<referències>...]]"
+
+#: builtin/ls-remote.c:50
+msgid "do not print remote URL"
+msgstr "no imprimeixis l'URL remot"
+
+#: builtin/ls-remote.c:51 builtin/ls-remote.c:53
+msgid "exec"
+msgstr "executable"
+
+#: builtin/ls-remote.c:52 builtin/ls-remote.c:54
+msgid "path of git-upload-pack on the remote host"
+msgstr "camí a git-upload-pack en la màquina remota"
+
+#: builtin/ls-remote.c:56
+msgid "limit to tags"
+msgstr "limita a etiquetes"
+
+#: builtin/ls-remote.c:57
+msgid "limit to heads"
+msgstr "limita a caps"
+
+#: builtin/ls-remote.c:58
+msgid "do not show peeled tags"
+msgstr "no mostris les etiquetes pelades"
+
+#: builtin/ls-remote.c:60
+msgid "take url.<base>.insteadOf into account"
+msgstr "tingues en compte url.<base>.insteadOf"
+
+#: builtin/ls-remote.c:62
+msgid "exit with exit code 2 if no matching refs are found"
+msgstr "surt amb codi de sortida 2 si no es troba cap referència coincident"
+
+#: builtin/ls-remote.c:64
+msgid "show underlying ref in addition to the object pointed by it"
+msgstr "mostra la referència subjacent en adició a l'objecte que senyali"
+
#: builtin/ls-tree.c:28
msgid "git ls-tree [<options>] <tree-ish> [<path>...]"
msgstr "git ls-tree [<opcions>] <arbre> [<camí>...]"
@@ -7570,33 +7836,33 @@ msgstr "Les estratègies disponibles són:"
msgid "Available custom strategies are:"
msgstr "Les estratègies personalitzades disponibles són:"
-#: builtin/merge.c:193 builtin/pull.c:119
+#: builtin/merge.c:193 builtin/pull.c:123
msgid "do not show a diffstat at the end of the merge"
msgstr "no mostris les estadístiques de diferència al final de la fusió"
-#: builtin/merge.c:196 builtin/pull.c:122
+#: builtin/merge.c:196 builtin/pull.c:126
msgid "show a diffstat at the end of the merge"
msgstr "mostra les estadístiques de diferència al final de la fusió"
-#: builtin/merge.c:197 builtin/pull.c:125
+#: builtin/merge.c:197 builtin/pull.c:129
msgid "(synonym to --stat)"
msgstr "(sinònim de --stat)"
-#: builtin/merge.c:199 builtin/pull.c:128
+#: builtin/merge.c:199 builtin/pull.c:132
msgid "add (at most <n>) entries from shortlog to merge commit message"
msgstr ""
"afegeix (com a màxim <n>) entrades del registre curt al missatge de comissió "
"de fusió"
-#: builtin/merge.c:202 builtin/pull.c:131
+#: builtin/merge.c:202 builtin/pull.c:135
msgid "create a single commit instead of doing a merge"
msgstr "crea una única comissió en lloc de fusionar"
-#: builtin/merge.c:204 builtin/pull.c:134
+#: builtin/merge.c:204 builtin/pull.c:138
msgid "perform a commit if the merge succeeds (default)"
msgstr "realitza una comissió si la fusió té èxit (per defecte)"
-#: builtin/merge.c:206 builtin/pull.c:137
+#: builtin/merge.c:206 builtin/pull.c:141
msgid "edit message before committing"
msgstr "edita el missatge abans de cometre"
@@ -7604,7 +7870,7 @@ msgstr "edita el missatge abans de cometre"
msgid "allow fast-forward (default)"
msgstr "permet l'avanç ràpid (per defecte)"
-#: builtin/merge.c:209 builtin/pull.c:143
+#: builtin/merge.c:209 builtin/pull.c:147
msgid "abort if fast-forward is not possible"
msgstr "avorta si l'avanç ràpid no és possible"
@@ -7612,20 +7878,20 @@ msgstr "avorta si l'avanç ràpid no és possible"
msgid "Verify that the named commit has a valid GPG signature"
msgstr "Verifica que la comissió anomenada tingui una firma GPG vàlida"
-#: builtin/merge.c:214 builtin/notes.c:767 builtin/pull.c:148
+#: builtin/merge.c:214 builtin/notes.c:770 builtin/pull.c:152
#: builtin/revert.c:89
msgid "strategy"
msgstr "estratègia"
-#: builtin/merge.c:215 builtin/pull.c:149
+#: builtin/merge.c:215 builtin/pull.c:153
msgid "merge strategy to use"
msgstr "estratègia de fusió a usar"
-#: builtin/merge.c:216 builtin/pull.c:152
+#: builtin/merge.c:216 builtin/pull.c:156
msgid "option=value"
msgstr "opció=valor"
-#: builtin/merge.c:217 builtin/pull.c:153
+#: builtin/merge.c:217 builtin/pull.c:157
msgid "option for selected merge strategy"
msgstr "opció per a l'estratègia de fusió seleccionada"
@@ -7663,8 +7929,8 @@ msgstr " (res a aixafar)"
msgid "Squash commit -- not updating HEAD\n"
msgstr "Comissió d'aixafada -- no actualitzant HEAD\n"
-#: builtin/merge.c:344 builtin/merge.c:763 builtin/merge.c:975
-#: builtin/merge.c:988
+#: builtin/merge.c:344 builtin/merge.c:764 builtin/merge.c:976
+#: builtin/merge.c:989
#, c-format
msgid "Could not write to '%s'"
msgstr "No s'ha pogut escriure al '%s'"
@@ -7682,41 +7948,41 @@ msgstr "Finalitzant SQUASH_MSG"
msgid "No merge message -- not updating HEAD\n"
msgstr "Cap missatge de fusió -- no actualitzant HEAD\n"
-#: builtin/merge.c:447
+#: builtin/merge.c:448
#, c-format
msgid "'%s' does not point to a commit"
msgstr "'%s' no assenyala una comissió"
-#: builtin/merge.c:537
+#: builtin/merge.c:538
#, c-format
msgid "Bad branch.%s.mergeoptions string: %s"
msgstr "Cadena branch.%s.mergeoptions dolenta: %s"
-#: builtin/merge.c:656
+#: builtin/merge.c:657
msgid "Not handling anything other than two heads merge."
msgstr "No gestionant res a part de la fusió de dos caps."
-#: builtin/merge.c:670
+#: builtin/merge.c:671
#, c-format
msgid "Unknown option for merge-recursive: -X%s"
msgstr "Opció desconeguda de merge-recursive: -X%s"
-#: builtin/merge.c:683
+#: builtin/merge.c:684
#, c-format
msgid "unable to write %s"
msgstr "no s'ha pogut escriure %s"
-#: builtin/merge.c:772
+#: builtin/merge.c:773
#, c-format
msgid "Could not read from '%s'"
msgstr "No s'ha pogut llegir de '%s'"
-#: builtin/merge.c:781
+#: builtin/merge.c:782
#, c-format
msgid "Not committing merge; use 'git commit' to complete the merge.\n"
msgstr "No cometent la fusió; useu 'git commit' per a completar la fusió.\n"
-#: builtin/merge.c:787
+#: builtin/merge.c:788
#, c-format
msgid ""
"Please enter a commit message to explain why this merge is necessary,\n"
@@ -7732,54 +7998,54 @@ msgstr ""
"S'ignoraran les línies que comencin amb '%c', i un missatge buit\n"
"avorta la comissió.\n"
-#: builtin/merge.c:811
+#: builtin/merge.c:812
msgid "Empty commit message."
msgstr "Missatge de comissió buit."
-#: builtin/merge.c:823
+#: builtin/merge.c:824
#, c-format
msgid "Wonderful.\n"
msgstr "Meravellós.\n"
-#: builtin/merge.c:878
+#: builtin/merge.c:879
#, c-format
msgid "Automatic merge failed; fix conflicts and then commit the result.\n"
msgstr ""
"La fusió automàtica ha fallat; arregleu els conflictes i després cometeu el "
"resultat.\n"
-#: builtin/merge.c:894
+#: builtin/merge.c:895
#, c-format
msgid "'%s' is not a commit"
msgstr "'%s' no és una comissió"
-#: builtin/merge.c:935
+#: builtin/merge.c:936
msgid "No current branch."
msgstr "Cap branca actual."
-#: builtin/merge.c:937
+#: builtin/merge.c:938
msgid "No remote for the current branch."
msgstr "No hi ha cap remot per a la branca actual."
-#: builtin/merge.c:939
+#: builtin/merge.c:940
msgid "No default upstream defined for the current branch."
msgstr "No hi ha cap font per defecte definida per a la branca actual."
-#: builtin/merge.c:944
+#: builtin/merge.c:945
#, c-format
msgid "No remote-tracking branch for %s from %s"
msgstr "No hi ha cap branca amb seguiment remot per a %s de %s"
-#: builtin/merge.c:1079
+#: builtin/merge.c:1080
#, c-format
msgid "could not close '%s'"
msgstr "no s'ha pogut tancar '%s'"
-#: builtin/merge.c:1206
+#: builtin/merge.c:1207
msgid "There is no merge to abort (MERGE_HEAD missing)."
msgstr "No hi ha fusió a avortar (manca MERGE_HEAD)."
-#: builtin/merge.c:1222
+#: builtin/merge.c:1223
msgid ""
"You have not concluded your merge (MERGE_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -7787,7 +8053,7 @@ msgstr ""
"No heu conclòs la vostra fusió (MERGE_HEAD existeix).\n"
"Si us plau, cometeu els vostres canvis abans de fusionar."
-#: builtin/merge.c:1229
+#: builtin/merge.c:1230
msgid ""
"You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
"Please, commit your changes before you merge."
@@ -7795,103 +8061,103 @@ msgstr ""
"No heu conclòs el vostre recull de cireres (CHERRY_PICK_HEAD existeix).\n"
"Si us plau, cometeu els vostres canvis abans de fusionar."
-#: builtin/merge.c:1232
+#: builtin/merge.c:1233
msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."
msgstr ""
"No heu conclòs el vostre recull de cireres (CHERRY_PICK_HEAD existeix)."
-#: builtin/merge.c:1241
+#: builtin/merge.c:1242
msgid "You cannot combine --squash with --no-ff."
msgstr "No podeu combinar --squash amb --no-ff."
-#: builtin/merge.c:1249
+#: builtin/merge.c:1250
msgid "No commit specified and merge.defaultToUpstream not set."
msgstr ""
"No hi ha una comissió especificada i merge.defaultToUpstream no està "
"establert."
-#: builtin/merge.c:1266
+#: builtin/merge.c:1267
msgid "Squash commit into empty head not supported yet"
msgstr "Aixafar una comissió a un cap buit encara no es permet"
-#: builtin/merge.c:1268
+#: builtin/merge.c:1269
msgid "Non-fast-forward commit does not make sense into an empty head"
msgstr "Una comissió no d'avanç ràpid no té sentit a un cap buit"
-#: builtin/merge.c:1274
+#: builtin/merge.c:1275
#, c-format
msgid "%s - not something we can merge"
msgstr "%s - no és una cosa que puguem fusionar"
-#: builtin/merge.c:1276
+#: builtin/merge.c:1277
msgid "Can merge only exactly one commit into empty head"
msgstr "Es pot fusionar no més d'exactament una comissió a un cap buit"
-#: builtin/merge.c:1331
+#: builtin/merge.c:1332
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr "La comissió %s té una firma GPG no fiable, suposadament de %s."
-#: builtin/merge.c:1334
+#: builtin/merge.c:1335
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr "La comissió %s té una firma GPG dolenta suposadament de %s."
-#: builtin/merge.c:1337
+#: builtin/merge.c:1338
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "La comissió %s no té firma GPG."
-#: builtin/merge.c:1340
+#: builtin/merge.c:1341
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "La comissió %s té una firma GPG bona de %s\n"
-#: builtin/merge.c:1423
+#: builtin/merge.c:1424
#, c-format
msgid "Updating %s..%s\n"
msgstr "Actualitzant %s..%s\n"
-#: builtin/merge.c:1460
+#: builtin/merge.c:1461
#, c-format
msgid "Trying really trivial in-index merge...\n"
msgstr "Intentant una fusió molt trivial en l'índex...\n"
-#: builtin/merge.c:1467
+#: builtin/merge.c:1468
#, c-format
msgid "Nope.\n"
msgstr "No.\n"
-#: builtin/merge.c:1499
+#: builtin/merge.c:1500
msgid "Not possible to fast-forward, aborting."
msgstr "No és possible avançar ràpidament, avortant."
-#: builtin/merge.c:1522 builtin/merge.c:1601
+#: builtin/merge.c:1523 builtin/merge.c:1602
#, c-format
msgid "Rewinding the tree to pristine...\n"
msgstr "Rebobinant l'arbre a la pristina...\n"
-#: builtin/merge.c:1526
+#: builtin/merge.c:1527
#, c-format
msgid "Trying merge strategy %s...\n"
msgstr "Intentant l'estratègia de fusió %s...\n"
-#: builtin/merge.c:1592
+#: builtin/merge.c:1593
#, c-format
msgid "No merge strategy handled the merge.\n"
msgstr "Cap estratègia de fusió ha gestionat la fusió.\n"
-#: builtin/merge.c:1594
+#: builtin/merge.c:1595
#, c-format
msgid "Merge with strategy %s failed.\n"
msgstr "L'estratègia de fusió %s ha fallat.\n"
-#: builtin/merge.c:1603
+#: builtin/merge.c:1604
#, c-format
msgid "Using the %s to prepare resolving by hand.\n"
msgstr "Usant el %s per a preparar la resolució a mà.\n"
-#: builtin/merge.c:1615
+#: builtin/merge.c:1616
#, c-format
msgid "Automatic merge went well; stopped before committing as requested\n"
msgstr ""
@@ -7979,19 +8245,19 @@ msgstr "no avisis de conflictes"
msgid "set labels for file1/orig-file/file2"
msgstr "estableix les etiquetes per a fitxer1/fitxer-original/fitxer2"
-#: builtin/mktree.c:64
+#: builtin/mktree.c:65
msgid "git mktree [-z] [--missing] [--batch]"
msgstr "git mktree [-z] [--missing] [--batch]"
-#: builtin/mktree.c:150
+#: builtin/mktree.c:152
msgid "input is NUL terminated"
msgstr "l'entrada és acabada amb NUL"
-#: builtin/mktree.c:151 builtin/write-tree.c:24
+#: builtin/mktree.c:153 builtin/write-tree.c:24
msgid "allow missing objects"
msgstr "permet els objectes absents"
-#: builtin/mktree.c:152
+#: builtin/mktree.c:154
msgid "allow creation of more than one tree"
msgstr "permet la creació de més d'un arbre"
@@ -7999,92 +8265,92 @@ msgstr "permet la creació de més d'un arbre"
msgid "git mv [<options>] <source>... <destination>"
msgstr "git mv [<opcions>] <font>... <destí>"
-#: builtin/mv.c:69
+#: builtin/mv.c:70
#, c-format
msgid "Directory %s is in index and no submodule?"
msgstr "El directori %s és en l'índex i no hi ha cap submòdul?"
-#: builtin/mv.c:71
+#: builtin/mv.c:72
msgid "Please stage your changes to .gitmodules or stash them to proceed"
msgstr ""
"Si us plau, allisteu els vostres canvis a .gitmodules o emmagatzemeu-los per "
"a procedir"
-#: builtin/mv.c:89
+#: builtin/mv.c:90
#, c-format
msgid "%.*s is in index"
msgstr "%.*s és en l'índex"
-#: builtin/mv.c:111
+#: builtin/mv.c:112
msgid "force move/rename even if target exists"
msgstr "força el moviment / canvi de nom encara que el destí existeixi"
-#: builtin/mv.c:112
+#: builtin/mv.c:113
msgid "skip move/rename errors"
msgstr "omet els errors de moviment / canvi de nom"
-#: builtin/mv.c:151
+#: builtin/mv.c:152
#, c-format
msgid "destination '%s' is not a directory"
msgstr "el destí '%s' no és un directori"
-#: builtin/mv.c:162
+#: builtin/mv.c:163
#, c-format
msgid "Checking rename of '%s' to '%s'\n"
msgstr "Comprovant el canvi de nom de '%s' a '%s'\n"
-#: builtin/mv.c:166
+#: builtin/mv.c:167
msgid "bad source"
msgstr "font dolenta"
-#: builtin/mv.c:169
+#: builtin/mv.c:170
msgid "can not move directory into itself"
msgstr "no es pot moure un directori a dins d'ell mateix"
-#: builtin/mv.c:172
+#: builtin/mv.c:173
msgid "cannot move directory over file"
msgstr "no es pot moure un directori sobre un fitxer"
-#: builtin/mv.c:181
+#: builtin/mv.c:182
msgid "source directory is empty"
msgstr "el directori font està buit"
-#: builtin/mv.c:206
+#: builtin/mv.c:207
msgid "not under version control"
msgstr "no està sota control de versions"
-#: builtin/mv.c:209
+#: builtin/mv.c:210
msgid "destination exists"
msgstr "el destí existeix"
-#: builtin/mv.c:217
+#: builtin/mv.c:218
#, c-format
msgid "overwriting '%s'"
msgstr "sobreescrivint '%s'"
-#: builtin/mv.c:220
+#: builtin/mv.c:221
msgid "Cannot overwrite"
msgstr "No es pot sobreescriure"
-#: builtin/mv.c:223
+#: builtin/mv.c:224
msgid "multiple sources for the same target"
msgstr "múltiples fonts per al mateix destí"
-#: builtin/mv.c:225
+#: builtin/mv.c:226
msgid "destination directory does not exist"
msgstr "el directori destí no existeix"
-#: builtin/mv.c:232
+#: builtin/mv.c:233
#, c-format
msgid "%s, source=%s, destination=%s"
msgstr "%s, origen=%s, destí=%s"
-#: builtin/mv.c:253
+#: builtin/mv.c:254
#, c-format
msgid "Renaming %s to %s\n"
msgstr "Canviant el nom de %s a %s\n"
-#: builtin/mv.c:256 builtin/remote.c:728 builtin/repack.c:365
+#: builtin/mv.c:257 builtin/remote.c:714 builtin/repack.c:365
#, c-format
msgid "renaming '%s' failed"
msgstr "el canvi del nom de '%s' ha fallat"
@@ -8287,9 +8553,9 @@ msgid "could not open or read '%s'"
msgstr "no s'ha pogut obrir o llegir '%s'"
#: builtin/notes.c:253 builtin/notes.c:304 builtin/notes.c:306
-#: builtin/notes.c:366 builtin/notes.c:421 builtin/notes.c:507
-#: builtin/notes.c:512 builtin/notes.c:590 builtin/notes.c:653
-#: builtin/notes.c:877 builtin/tag.c:456
+#: builtin/notes.c:369 builtin/notes.c:424 builtin/notes.c:510
+#: builtin/notes.c:515 builtin/notes.c:593 builtin/notes.c:656
+#: builtin/notes.c:880 builtin/tag.c:456
#, c-format
msgid "Failed to resolve '%s' as a valid ref."
msgstr "S'ha fallat en resoldre '%s' com a referència vàlida."
@@ -8304,42 +8570,42 @@ msgstr "S'ha fallat en llegir l'objecte '%s'."
msgid "Cannot read note data from non-blob object '%s'."
msgstr "No es pot llegir les dades de node de l'objecte no de blob '%s'."
-#: builtin/notes.c:359 builtin/notes.c:414 builtin/notes.c:490
-#: builtin/notes.c:502 builtin/notes.c:578 builtin/notes.c:646
-#: builtin/notes.c:942
+#: builtin/notes.c:362 builtin/notes.c:417 builtin/notes.c:493
+#: builtin/notes.c:505 builtin/notes.c:581 builtin/notes.c:649
+#: builtin/notes.c:945
msgid "too many parameters"
msgstr "massa paràmetres"
-#: builtin/notes.c:372 builtin/notes.c:659
+#: builtin/notes.c:375 builtin/notes.c:662
#, c-format
msgid "No note found for object %s."
msgstr "No s'ha trobat cap nota per a l'objecte %s."
-#: builtin/notes.c:393 builtin/notes.c:556
+#: builtin/notes.c:396 builtin/notes.c:559
msgid "note contents as a string"
msgstr "anota els continguts com a cadena"
-#: builtin/notes.c:396 builtin/notes.c:559
+#: builtin/notes.c:399 builtin/notes.c:562
msgid "note contents in a file"
msgstr "anota els continguts en un fitxer"
-#: builtin/notes.c:399 builtin/notes.c:562
+#: builtin/notes.c:402 builtin/notes.c:565
msgid "reuse and edit specified note object"
msgstr "reusa i edita l'objecte de nota especificat"
-#: builtin/notes.c:402 builtin/notes.c:565
+#: builtin/notes.c:405 builtin/notes.c:568
msgid "reuse specified note object"
msgstr "reusa l'objecte de nota especificat"
-#: builtin/notes.c:405 builtin/notes.c:568
+#: builtin/notes.c:408 builtin/notes.c:571
msgid "allow storing empty note"
msgstr "permet l'emmagatzematge d'una nota buida"
-#: builtin/notes.c:406 builtin/notes.c:477
+#: builtin/notes.c:409 builtin/notes.c:480
msgid "replace existing notes"
msgstr "reemplaça les notes existents"
-#: builtin/notes.c:431
+#: builtin/notes.c:434
#, c-format
msgid ""
"Cannot add notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -8348,30 +8614,30 @@ msgstr ""
"No es pot afegir les notes. S'han trobat notes existents de l'objecte %s. "
"Useu '-f' per a sobreescriure les notes existents."
-#: builtin/notes.c:446 builtin/notes.c:525
+#: builtin/notes.c:449 builtin/notes.c:528
#, c-format
msgid "Overwriting existing notes for object %s\n"
msgstr "Sobreescrivint les notes existents de l'objecte %s\n"
-#: builtin/notes.c:457 builtin/notes.c:618 builtin/notes.c:882
+#: builtin/notes.c:460 builtin/notes.c:621 builtin/notes.c:885
#, c-format
msgid "Removing note for object %s\n"
msgstr "Eliminant la nota de l'objecte %s\n"
-#: builtin/notes.c:478
+#: builtin/notes.c:481
msgid "read objects from stdin"
msgstr "llegeix els objectes des d'stdin"
-#: builtin/notes.c:480
+#: builtin/notes.c:483
msgid "load rewriting config for <command> (implies --stdin)"
msgstr ""
"carrega la configuració de reescriptura per a <ordre> (implica --stdin)"
-#: builtin/notes.c:498
+#: builtin/notes.c:501
msgid "too few parameters"
msgstr "hi ha massa pocs paràmetres"
-#: builtin/notes.c:519
+#: builtin/notes.c:522
#, c-format
msgid ""
"Cannot copy notes. Found existing notes for object %s. Use '-f' to overwrite "
@@ -8380,12 +8646,12 @@ msgstr ""
"No es pot copiar les notes. S'han trobat notes existents de l'objecte %s. "
"Useu '-f' per a sobreescriure les notes existents."
-#: builtin/notes.c:531
+#: builtin/notes.c:534
#, c-format
msgid "Missing notes on source object %s. Cannot copy."
msgstr "Manquen notes a l'objecte font %s. No es pot copiar."
-#: builtin/notes.c:583
+#: builtin/notes.c:586
#, c-format
msgid ""
"The -m/-F/-c/-C options have been deprecated for the 'edit' subcommand.\n"
@@ -8394,15 +8660,15 @@ msgstr ""
"S'han desaprovat les opcions -m/-F/-c/-C en favor de la subordre 'edit'.\n"
"Si us plau, useu 'git notes add -f -m/-F/-c/-C' en lloc d'això.\n"
-#: builtin/notes.c:764
+#: builtin/notes.c:767
msgid "General options"
msgstr "Opcions generals"
-#: builtin/notes.c:766
+#: builtin/notes.c:769
msgid "Merge options"
msgstr "Opcions de fusió"
-#: builtin/notes.c:768
+#: builtin/notes.c:771
msgid ""
"resolve notes conflicts using the given strategy (manual/ours/theirs/union/"
"cat_sort_uniq)"
@@ -8410,49 +8676,49 @@ msgstr ""
"resol els conflictes de nota usant l'estratègia donada (manual/ours/theirs/"
"union/cat_sort_uniq)"
-#: builtin/notes.c:770
+#: builtin/notes.c:773
msgid "Committing unmerged notes"
msgstr "Cometent les notes sense fusionar"
-#: builtin/notes.c:772
+#: builtin/notes.c:775
msgid "finalize notes merge by committing unmerged notes"
msgstr "finalitza la fusió de notes cometent les notes sense fusionar"
-#: builtin/notes.c:774
+#: builtin/notes.c:777
msgid "Aborting notes merge resolution"
msgstr "Avortant la resolució de fusió de notes"
-#: builtin/notes.c:776
+#: builtin/notes.c:779
msgid "abort notes merge"
msgstr "avorta la fusió de notes"
-#: builtin/notes.c:853
+#: builtin/notes.c:856
#, c-format
msgid "A notes merge into %s is already in-progress at %s"
msgstr "Una fusió de notes a %s ja està en curs a %s"
-#: builtin/notes.c:880
+#: builtin/notes.c:883
#, c-format
msgid "Object %s has no note\n"
msgstr "L'objecte %s no té cap nota\n"
-#: builtin/notes.c:892
+#: builtin/notes.c:895
msgid "attempt to remove non-existent note is not an error"
msgstr "l'intent d'eliminar una nota no existent no és un error"
-#: builtin/notes.c:895
+#: builtin/notes.c:898
msgid "read object names from the standard input"
msgstr "llegeix els noms d'objecte des de l'entrada estàndard"
-#: builtin/notes.c:976
+#: builtin/notes.c:979
msgid "notes-ref"
msgstr "referència de notes"
-#: builtin/notes.c:977
+#: builtin/notes.c:980
msgid "use notes from <notes-ref>"
msgstr "usa les notes de <referència-de-notes>"
-#: builtin/notes.c:1012 builtin/remote.c:1647
+#: builtin/notes.c:1015 builtin/remote.c:1626
#, c-format
msgid "Unknown subcommand: %s"
msgstr "Subordre desconeguda: %s"
@@ -8476,176 +8742,176 @@ msgstr ""
msgid "deflate error (%d)"
msgstr "error de deflació (%d)"
-#: builtin/pack-objects.c:771
+#: builtin/pack-objects.c:772
msgid "Writing objects"
msgstr "Escrivint els objectes"
-#: builtin/pack-objects.c:1011
+#: builtin/pack-objects.c:1012
msgid "disabling bitmap writing, as some objects are not being packed"
msgstr ""
"inhabilitant l'escriptura de mapes de bits, perquè alguns objectes no "
"s'estan empaquetant"
-#: builtin/pack-objects.c:2171
+#: builtin/pack-objects.c:2172
msgid "Compressing objects"
msgstr "Comprimint objectes"
-#: builtin/pack-objects.c:2568
+#: builtin/pack-objects.c:2558
#, c-format
msgid "unsupported index version %s"
msgstr "versió d'índex no compatible %s"
-#: builtin/pack-objects.c:2572
+#: builtin/pack-objects.c:2562
#, c-format
msgid "bad index version '%s'"
msgstr "versió d'índex dolenta '%s'"
-#: builtin/pack-objects.c:2602
+#: builtin/pack-objects.c:2592
msgid "do not show progress meter"
msgstr "no mostris l'indicador de progrés"
-#: builtin/pack-objects.c:2604
+#: builtin/pack-objects.c:2594
msgid "show progress meter"
msgstr "mostra l'indicador de progrés"
-#: builtin/pack-objects.c:2606
+#: builtin/pack-objects.c:2596
msgid "show progress meter during object writing phase"
msgstr "mostra l'indicador de progrés durant la fase d'escriptura d'objectes"
-#: builtin/pack-objects.c:2609
+#: builtin/pack-objects.c:2599
msgid "similar to --all-progress when progress meter is shown"
msgstr "similar a --all-progress quan l'indicador de progrés es mostra"
-#: builtin/pack-objects.c:2610
+#: builtin/pack-objects.c:2600
msgid "version[,offset]"
msgstr "versió[,desplaçament]"
-#: builtin/pack-objects.c:2611
+#: builtin/pack-objects.c:2601
msgid "write the pack index file in the specified idx format version"
msgstr ""
"escriu el fitxer d'índex de paquet en la versió de format d'índex "
"especificada"
-#: builtin/pack-objects.c:2614
+#: builtin/pack-objects.c:2604
msgid "maximum size of each output pack file"
msgstr "mida màxima de cada fitxer de paquet de sortida"
-#: builtin/pack-objects.c:2616
+#: builtin/pack-objects.c:2606
msgid "ignore borrowed objects from alternate object store"
msgstr ""
"ignora els objectes prestats d'un emmagatzemament d'objectes alternatiu"
-#: builtin/pack-objects.c:2618
+#: builtin/pack-objects.c:2608
msgid "ignore packed objects"
msgstr "ignora els objectes empaquetats"
-#: builtin/pack-objects.c:2620
+#: builtin/pack-objects.c:2610
msgid "limit pack window by objects"
msgstr "limita la finestra d'empaquetament per objectes"
-#: builtin/pack-objects.c:2622
+#: builtin/pack-objects.c:2612
msgid "limit pack window by memory in addition to object limit"
msgstr ""
"limita la finestra d'empaquetament per memòria a més del límit d'objectes"
-#: builtin/pack-objects.c:2624
+#: builtin/pack-objects.c:2614
msgid "maximum length of delta chain allowed in the resulting pack"
msgstr "longitud màxima de la cadena de deltes permesa en el paquet resultant"
-#: builtin/pack-objects.c:2626
+#: builtin/pack-objects.c:2616
msgid "reuse existing deltas"
msgstr "reusa les deltes existents"
-#: builtin/pack-objects.c:2628
+#: builtin/pack-objects.c:2618
msgid "reuse existing objects"
msgstr "reusa els objectes existents"
-#: builtin/pack-objects.c:2630
+#: builtin/pack-objects.c:2620
msgid "use OFS_DELTA objects"
msgstr "usa objectes OFS_DELTA"
-#: builtin/pack-objects.c:2632
+#: builtin/pack-objects.c:2622
msgid "use threads when searching for best delta matches"
msgstr "usa fils en cercar les millores coincidències de delta"
-#: builtin/pack-objects.c:2634
+#: builtin/pack-objects.c:2624
msgid "do not create an empty pack output"
msgstr "no creïs una emissió de paquet buida"
-#: builtin/pack-objects.c:2636
+#: builtin/pack-objects.c:2626
msgid "read revision arguments from standard input"
msgstr "llegeix els paràmetres de revisió des de l'entrada estàndard"
-#: builtin/pack-objects.c:2638
+#: builtin/pack-objects.c:2628
msgid "limit the objects to those that are not yet packed"
msgstr "limita els objectes als quals encara no s'hagin empaquetat"
-#: builtin/pack-objects.c:2641
+#: builtin/pack-objects.c:2631
msgid "include objects reachable from any reference"
msgstr "inclou els objectes abastables de qualsevulla referència"
-#: builtin/pack-objects.c:2644
+#: builtin/pack-objects.c:2634
msgid "include objects referred by reflog entries"
msgstr ""
"inclou els objectes als quals facin referència les entrades del registre de "
"referències"
-#: builtin/pack-objects.c:2647
+#: builtin/pack-objects.c:2637
msgid "include objects referred to by the index"
msgstr "inclou els objectes als quals faci referència l'índex"
-#: builtin/pack-objects.c:2650
+#: builtin/pack-objects.c:2640
msgid "output pack to stdout"
msgstr "emet el paquet a stdout"
-#: builtin/pack-objects.c:2652
+#: builtin/pack-objects.c:2642
msgid "include tag objects that refer to objects to be packed"
msgstr ""
"inclou els objectes d'etiqueta que facin referència als objectes a empaquetar"
-#: builtin/pack-objects.c:2654
+#: builtin/pack-objects.c:2644
msgid "keep unreachable objects"
msgstr "retén els objectes inabastables"
-#: builtin/pack-objects.c:2655 parse-options.h:142
+#: builtin/pack-objects.c:2645 parse-options.h:142
msgid "time"
msgstr "hora"
-#: builtin/pack-objects.c:2656
+#: builtin/pack-objects.c:2646
msgid "unpack unreachable objects newer than <time>"
msgstr "desempaqueta els objectes inabastables més nous que <hora>"
-#: builtin/pack-objects.c:2659
+#: builtin/pack-objects.c:2649
msgid "create thin packs"
msgstr "crea paquets prims"
-#: builtin/pack-objects.c:2661
+#: builtin/pack-objects.c:2651
msgid "create packs suitable for shallow fetches"
msgstr "crea paquets adequats per a les obtencions superficials"
-#: builtin/pack-objects.c:2663
+#: builtin/pack-objects.c:2653
msgid "ignore packs that have companion .keep file"
msgstr "ignora els paquets que tinguin un fitxer .keep corresponent"
-#: builtin/pack-objects.c:2665
+#: builtin/pack-objects.c:2655
msgid "pack compression level"
msgstr "nivell de compressió de paquet"
-#: builtin/pack-objects.c:2667
+#: builtin/pack-objects.c:2657
msgid "do not hide commits by grafts"
msgstr "no amaguis les comissions per empelt"
-#: builtin/pack-objects.c:2669
+#: builtin/pack-objects.c:2659
msgid "use a bitmap index if available to speed up counting objects"
msgstr ""
"usa un índex de mapa de bits, si està disponible, per a accelerar el "
"recompte d'objectes"
-#: builtin/pack-objects.c:2671
+#: builtin/pack-objects.c:2661
msgid "write a bitmap index together with the pack index"
msgstr "escriu un índex de mapa de bits junt amb l'índex de paquet"
-#: builtin/pack-objects.c:2762
+#: builtin/pack-objects.c:2752
msgid "Counting objects"
msgstr "Comptant els objectes"
@@ -8689,49 +8955,53 @@ msgstr "fes caducar els objectes més vells que <hora>"
msgid "cannot prune in a precious-objects repo"
msgstr "no es pot podar en un dipòsit d'objectes precioses"
-#: builtin/pull.c:69
+#: builtin/pull.c:72
msgid "git pull [<options>] [<repository> [<refspec>...]]"
msgstr "git pull [opcions] [<dipòsit> [<especificació-de-referència>...]]"
-#: builtin/pull.c:113
+#: builtin/pull.c:117
msgid "Options related to merging"
msgstr "Opcions relacionades amb fusionar"
-#: builtin/pull.c:116
+#: builtin/pull.c:120
msgid "incorporate changes by rebasing rather than merging"
msgstr "incorpora els canvis per rebasar en lloc de fusionar"
-#: builtin/pull.c:140 builtin/revert.c:105
+#: builtin/pull.c:144 builtin/revert.c:105
msgid "allow fast-forward"
msgstr "permet l'avanç ràpid"
-#: builtin/pull.c:146
+#: builtin/pull.c:150
msgid "verify that the named commit has a valid GPG signature"
msgstr "verifica que la comissió anomenada tingui una firma GPG vàlida"
-#: builtin/pull.c:160
+#: builtin/pull.c:164
msgid "Options related to fetching"
msgstr "Opcions relacionades amb obtenir"
-#: builtin/pull.c:268
+#: builtin/pull.c:186
+msgid "number of submodules pulled in parallel"
+msgstr "nombre de submòduls baixats en paral·lel"
+
+#: builtin/pull.c:275
#, c-format
msgid "Invalid value for pull.ff: %s"
msgstr "Valor no vàlid per a pull.ff: %s"
-#: builtin/pull.c:352
+#: builtin/pull.c:359
msgid "Cannot pull with rebase: You have unstaged changes."
msgstr "No es pot baixar amb rebasament: Teniu canvis no allistats."
-#: builtin/pull.c:358
+#: builtin/pull.c:365
msgid "Additionally, your index contains uncommitted changes."
msgstr "Addicionalment, el vostre índex conté canvis sense cometre."
-#: builtin/pull.c:360
+#: builtin/pull.c:367
msgid "Cannot pull with rebase: Your index contains uncommitted changes."
msgstr ""
"No es pot baixar amb rebasament: El vostre índex conté canvis sense cometre."
-#: builtin/pull.c:436
+#: builtin/pull.c:443
msgid ""
"There is no candidate for rebasing against among the refs that you just "
"fetched."
@@ -8739,13 +9009,13 @@ msgstr ""
"No hi ha cap candidat sobre el qual rebasar entre les referències que acabeu "
"d'obtenir."
-#: builtin/pull.c:438
+#: builtin/pull.c:445
msgid ""
"There are no candidates for merging among the refs that you just fetched."
msgstr ""
"No hi ha candidats per a fusionar entre les referències que acabeu d'obtenir."
-#: builtin/pull.c:439
+#: builtin/pull.c:446
msgid ""
"Generally this means that you provided a wildcard refspec which had no\n"
"matches on the remote end."
@@ -8753,7 +9023,7 @@ msgstr ""
"Generalment això vol dir que heu proveït una especificació de\n"
"referència de comodí que no tenia cap coincidència en el costat remot."
-#: builtin/pull.c:442
+#: builtin/pull.c:449
#, c-format
msgid ""
"You asked to pull from the remote '%s', but did not specify\n"
@@ -8764,27 +9034,27 @@ msgstr ""
"Perquè aquest no és el remot configurat per defecte per a la vostra\n"
"branca actual, heu d'especificar una branca en la línia d'ordres."
-#: builtin/pull.c:447
+#: builtin/pull.c:454
msgid "You are not currently on a branch."
msgstr "Actualment no sou en cap branca."
-#: builtin/pull.c:449 builtin/pull.c:464
+#: builtin/pull.c:456 builtin/pull.c:471
msgid "Please specify which branch you want to rebase against."
msgstr "Si us plau, especifiqueu sobre què branca voleu rebasar."
-#: builtin/pull.c:451 builtin/pull.c:466
+#: builtin/pull.c:458 builtin/pull.c:473
msgid "Please specify which branch you want to merge with."
msgstr "Si us plau, especifiqueu amb què branca voleu fusionar."
-#: builtin/pull.c:452 builtin/pull.c:467
+#: builtin/pull.c:459 builtin/pull.c:474
msgid "See git-pull(1) for details."
msgstr "Vegeu git-pull(1) per detalls."
-#: builtin/pull.c:462
+#: builtin/pull.c:469
msgid "There is no tracking information for the current branch."
msgstr "No hi ha cap informació de seguiment per a la branca actual."
-#: builtin/pull.c:471
+#: builtin/pull.c:478
#, c-format
msgid ""
"If you wish to set tracking information for this branch you can do so with:\n"
@@ -8796,7 +9066,7 @@ msgstr ""
"\n"
" git branch --set-upstream-to=%s/<branca> %s\n"
-#: builtin/pull.c:476
+#: builtin/pull.c:483
#, c-format
msgid ""
"Your configuration specifies to merge with the ref '%s'\n"
@@ -8805,11 +9075,11 @@ msgstr ""
"La vostra configuració especifica fusionar amb la referència '%s'\n"
"del remot, però no s'ha obtingut tal referència."
-#: builtin/pull.c:830
+#: builtin/pull.c:841
msgid "Updating an unborn branch with changes added to the index."
msgstr "Actualitzant una branca no nascuda amb canvis afegits a l'índex."
-#: builtin/pull.c:859
+#: builtin/pull.c:870
#, c-format
msgid ""
"fetch updated the current branch head.\n"
@@ -8820,7 +9090,7 @@ msgstr ""
"avançant ràpidament el vostre arbre de treball des de\n"
"la comissió %s."
-#: builtin/pull.c:864
+#: builtin/pull.c:875
#, c-format
msgid ""
"Cannot fast-forward your working tree.\n"
@@ -8838,11 +9108,11 @@ msgstr ""
"$ git reset --hard\n"
"per a recuperar."
-#: builtin/pull.c:879
+#: builtin/pull.c:890
msgid "Cannot merge multiple branches into empty head."
msgstr "No es pot fusionar múltiples branques a un cap buit."
-#: builtin/pull.c:883
+#: builtin/pull.c:894
msgid "Cannot rebase onto multiple branches."
msgstr "No es pot rebasar sobre múltiples branques."
@@ -8850,15 +9120,15 @@ msgstr "No es pot rebasar sobre múltiples branques."
msgid "git push [<options>] [<repository> [<refspec>...]]"
msgstr "git push [<opcions>] [<dipòsit> [<especificació-de-referència>...]]"
-#: builtin/push.c:88
+#: builtin/push.c:89
msgid "tag shorthand without <tag>"
msgstr "abreviatura d'etiqueta sense <tag>"
-#: builtin/push.c:98
+#: builtin/push.c:99
msgid "--delete only accepts plain target ref names"
msgstr "--delete només accepta noms de referència de destí senzills"
-#: builtin/push.c:142
+#: builtin/push.c:143
msgid ""
"\n"
"To choose either option permanently, see push.default in 'git help config'."
@@ -8867,7 +9137,7 @@ msgstr ""
"Per a triar qualsevulla opció permanentment, vegeu push.default a 'git help "
"config'."
-#: builtin/push.c:145
+#: builtin/push.c:146
#, c-format
msgid ""
"The upstream branch of your current branch does not match\n"
@@ -8892,7 +9162,7 @@ msgstr ""
" git push %s %s\n"
"%s"
-#: builtin/push.c:160
+#: builtin/push.c:161
#, c-format
msgid ""
"You are not currently on a branch.\n"
@@ -8907,7 +9177,7 @@ msgstr ""
"\n"
" git push %s HEAD:<nom-de-branca-remota>\n"
-#: builtin/push.c:174
+#: builtin/push.c:175
#, c-format
msgid ""
"The current branch %s has no upstream branch.\n"
@@ -8920,12 +9190,12 @@ msgstr ""
"\n"
" git push --set-upstream %s %s\n"
-#: builtin/push.c:182
+#: builtin/push.c:183
#, c-format
msgid "The current branch %s has multiple upstream branches, refusing to push."
msgstr "La branca actual %s té múltiples branques fonts, refusant pujar."
-#: builtin/push.c:185
+#: builtin/push.c:186
#, c-format
msgid ""
"You are pushing to remote '%s', which is not the upstream of\n"
@@ -8936,61 +9206,14 @@ msgstr ""
"branca actual '%s', sense dir-me què pujar per a actualitzar\n"
"quina branca remota."
-#: builtin/push.c:208
-msgid ""
-"push.default is unset; its implicit value has changed in\n"
-"Git 2.0 from 'matching' to 'simple'. To squelch this message\n"
-"and maintain the traditional behavior, use:\n"
-"\n"
-" git config --global push.default matching\n"
-"\n"
-"To squelch this message and adopt the new behavior now, use:\n"
-"\n"
-" git config --global push.default simple\n"
-"\n"
-"When push.default is set to 'matching', git will push local branches\n"
-"to the remote branches that already exist with the same name.\n"
-"\n"
-"Since Git 2.0, Git defaults to the more conservative 'simple'\n"
-"behavior, which only pushes the current branch to the corresponding\n"
-"remote branch that 'git pull' uses to update the current branch.\n"
-"\n"
-"See 'git help config' and search for 'push.default' for further "
-"information.\n"
-"(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode\n"
-"'current' instead of 'simple' if you sometimes use older versions of Git)"
-msgstr ""
-"push.default no està establert; el seu valor implícit s'ha\n"
-"canviat en el Git 2.0 de 'matching' a 'simple'. Per a suprimir\n"
-"aquest missatge i mantenir el comportament tradicional,\n"
-"useu:\n"
-"\n"
-" git config --global push.default matching\n"
-"\n"
-"Per a suprimir aquest missatge i adoptar el comportament nou ara, useu:\n"
-"\n"
-" git config --global push.default simple\n"
-"\n"
-"Quan push.default és 'matching', git pujarà les branques locals a les\n"
-"branques remotes que ja existeixen amb el mateix nom.\n"
-"\n"
-"Des del Git 2.0, el Git per defecte té el comportament més\n"
-"conservatiu 'simple', que només puja la branca actual a la branca\n"
-"corresponent que 'git pull' usa per a actualitzar la branca actual.\n"
-"\n"
-"Vegeu 'git help config' i cerqueu 'push.default' per a més informació.\n"
-"(s'ha introduït el mode 'simple' en el Git 1.7.11. Useu el mode similar\n"
-"'current' en lloc de 'simple' si a vegades useu versions més antigues\n"
-"del Git)"
-
-#: builtin/push.c:275
+#: builtin/push.c:242
msgid ""
"You didn't specify any refspecs to push, and push.default is \"nothing\"."
msgstr ""
"No heu especificat cap especificació de referència a pujar, i push.default "
"és \"nothing\"."
-#: builtin/push.c:282
+#: builtin/push.c:249
msgid ""
"Updates were rejected because the tip of your current branch is behind\n"
"its remote counterpart. Integrate the remote changes (e.g.\n"
@@ -9002,7 +9225,7 @@ msgstr ""
"els canvis remots (per exemple, 'git pull ...') abans de pujar de nou.\n"
"Vegeu la 'Nota sobre avanços ràpids' a 'git push --help' per detalls."
-#: builtin/push.c:288
+#: builtin/push.c:255
msgid ""
"Updates were rejected because a pushed branch tip is behind its remote\n"
"counterpart. Check out this branch and integrate the remote changes\n"
@@ -9015,7 +9238,7 @@ msgstr ""
"abans de pujar de nou.\n"
"Vegeu la 'Nota sobre avanços ràpids' a 'git push --help' per detalls."
-#: builtin/push.c:294
+#: builtin/push.c:261
msgid ""
"Updates were rejected because the remote contains work that you do\n"
"not have locally. This is usually caused by another repository pushing\n"
@@ -9030,12 +9253,12 @@ msgstr ""
"pujar de nou.\n"
"Vegeu la 'Nota sobre avanços ràpids' a 'git push --help' per detalls."
-#: builtin/push.c:301
+#: builtin/push.c:268
msgid "Updates were rejected because the tag already exists in the remote."
msgstr ""
"S'han rebutjat les actualitzacions perquè l'etiqueta ja existeix en el remot."
-#: builtin/push.c:304
+#: builtin/push.c:271
msgid ""
"You cannot update a remote ref that points at a non-commit object,\n"
"or update a remote ref to make it point at a non-commit object,\n"
@@ -9046,22 +9269,22 @@ msgstr ""
"fer que assenyali un objecte no de comissió, sense usar l'opció\n"
"'--force'.\n"
-#: builtin/push.c:363
+#: builtin/push.c:331
#, c-format
msgid "Pushing to %s\n"
msgstr "Pujant a %s\n"
-#: builtin/push.c:367
+#: builtin/push.c:335
#, c-format
msgid "failed to push some refs to '%s'"
msgstr "s'ha fallat en pujar algunes referències a '%s'"
-#: builtin/push.c:397
+#: builtin/push.c:365
#, c-format
msgid "bad repository '%s'"
msgstr "dipòsit dolent '%s'"
-#: builtin/push.c:398
+#: builtin/push.c:366
msgid ""
"No configured push destination.\n"
"Either specify the URL from the command-line or configure a remote "
@@ -9083,104 +9306,100 @@ msgstr ""
"\n"
" git push <nom>\n"
-#: builtin/push.c:413
+#: builtin/push.c:381
msgid "--all and --tags are incompatible"
msgstr "--all i --tags són incompatibles"
-#: builtin/push.c:414
+#: builtin/push.c:382
msgid "--all can't be combined with refspecs"
msgstr "--all no es pot combinar amb especificacions de referència"
-#: builtin/push.c:419
+#: builtin/push.c:387
msgid "--mirror and --tags are incompatible"
msgstr "--mirror i --tags són incompatibles"
-#: builtin/push.c:420
+#: builtin/push.c:388
msgid "--mirror can't be combined with refspecs"
msgstr "--mirror no es pot combinar amb especificacions de referència"
-#: builtin/push.c:425
+#: builtin/push.c:393
msgid "--all and --mirror are incompatible"
msgstr "--all i --mirror són incompatibles"
-#: builtin/push.c:537
+#: builtin/push.c:505
msgid "repository"
msgstr "dipòsit"
-#: builtin/push.c:538 builtin/send-pack.c:161
+#: builtin/push.c:506 builtin/send-pack.c:161
msgid "push all refs"
msgstr "puja totes les referències"
-#: builtin/push.c:539 builtin/send-pack.c:163
+#: builtin/push.c:507 builtin/send-pack.c:163
msgid "mirror all refs"
msgstr "reflecteix totes les referències"
-#: builtin/push.c:541
+#: builtin/push.c:509
msgid "delete refs"
msgstr "suprimeix les referències"
-#: builtin/push.c:542
+#: builtin/push.c:510
msgid "push tags (can't be used with --all or --mirror)"
msgstr "puja les etiquetes (no es pot usar amb --all o --mirror)"
-#: builtin/push.c:545 builtin/send-pack.c:164
+#: builtin/push.c:513 builtin/send-pack.c:164
msgid "force updates"
msgstr "força les actualitzacions"
-#: builtin/push.c:547 builtin/send-pack.c:175
+#: builtin/push.c:515 builtin/send-pack.c:175
msgid "refname>:<expect"
msgstr "nom-de-referència>:<esperat"
-#: builtin/push.c:548 builtin/send-pack.c:176
+#: builtin/push.c:516 builtin/send-pack.c:176
msgid "require old value of ref to be at this value"
msgstr "requereix que el valor antic de la referència sigui d'aquest valor"
-#: builtin/push.c:550
-msgid "check|on-demand|no"
-msgstr "comprova|sota demanda|no"
-
-#: builtin/push.c:551
+#: builtin/push.c:519
msgid "control recursive pushing of submodules"
msgstr "controla la pujada recursiva dels submòduls"
-#: builtin/push.c:553 builtin/send-pack.c:169
+#: builtin/push.c:521 builtin/send-pack.c:169
msgid "use thin pack"
msgstr "usa el paquet prim"
-#: builtin/push.c:554 builtin/push.c:555 builtin/send-pack.c:158
+#: builtin/push.c:522 builtin/push.c:523 builtin/send-pack.c:158
#: builtin/send-pack.c:159
msgid "receive pack program"
msgstr "programa que rep els paquets"
-#: builtin/push.c:556
+#: builtin/push.c:524
msgid "set upstream for git pull/status"
msgstr "estableix la font per a git pull/status"
-#: builtin/push.c:559
+#: builtin/push.c:527
msgid "prune locally removed refs"
msgstr "poda les referències eliminades localment"
-#: builtin/push.c:561
+#: builtin/push.c:529
msgid "bypass pre-push hook"
msgstr "evita el ganxo de prepujada"
-#: builtin/push.c:562
+#: builtin/push.c:530
msgid "push missing but relevant tags"
msgstr "puja les etiquetes absents però rellevants"
-#: builtin/push.c:565 builtin/send-pack.c:166
+#: builtin/push.c:533 builtin/send-pack.c:166
msgid "GPG sign the push"
msgstr "firma la pujada amb GPG"
-#: builtin/push.c:567 builtin/send-pack.c:170
+#: builtin/push.c:535 builtin/send-pack.c:170
msgid "request atomic transaction on remote side"
msgstr "demana una transacció atòmica al costat remot"
-#: builtin/push.c:577
+#: builtin/push.c:549
msgid "--delete is incompatible with --all, --mirror and --tags"
msgstr "--delete és incompatible amb --all, --mirror i --tags"
-#: builtin/push.c:579
+#: builtin/push.c:551
msgid "--delete doesn't make sense without any refs"
msgstr "--delete no té sentit sense referències"
@@ -9258,12 +9477,12 @@ msgstr "salta l'aplicació del filtre d'agafament dispers"
msgid "debug unpack-trees"
msgstr "depura unpack-trees"
-#: builtin/reflog.c:428
+#: builtin/reflog.c:423
#, c-format
msgid "'%s' for '%s' is not a valid timestamp"
msgstr "'%s' per a '%s' no és una marca de temps vàlida"
-#: builtin/reflog.c:545 builtin/reflog.c:550
+#: builtin/reflog.c:540 builtin/reflog.c:545
#, c-format
msgid "'%s' is not a valid timestamp"
msgstr "'%s' no és una marca de temps vàlida"
@@ -9406,56 +9625,46 @@ msgid "specifying branches to track makes sense only with fetch mirrors"
msgstr ""
"especificar les branques a seguir té sentit només amb miralls d'obtenció"
-#: builtin/remote.c:193 builtin/remote.c:643
+#: builtin/remote.c:190 builtin/remote.c:633
#, c-format
msgid "remote %s already exists."
msgstr "el remot %s ja existeix."
-#: builtin/remote.c:197 builtin/remote.c:647
+#: builtin/remote.c:194 builtin/remote.c:637
#, c-format
msgid "'%s' is not a valid remote name"
msgstr "'%s' no és un nom de remot vàlid"
-#: builtin/remote.c:241
+#: builtin/remote.c:234
#, c-format
msgid "Could not setup master '%s'"
msgstr "No s'ha pogut configurar la mestra '%s'"
-#: builtin/remote.c:341
+#: builtin/remote.c:336
#, c-format
msgid "Could not get fetch map for refspec %s"
msgstr ""
"No s'ha pogut obtenir el mapa d'obtenció de l'especificació de referència %s"
-#: builtin/remote.c:442 builtin/remote.c:450
+#: builtin/remote.c:437 builtin/remote.c:445
msgid "(matching)"
msgstr "(coincident)"
-#: builtin/remote.c:454
+#: builtin/remote.c:449
msgid "(delete)"
msgstr "(suprimir)"
-#: builtin/remote.c:594 builtin/remote.c:600 builtin/remote.c:606
-#, c-format
-msgid "Could not append '%s' to '%s'"
-msgstr "No s'ha pogut annexar '%s' a '%s'"
-
-#: builtin/remote.c:636 builtin/remote.c:775 builtin/remote.c:875
+#: builtin/remote.c:626 builtin/remote.c:761 builtin/remote.c:858
#, c-format
msgid "No such remote: %s"
msgstr "No hi ha tal remot: %s"
-#: builtin/remote.c:653
+#: builtin/remote.c:643
#, c-format
msgid "Could not rename config section '%s' to '%s'"
msgstr "No s'ha pogut canviar el nom de la secció de configuració '%s' a '%s'"
-#: builtin/remote.c:659 builtin/remote.c:827
-#, c-format
-msgid "Could not remove config section '%s'"
-msgstr "No s'ha pogut eliminar la secció de configuració '%s'"
-
-#: builtin/remote.c:674
+#: builtin/remote.c:663
#, c-format
msgid ""
"Not updating non-default fetch refspec\n"
@@ -9466,27 +9675,17 @@ msgstr ""
"\t%s\n"
"\tSi us plau, actualitzeu la configuració manualment si és necessari."
-#: builtin/remote.c:680
-#, c-format
-msgid "Could not append '%s'"
-msgstr "No s'ha pogut annexar '%s'"
-
-#: builtin/remote.c:691
-#, c-format
-msgid "Could not set '%s'"
-msgstr "No s'ha pogut establir '%s'"
-
-#: builtin/remote.c:713
+#: builtin/remote.c:699
#, c-format
msgid "deleting '%s' failed"
msgstr "la supressió de '%s' ha fallat"
-#: builtin/remote.c:747
+#: builtin/remote.c:733
#, c-format
msgid "creating '%s' failed"
msgstr "la creació de '%s' ha fallat"
-#: builtin/remote.c:813
+#: builtin/remote.c:796
msgid ""
"Note: A branch outside the refs/remotes/ hierarchy was not removed;\n"
"to delete it, use:"
@@ -9501,278 +9700,283 @@ msgstr[1] ""
"eliminat;\n"
"per a suprimir-les, useu:"
-#: builtin/remote.c:928
+#: builtin/remote.c:810
+#, c-format
+msgid "Could not remove config section '%s'"
+msgstr "No s'ha pogut eliminar la secció de configuració '%s'"
+
+#: builtin/remote.c:911
#, c-format
msgid " new (next fetch will store in remotes/%s)"
msgstr " nou (la pròxima obtenció emmagatzemarà a remotes/%s)"
-#: builtin/remote.c:931
+#: builtin/remote.c:914
msgid " tracked"
msgstr " seguit"
-#: builtin/remote.c:933
+#: builtin/remote.c:916
msgid " stale (use 'git remote prune' to remove)"
msgstr " estancat (useu 'git remote prune' per a eliminar)"
-#: builtin/remote.c:935
+#: builtin/remote.c:918
msgid " ???"
msgstr " ???"
-#: builtin/remote.c:976
+#: builtin/remote.c:959
#, c-format
msgid "invalid branch.%s.merge; cannot rebase onto > 1 branch"
msgstr "branch.%s.merge no vàlid; no es pot rebasar sobre > 1 branca"
-#: builtin/remote.c:983
+#: builtin/remote.c:967
#, c-format
-msgid "rebases onto remote %s"
-msgstr "es rebasa sobre el remot %s"
+msgid "rebases interactively onto remote %s"
+msgstr "es rebasa interactivament sobre el remot %s"
-#: builtin/remote.c:986
+#: builtin/remote.c:971
#, c-format
msgid " merges with remote %s"
msgstr "es fusiona amb el remot %s"
-#: builtin/remote.c:987
+#: builtin/remote.c:972
msgid " and with remote"
msgstr " i amb el remot"
-#: builtin/remote.c:989
+#: builtin/remote.c:974
#, c-format
msgid "merges with remote %s"
msgstr "es fusiona amb el remot %s"
-#: builtin/remote.c:990
+#: builtin/remote.c:975
msgid " and with remote"
msgstr " i amb el remot"
-#: builtin/remote.c:1036
+#: builtin/remote.c:1021
msgid "create"
msgstr "crea"
-#: builtin/remote.c:1039
+#: builtin/remote.c:1024
msgid "delete"
msgstr "suprimeix"
-#: builtin/remote.c:1043
+#: builtin/remote.c:1028
msgid "up to date"
msgstr "al dia"
-#: builtin/remote.c:1046
+#: builtin/remote.c:1031
msgid "fast-forwardable"
msgstr "avanç ràpid possible"
-#: builtin/remote.c:1049
+#: builtin/remote.c:1034
msgid "local out of date"
msgstr "local no actualitzat"
-#: builtin/remote.c:1056
+#: builtin/remote.c:1041
#, c-format
msgid " %-*s forces to %-*s (%s)"
msgstr " %-*s força a %-*s (%s)"
-#: builtin/remote.c:1059
+#: builtin/remote.c:1044
#, c-format
msgid " %-*s pushes to %-*s (%s)"
msgstr " %-*s puja a %-*s (%s)"
-#: builtin/remote.c:1063
+#: builtin/remote.c:1048
#, c-format
msgid " %-*s forces to %s"
msgstr " %-*s força a %s"
-#: builtin/remote.c:1066
+#: builtin/remote.c:1051
#, c-format
msgid " %-*s pushes to %s"
msgstr " %-*s puja a %s"
-#: builtin/remote.c:1134
+#: builtin/remote.c:1119
msgid "do not query remotes"
msgstr "no consultis els remots"
-#: builtin/remote.c:1161
+#: builtin/remote.c:1146
#, c-format
msgid "* remote %s"
msgstr "* remot %s"
-#: builtin/remote.c:1162
+#: builtin/remote.c:1147
#, c-format
msgid " Fetch URL: %s"
msgstr " URL d'obtenció: %s"
-#: builtin/remote.c:1163 builtin/remote.c:1314
+#: builtin/remote.c:1148 builtin/remote.c:1299
msgid "(no URL)"
msgstr "(sense URL)"
-#: builtin/remote.c:1172 builtin/remote.c:1174
+#: builtin/remote.c:1157 builtin/remote.c:1159
#, c-format
msgid " Push URL: %s"
msgstr " URL de pujada: %s"
-#: builtin/remote.c:1176 builtin/remote.c:1178 builtin/remote.c:1180
+#: builtin/remote.c:1161 builtin/remote.c:1163 builtin/remote.c:1165
#, c-format
msgid " HEAD branch: %s"
msgstr " Branca de HEAD: %s"
-#: builtin/remote.c:1182
+#: builtin/remote.c:1167
#, c-format
msgid ""
" HEAD branch (remote HEAD is ambiguous, may be one of the following):\n"
msgstr ""
" Branca de HEAD (el HEAD remot és ambigu, pot ser un dels següents):\n"
-#: builtin/remote.c:1194
+#: builtin/remote.c:1179
#, c-format
msgid " Remote branch:%s"
msgid_plural " Remote branches:%s"
msgstr[0] " Branca remota:%s"
msgstr[1] " Branques remotes:%s"
-#: builtin/remote.c:1197 builtin/remote.c:1224
+#: builtin/remote.c:1182 builtin/remote.c:1209
msgid " (status not queried)"
msgstr " (estat no consultat)"
-#: builtin/remote.c:1206
+#: builtin/remote.c:1191
msgid " Local branch configured for 'git pull':"
msgid_plural " Local branches configured for 'git pull':"
msgstr[0] " Branca local configurada per a 'git pull':"
msgstr[1] " Branques locals configurades per a 'git pull':"
-#: builtin/remote.c:1214
+#: builtin/remote.c:1199
msgid " Local refs will be mirrored by 'git push'"
msgstr " 'git push' reflectirà les referències locals"
-#: builtin/remote.c:1221
+#: builtin/remote.c:1206
#, c-format
msgid " Local ref configured for 'git push'%s:"
msgid_plural " Local refs configured for 'git push'%s:"
msgstr[0] " Referència local configurada per a 'git push'%s:"
msgstr[1] " Referències locals configurades per a 'git push'%s:"
-#: builtin/remote.c:1242
+#: builtin/remote.c:1227
msgid "set refs/remotes/<name>/HEAD according to remote"
msgstr "estableix refs/remotes/<name>/HEAD segons el remot"
-#: builtin/remote.c:1244
+#: builtin/remote.c:1229
msgid "delete refs/remotes/<name>/HEAD"
msgstr "suprimeix refs/remotes/<name>/HEAD"
-#: builtin/remote.c:1259
+#: builtin/remote.c:1244
msgid "Cannot determine remote HEAD"
msgstr "No es pot determinar el HEAD remot"
-#: builtin/remote.c:1261
+#: builtin/remote.c:1246
msgid "Multiple remote HEAD branches. Please choose one explicitly with:"
msgstr ""
"Múltiples branques de HEAD remotes. Si us plau, trieu-ne una explícitament "
"amb:"
-#: builtin/remote.c:1271
+#: builtin/remote.c:1256
#, c-format
msgid "Could not delete %s"
msgstr "No s'ha pogut suprimir %s"
-#: builtin/remote.c:1279
+#: builtin/remote.c:1264
#, c-format
msgid "Not a valid ref: %s"
msgstr "No és una referència vàlida: %s"
-#: builtin/remote.c:1281
+#: builtin/remote.c:1266
#, c-format
msgid "Could not setup %s"
msgstr "No s'ha pogut configurar %s"
-#: builtin/remote.c:1299
+#: builtin/remote.c:1284
#, c-format
msgid " %s will become dangling!"
msgstr " %s es tornarà penjant!"
-#: builtin/remote.c:1300
+#: builtin/remote.c:1285
#, c-format
msgid " %s has become dangling!"
msgstr " %s s'ha tornat penjant!"
-#: builtin/remote.c:1310
+#: builtin/remote.c:1295
#, c-format
msgid "Pruning %s"
msgstr "Podant %s"
-#: builtin/remote.c:1311
+#: builtin/remote.c:1296
#, c-format
msgid "URL: %s"
msgstr "URL: %s"
-#: builtin/remote.c:1327
+#: builtin/remote.c:1312
#, c-format
msgid " * [would prune] %s"
msgstr " * [podaria] %s"
-#: builtin/remote.c:1330
+#: builtin/remote.c:1315
#, c-format
msgid " * [pruned] %s"
msgstr " * [podat] %s"
-#: builtin/remote.c:1375
+#: builtin/remote.c:1360
msgid "prune remotes after fetching"
msgstr "poda els remots després d'obtenir-los"
-#: builtin/remote.c:1441 builtin/remote.c:1498 builtin/remote.c:1566
+#: builtin/remote.c:1423 builtin/remote.c:1477 builtin/remote.c:1545
#, c-format
msgid "No such remote '%s'"
msgstr "No hi ha tal remot '%s'"
-#: builtin/remote.c:1461
+#: builtin/remote.c:1439
msgid "add branch"
msgstr "afegeix branca"
-#: builtin/remote.c:1468
+#: builtin/remote.c:1446
msgid "no remote specified"
msgstr "cap remot especificat"
-#: builtin/remote.c:1485
+#: builtin/remote.c:1463
msgid "query push URLs rather than fetch URLs"
msgstr "consulta els URL de pujada en lloc dels URL d'obteniment"
-#: builtin/remote.c:1487
+#: builtin/remote.c:1465
msgid "return all URLs"
msgstr "retorna tots els URL"
-#: builtin/remote.c:1515
+#: builtin/remote.c:1493
#, c-format
msgid "no URLs configured for remote '%s'"
msgstr "cap URL configurat per al remot '%s'"
-#: builtin/remote.c:1541
+#: builtin/remote.c:1519
msgid "manipulate push URLs"
msgstr "manipula els URL de pujada"
-#: builtin/remote.c:1543
+#: builtin/remote.c:1521
msgid "add URL"
msgstr "afegeix URL"
-#: builtin/remote.c:1545
+#: builtin/remote.c:1523
msgid "delete URLs"
msgstr "suprimeix URLs"
-#: builtin/remote.c:1552
+#: builtin/remote.c:1530
msgid "--add --delete doesn't make sense"
msgstr "--add --delete no té sentit"
-#: builtin/remote.c:1592
+#: builtin/remote.c:1571
#, c-format
msgid "Invalid old URL pattern: %s"
msgstr "Patró d'URL antic no vàlid: %s"
-#: builtin/remote.c:1600
+#: builtin/remote.c:1579
#, c-format
msgid "No such URL found: %s"
msgstr "No s'ha trobat tal URL: %s"
-#: builtin/remote.c:1602
+#: builtin/remote.c:1581
msgid "Will not delete all non-push URLs"
msgstr "No se suprimiran tots els URL no de pujada"
-#: builtin/remote.c:1616
+#: builtin/remote.c:1595
msgid "be verbose; must be placed before a subcommand"
msgstr "sigues detallat; s'ha de col·locar abans d'una subordre"
@@ -10077,7 +10281,7 @@ msgstr "No s'ha pogut restablir el fitxer d'índex a la revisió '%s'."
msgid "Could not write new index file."
msgstr "No s'ha pogut escriure el fitxer d'índex nou."
-#: builtin/rev-list.c:354
+#: builtin/rev-list.c:350
msgid "rev-list does not support display of notes"
msgstr "el rev-list no permet mostrar notes"
@@ -10333,29 +10537,24 @@ msgstr "imprimeix l'estat des de l'ajudant remot"
msgid "git shortlog [<options>] [<revision-range>] [[--] [<path>...]]"
msgstr "git shortlog [<opcions>] [<rang-de-revisions>] [[--] [<camí>...]]"
-#: builtin/shortlog.c:131
-#, c-format
-msgid "Missing author: %s"
-msgstr "Manca l'autor: %s"
-
-#: builtin/shortlog.c:230
+#: builtin/shortlog.c:242
msgid "sort output according to the number of commits per author"
msgstr "ordena la sortida segons el nombre de comissions per autor"
-#: builtin/shortlog.c:232
+#: builtin/shortlog.c:244
msgid "Suppress commit descriptions, only provides commit count"
msgstr ""
"Omet les descripcions de comissió, només proveeix el recompte de comissions"
-#: builtin/shortlog.c:234
+#: builtin/shortlog.c:246
msgid "Show the email address of each author"
msgstr "Mostra l'adreça de correu electrònic de cada autor"
-#: builtin/shortlog.c:235
+#: builtin/shortlog.c:247
msgid "w[,i1[,i2]]"
msgstr "w[,i1[,i2]]"
-#: builtin/shortlog.c:236
+#: builtin/shortlog.c:248
msgid "Linewrap output"
msgstr "Ajusta les línies de la sortida"
@@ -10499,43 +10698,43 @@ msgstr ""
"salta i elimina totes les línies començant amb el caràcter de comentari"
#: builtin/stripspace.c:38
-msgid "prepend comment character and blank to each line"
-msgstr "anteposa el caràcter de comentari i espai blanc a cada línia"
+msgid "prepend comment character and space to each line"
+msgstr "anteposa el caràcter de comentari i un espai a cada línia"
-#: builtin/submodule--helper.c:79 builtin/submodule--helper.c:167
+#: builtin/submodule--helper.c:73 builtin/submodule--helper.c:161
msgid "alternative anchor for relative paths"
msgstr "àncora alternativa per als camins relatius"
-#: builtin/submodule--helper.c:84
+#: builtin/submodule--helper.c:78
msgid "git submodule--helper list [--prefix=<path>] [<path>...]"
msgstr "git submodule--helper list [--prefix=<camí>] [<camí>...]"
-#: builtin/submodule--helper.c:114
+#: builtin/submodule--helper.c:108
msgid "git submodule--helper name <path>"
msgstr "git submodule--helper name <camí>"
-#: builtin/submodule--helper.c:120
+#: builtin/submodule--helper.c:114
#, c-format
msgid "no submodule mapping found in .gitmodules for path '%s'"
msgstr "No s'ha trobat cap mapatge de submòdul a .gitmodules per al camí '%s'"
-#: builtin/submodule--helper.c:170
+#: builtin/submodule--helper.c:164
msgid "where the new submodule will be cloned to"
msgstr "a on es clonarà el submòdul nou"
-#: builtin/submodule--helper.c:173
+#: builtin/submodule--helper.c:167
msgid "name of the new submodule"
msgstr "nom del submòdul nou"
-#: builtin/submodule--helper.c:176
+#: builtin/submodule--helper.c:170
msgid "url where to clone the submodule from"
msgstr "url del qual clonar el submòdul"
-#: builtin/submodule--helper.c:182
+#: builtin/submodule--helper.c:176
msgid "depth for shallow clones"
msgstr "profunditat dels clons superficials"
-#: builtin/submodule--helper.c:188
+#: builtin/submodule--helper.c:182
msgid ""
"git submodule--helper clone [--prefix=<path>] [--quiet] [--reference "
"<repository>] [--name <name>] [--url <url>][--depth <depth>] [--] [<path>...]"
@@ -10544,37 +10743,37 @@ msgstr ""
"<dipòsit>] [--name <nom>] [--url <url>][--depth <profunditat>] [--] "
"[<camí>...]"
-#: builtin/submodule--helper.c:202 builtin/submodule--helper.c:208
-#: builtin/submodule--helper.c:216
+#: builtin/submodule--helper.c:196 builtin/submodule--helper.c:202
+#: builtin/submodule--helper.c:210
#, c-format
msgid "could not create directory '%s'"
msgstr "no s'ha pogut crear el directori '%s'"
-#: builtin/submodule--helper.c:204
+#: builtin/submodule--helper.c:198
#, c-format
msgid "clone of '%s' into submodule path '%s' failed"
msgstr "el clonatge de '%s' al camí de submòdul '%s' ha fallat"
-#: builtin/submodule--helper.c:227
+#: builtin/submodule--helper.c:221
#, c-format
msgid "cannot open file '%s'"
msgstr "no es pot obrir el fitxer '%s'"
-#: builtin/submodule--helper.c:232
+#: builtin/submodule--helper.c:226
#, c-format
msgid "could not close file %s"
msgstr "no s'ha pogut tancar el fitxer %s"
-#: builtin/submodule--helper.c:247
+#: builtin/submodule--helper.c:241
#, c-format
msgid "could not get submodule directory for '%s'"
msgstr "no s'ha pogut obtenir el directori de submòdul per a '%s'"
-#: builtin/submodule--helper.c:273
+#: builtin/submodule--helper.c:267
msgid "fatal: submodule--helper subcommand must be called with a subcommand"
msgstr "fatal: s'ha d'executar la subordre submodule--helper amb una subordre"
-#: builtin/submodule--helper.c:280
+#: builtin/submodule--helper.c:274
#, c-format
msgid "fatal: '%s' is not a valid submodule--helper subcommand"
msgstr "fatal: '%s' no és una subordre vàlida de submodule--helper"
@@ -10820,200 +11019,213 @@ msgstr "Etiqueta '%s' actualitzada (era %s)\n"
msgid "Unpacking objects"
msgstr "Desempaquetant objectes"
-#: builtin/update-index.c:70
+#: builtin/update-index.c:79
#, c-format
msgid "failed to create directory %s"
msgstr "s'ha fallat en crear el directori %s"
-#: builtin/update-index.c:76
+#: builtin/update-index.c:85
#, c-format
msgid "failed to stat %s"
msgstr "s'ha fallat en fer stat a %s"
-#: builtin/update-index.c:86
+#: builtin/update-index.c:95
#, c-format
msgid "failed to create file %s"
msgstr "s'ha fallat en crear el fitxer %s"
-#: builtin/update-index.c:94
+#: builtin/update-index.c:103
#, c-format
msgid "failed to delete file %s"
msgstr "s'ha fallat en suprimir el fitxer %s"
-#: builtin/update-index.c:101 builtin/update-index.c:203
+#: builtin/update-index.c:110 builtin/update-index.c:212
#, c-format
msgid "failed to delete directory %s"
msgstr "s'ha fallat en suprimir el directori %s"
-#: builtin/update-index.c:124
+#: builtin/update-index.c:133
#, c-format
-msgid "Testing "
-msgstr "Provant "
+msgid "Testing mtime in '%s' "
+msgstr "Provant mtime en '%s'"
-#: builtin/update-index.c:136
+#: builtin/update-index.c:145
msgid "directory stat info does not change after adding a new file"
msgstr ""
"la informació d'stat de directori no canvia després d'afegir un fitxer nou"
-#: builtin/update-index.c:149
+#: builtin/update-index.c:158
msgid "directory stat info does not change after adding a new directory"
msgstr ""
"la informació d'stat de directori no canvia després d'afegir un directori nou"
-#: builtin/update-index.c:162
+#: builtin/update-index.c:171
msgid "directory stat info changes after updating a file"
msgstr ""
"la informació d'stat de directori canvia després d'actualitzar un fitxer"
-#: builtin/update-index.c:173
+#: builtin/update-index.c:182
msgid "directory stat info changes after adding a file inside subdirectory"
msgstr ""
"la informació d'stat de directori canvia després d'afegir un fitxer dins "
"d'un subdirectori"
-#: builtin/update-index.c:184
+#: builtin/update-index.c:193
msgid "directory stat info does not change after deleting a file"
msgstr ""
"la informació d'stat de directori no canvia després de suprimir un fitxer"
-#: builtin/update-index.c:197
+#: builtin/update-index.c:206
msgid "directory stat info does not change after deleting a directory"
msgstr ""
"la informació d'stat de directori no canvia després de suprimir un directori"
-#: builtin/update-index.c:204
+#: builtin/update-index.c:213
msgid " OK"
msgstr " D'acord"
-#: builtin/update-index.c:564
+#: builtin/update-index.c:575
msgid "git update-index [<options>] [--] [<file>...]"
msgstr "git update-index [<opcions>] [--] [<fitxer>...]"
-#: builtin/update-index.c:918
+#: builtin/update-index.c:930
msgid "continue refresh even when index needs update"
msgstr ""
"continua l'actualització encara que l'índex necessiti una actualització"
-#: builtin/update-index.c:921
+#: builtin/update-index.c:933
msgid "refresh: ignore submodules"
msgstr "actualitza: ignora els submòduls"
-#: builtin/update-index.c:924
+#: builtin/update-index.c:936
msgid "do not ignore new files"
msgstr "no ignoris els fitxers nous"
-#: builtin/update-index.c:926
+#: builtin/update-index.c:938
msgid "let files replace directories and vice-versa"
msgstr "deixa que els fitxers reemplacin els directoris i viceversa"
-#: builtin/update-index.c:928
+#: builtin/update-index.c:940
msgid "notice files missing from worktree"
msgstr "tingues en compte els fitxers absents de l'arbre de treball"
-#: builtin/update-index.c:930
+#: builtin/update-index.c:942
msgid "refresh even if index contains unmerged entries"
msgstr "actualitza encara que l'índex contingui entrades no fusionades"
-#: builtin/update-index.c:933
+#: builtin/update-index.c:945
msgid "refresh stat information"
msgstr "actualitza la informació d'estadístiques"
-#: builtin/update-index.c:937
+#: builtin/update-index.c:949
msgid "like --refresh, but ignore assume-unchanged setting"
msgstr "com --refresh, però ignora l'ajust assume-unchanged"
-#: builtin/update-index.c:941
+#: builtin/update-index.c:953
msgid "<mode>,<object>,<path>"
msgstr "<mode>,<objecte>,<camí>"
-#: builtin/update-index.c:942
+#: builtin/update-index.c:954
msgid "add the specified entry to the index"
msgstr "afegeix l'entrada especificada a l'índex"
-#: builtin/update-index.c:946
+#: builtin/update-index.c:958
msgid "(+/-)x"
msgstr "(+/-)x"
-#: builtin/update-index.c:947
+#: builtin/update-index.c:959
msgid "override the executable bit of the listed files"
msgstr "passa per alt el bit executable dels fitxers llistats"
-#: builtin/update-index.c:951
+#: builtin/update-index.c:963
msgid "mark files as \"not changing\""
msgstr "marca els fitxers com a \"no canviant\""
-#: builtin/update-index.c:954
+#: builtin/update-index.c:966
msgid "clear assumed-unchanged bit"
msgstr "neteja el bit assumed-unchanged"
-#: builtin/update-index.c:957
+#: builtin/update-index.c:969
msgid "mark files as \"index-only\""
msgstr "marca els fitxers com a \"només índex\""
-#: builtin/update-index.c:960
+#: builtin/update-index.c:972
msgid "clear skip-worktree bit"
msgstr "neteja el bit skip-worktree"
-#: builtin/update-index.c:963
+#: builtin/update-index.c:975
msgid "add to index only; do not add content to object database"
msgstr ""
"només afegeix a l'índex; no afegeixis el contingut a la base de dades "
"d'objectes"
-#: builtin/update-index.c:965
+#: builtin/update-index.c:977
msgid "remove named paths even if present in worktree"
msgstr ""
"elimina els camins anomenats encara que estiguin presents en l'arbre de "
"treball"
-#: builtin/update-index.c:967
+#: builtin/update-index.c:979
msgid "with --stdin: input lines are terminated by null bytes"
msgstr "amb --stdin: les línies d'entrada acaben amb octets nuls"
-#: builtin/update-index.c:969
+#: builtin/update-index.c:981
msgid "read list of paths to be updated from standard input"
msgstr "llegeix la llista de camins a actualitzar des de l'entrada estàndard"
-#: builtin/update-index.c:973
+#: builtin/update-index.c:985
msgid "add entries from standard input to the index"
msgstr "afegeix les entrades de l'entrada estàndard a l'índex"
-#: builtin/update-index.c:977
+#: builtin/update-index.c:989
msgid "repopulate stages #2 and #3 for the listed paths"
msgstr "reemplena les etapes #2 i #3 per als camins llistats"
-#: builtin/update-index.c:981
+#: builtin/update-index.c:993
msgid "only update entries that differ from HEAD"
msgstr "només actualitza les entrades que difereixin de HEAD"
-#: builtin/update-index.c:985
+#: builtin/update-index.c:997
msgid "ignore files missing from worktree"
msgstr "ignora els fitxers absents de l'arbre de treball"
-#: builtin/update-index.c:988
+#: builtin/update-index.c:1000
msgid "report actions to standard output"
msgstr "informa de les accions en la sortida estàndard"
-#: builtin/update-index.c:990
+#: builtin/update-index.c:1002
msgid "(for porcelains) forget saved unresolved conflicts"
msgstr "(per a porcellanes) oblida't dels conflictes no resolts ni desats"
-#: builtin/update-index.c:994
+#: builtin/update-index.c:1006
msgid "write index in this format"
msgstr "escriu l'índex en aquest format"
-#: builtin/update-index.c:996
+#: builtin/update-index.c:1008
msgid "enable or disable split index"
msgstr "habilita o inhabilita l'índex dividit"
-#: builtin/update-index.c:998
+#: builtin/update-index.c:1010
msgid "enable/disable untracked cache"
msgstr "habilita/inhabilita la memòria cau no seguida"
-#: builtin/update-index.c:1000
+#: builtin/update-index.c:1012
+msgid "test if the filesystem supports untracked cache"
+msgstr "prova si el sistema de fitxers admet la memòria cau no seguida"
+
+#: builtin/update-index.c:1014
msgid "enable untracked cache without testing the filesystem"
msgstr "habilita la memòria cau no seguida sense provar el sistema de fitxers"
+#: builtin/update-index.c:1134
+msgid "Untracked cache disabled"
+msgstr "La memòria cau no seguida està inhabilitada"
+
+#: builtin/update-index.c:1146
+#, c-format
+msgid "Untracked cache enabled for '%s'"
+msgstr "La memòria cau no seguida està habilitada per a '%s'"
+
#: builtin/update-ref.c:9
msgid "git update-ref [<options>] -d <refname> [<old-val>]"
msgstr "git update-ref [<opcions>] -d <nom-de-referència> [<valor-antic>]"
@@ -11132,33 +11344,33 @@ msgstr "s'ha fallat en eliminar: %s"
msgid "'%s' already exists"
msgstr "'%s' ja existeix"
-#: builtin/worktree.c:235
+#: builtin/worktree.c:233
#, c-format
msgid "could not create directory of '%s'"
msgstr "no s'ha pogut crear directori de '%s'"
-#: builtin/worktree.c:271
+#: builtin/worktree.c:269
#, c-format
msgid "Preparing %s (identifier %s)"
msgstr "Preparant %s (identificador %s)"
-#: builtin/worktree.c:319
+#: builtin/worktree.c:317
msgid "checkout <branch> even if already checked out in other worktree"
msgstr "agafa <branca> encara que sigui agafada en altre arbre de treball"
-#: builtin/worktree.c:321
+#: builtin/worktree.c:319
msgid "create a new branch"
msgstr "crea una branca nova"
-#: builtin/worktree.c:323
+#: builtin/worktree.c:321
msgid "create or reset a branch"
msgstr "crea o restableix una branca"
-#: builtin/worktree.c:324
+#: builtin/worktree.c:322
msgid "detach HEAD at named commit"
msgstr "separa el HEAD a la comissió anomenada"
-#: builtin/worktree.c:331
+#: builtin/worktree.c:329
msgid "-b, -B, and --detach are mutually exclusive"
msgstr "-b, -B i --detach són mutualment exclusius"
@@ -11178,7 +11390,7 @@ msgstr "escriu l'objecte d'arbre per a un subdirectori <prefix>"
msgid "only useful for debugging"
msgstr "només útil per a la depuració"
-#: credential-cache--daemon.c:255
+#: credential-cache--daemon.c:262
msgid "print debugging messages to stderr"
msgstr "imprimeix els missatges de depuració a stderr"
@@ -11193,6 +11405,10 @@ msgstr ""
"'git help <concepte>' per a llegir sobre una subordre o concepte\n"
"específic."
+#: http.c:321
+msgid "Public key pinning not supported with cURL < 7.44.0"
+msgstr "No s'admet l'enganx de clau pública amb cURL < 7.44.0"
+
#: common-cmds.h:9
msgid "start a working area (see also: git help tutorial)"
msgstr "començar una àrea de treball (vegeu també: git help tutorial)"
@@ -11276,8 +11492,8 @@ msgstr ""
"Actualitza les referències remotes juntament amb els objectes associats"
#: common-cmds.h:32
-msgid "Forward-port local commits to the updated upstream head"
-msgstr "Avança les comissions locals al cap font actualitzat"
+msgid "Reapply commits on top of another base tip"
+msgstr "Reaplica les comissions sobre un altre punt de basament"
#: common-cmds.h:33
msgid "Reset current HEAD to the specified state"
@@ -11506,7 +11722,7 @@ msgstr "no es pot canviar el significat del terme '$term'"
#: git-bisect.sh:606
#, sh-format
msgid "Invalid command: you're currently in a $TERM_BAD/$TERM_GOOD bisect."
-msgstr "Ordre invàlida: actualment esteu en una bisecció $TERM_BAD/$TERM_GOOD"
+msgstr "Ordre no vàlida: actualment esteu en una bisecció $TERM_BAD/$TERM_GOOD"
#: git-bisect.sh:636
msgid "no terms defined"
@@ -11518,7 +11734,7 @@ msgid ""
"invalid argument $arg for 'git bisect terms'.\n"
"Supported options are: --term-good|--term-old and --term-bad|--term-new."
msgstr ""
-"paràmetre invàlid $arg per a 'git bisect terms'.\n"
+"paràmetre no vàlid $arg per a 'git bisect terms'.\n"
"Les opcions admeses són: --term-good|--term-old i --term-bad|--term-new."
#: git-rebase.sh:57
@@ -11985,7 +12201,7 @@ msgstr "No s'ha pogut crear el directori de submòdul buit '$displaypath'"
msgid "Submodule '$name' ($url) unregistered for path '$displaypath'"
msgstr "Submòdul '$name' ($url) no registrat per al camí '$displaypath'"
-#: git-submodule.sh:705
+#: git-submodule.sh:723
#, sh-format
msgid ""
"Submodule path '$displaypath' not initialized\n"
@@ -11994,53 +12210,53 @@ msgstr ""
"Camí de submòdul '$displaypath' no inicialitzat\n"
"Potser voleu usar 'update --init'?"
-#: git-submodule.sh:718
+#: git-submodule.sh:736
#, sh-format
msgid "Unable to find current revision in submodule path '$displaypath'"
msgstr ""
"No s'ha pogut trobar la revisió actual en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:727
+#: git-submodule.sh:745
#, sh-format
msgid "Unable to fetch in submodule path '$sm_path'"
msgstr "No s'ha pogut obtenir en el camí de submòdul '$sm_path'"
-#: git-submodule.sh:751
+#: git-submodule.sh:768
#, sh-format
msgid "Unable to fetch in submodule path '$displaypath'"
msgstr "No s'ha pogut obtenir en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:765
+#: git-submodule.sh:788
#, sh-format
msgid "Unable to checkout '$sha1' in submodule path '$displaypath'"
msgstr "No s'ha pogut agafar '$sha1' en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:766
+#: git-submodule.sh:789
#, sh-format
msgid "Submodule path '$displaypath': checked out '$sha1'"
msgstr "Camí de submòdul '$displaypath': s'ha agafat '$sha1'"
-#: git-submodule.sh:770
+#: git-submodule.sh:793
#, sh-format
msgid "Unable to rebase '$sha1' in submodule path '$displaypath'"
msgstr "no s'ha pogut rebasar '$sha1' en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:771
+#: git-submodule.sh:794
#, sh-format
msgid "Submodule path '$displaypath': rebased into '$sha1'"
msgstr "Camí de submòdul '$displaypath': s'ha rebasat en '$sha1'"
-#: git-submodule.sh:776
+#: git-submodule.sh:799
#, sh-format
msgid "Unable to merge '$sha1' in submodule path '$displaypath'"
msgstr "No s'ha pogut fusionar '$sha1' en el camí de submòdul '$displaypath'"
-#: git-submodule.sh:777
+#: git-submodule.sh:800
#, sh-format
msgid "Submodule path '$displaypath': merged in '$sha1'"
msgstr "Camí de submòdul '$displaypath': s'ha fusionat en '$sha1'"
-#: git-submodule.sh:782
+#: git-submodule.sh:805
#, sh-format
msgid ""
"Execution of '$command $sha1' failed in submodule path '$prefix$sm_path'"
@@ -12048,50 +12264,50 @@ msgstr ""
"L'execució de '$command $sha1' ha fallat en el camí de submòdul '$prefix"
"$sm_path'"
-#: git-submodule.sh:783
+#: git-submodule.sh:806
#, sh-format
msgid "Submodule path '$prefix$sm_path': '$command $sha1'"
msgstr "Camí de submòdul '$prefix$sm_path': '$command $sha1'"
-#: git-submodule.sh:813
+#: git-submodule.sh:836
#, sh-format
msgid "Failed to recurse into submodule path '$displaypath'"
msgstr "S'ha fallat en recursar al camí de submòdul '$displaypath'"
-#: git-submodule.sh:921
+#: git-submodule.sh:944
msgid "The --cached option cannot be used with the --files option"
msgstr "L'opció --cached no es pot usar amb l'opció --files"
-#: git-submodule.sh:973
+#: git-submodule.sh:996
#, sh-format
msgid "unexpected mode $mod_dst"
msgstr "mode inesperat $mod_dst"
-#: git-submodule.sh:993
+#: git-submodule.sh:1016
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_src"
msgstr " Avís: $display_name no conté la comissió $sha1_src"
-#: git-submodule.sh:996
+#: git-submodule.sh:1019
#, sh-format
msgid " Warn: $display_name doesn't contain commit $sha1_dst"
msgstr " Avís: $display_name no conté la comissió $sha1_dst"
-#: git-submodule.sh:999
+#: git-submodule.sh:1022
#, sh-format
msgid " Warn: $display_name doesn't contain commits $sha1_src and $sha1_dst"
msgstr " Avís: $display_name no conté les comissions $sha1_src i $sha1_dst"
-#: git-submodule.sh:1024
+#: git-submodule.sh:1047
msgid "blob"
msgstr "blob"
-#: git-submodule.sh:1142
+#: git-submodule.sh:1165
#, sh-format
msgid "Failed to recurse into submodule path '$sm_path'"
msgstr "S'ha fallat en recursar al camí de submòdul '$sm_path'"
-#: git-submodule.sh:1206
+#: git-submodule.sh:1229
#, sh-format
msgid "Synchronizing submodule url for '$displaypath'"
msgstr "Sincronitzant l'url de submòdul per a '$displaypath'"
diff --git a/po/de.po b/po/de.po
index 8c5f05d..0eadf34 100644
--- a/po/de.po
+++ b/po/de.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Git\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2015-12-22 22:50+0800\n"
+"POT-Creation-Date: 2016-03-16 00:16+0800\n"
"PO-Revision-Date: 2015-01-21 15:01+0800\n"
"Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n"
"Language-Team: German <>\n"
@@ -31,7 +31,7 @@ msgstr ""
"dann 'git add/rm <Datei>', um die Auflösung entsprechend zu markieren\n"
"und zu committen."
-#: advice.c:101 builtin/merge.c:1225
+#: advice.c:101 builtin/merge.c:1226
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Sie haben Ihren Merge nicht abgeschlossen (MERGE_HEAD existiert)."
@@ -75,7 +75,7 @@ msgstr "Format"
msgid "archive format"
msgstr "Archivformat"
-#: archive.c:430 builtin/log.c:1229
+#: archive.c:430 builtin/log.c:1232
msgid "prefix"
msgstr "Präfix"
@@ -83,11 +83,11 @@ msgstr "Präfix"
msgid "prepend prefix to each pathname in the archive"
msgstr "einen Präfix vor jeden Pfadnamen in dem Archiv stellen"
-#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2535
-#: builtin/blame.c:2536 builtin/config.c:58 builtin/fast-export.c:987
-#: builtin/fast-export.c:989 builtin/grep.c:707 builtin/hash-object.c:99
-#: builtin/ls-files.c:446 builtin/ls-files.c:449 builtin/notes.c:395
-#: builtin/notes.c:558 builtin/read-tree.c:109 parse-options.h:153
+#: archive.c:432 builtin/archive.c:88 builtin/blame.c:2547
+#: builtin/blame.c:2548 builtin/config.c:60 builtin/fast-export.c:987
+#: builtin/fast-export.c:989 builtin/grep.c:720 builtin/hash-object.c:100
+#: builtin/ls-files.c:459 builtin/ls-files.c:462 builtin/notes.c:398
+#: builtin/notes.c:561 builtin/read-tree.c:109 parse-options.h:153
msgid "file"
msgstr "Datei"
@@ -119,7 +119,7 @@ msgstr "besser komprimieren"
msgid "list supported archive formats"
msgstr "unterstützte Archivformate auflisten"
-#: archive.c:451 builtin/archive.c:90 builtin/clone.c:77
+#: archive.c:451 builtin/archive.c:90 builtin/clone.c:78
msgid "repo"
msgstr "Repository"
@@ -127,7 +127,7 @@ msgstr "Repository"
msgid "retrieve the archive from remote repository <repo>"
msgstr "Archiv vom Remote-Repository <Repository> abrufen"
-#: archive.c:453 builtin/archive.c:92 builtin/notes.c:479
+#: archive.c:453 builtin/archive.c:92 builtin/notes.c:482
msgid "command"
msgstr "Programm"
@@ -135,7 +135,7 @@ msgstr "Programm"
msgid "path to the remote git-upload-archive command"
msgstr "Pfad zum externen \"git-upload-archive\"-Programm"
-#: attr.c:265
+#: attr.c:263
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -143,87 +143,105 @@ msgstr ""
"Verneinende Muster werden in Git-Attributen ignoriert.\n"
"Benutzen Sie '\\!' für führende Ausrufezeichen."
-#: branch.c:61
+#: branch.c:53
+#, c-format
+msgid ""
+"\n"
+"After fixing the error cause you may try to fix up\n"
+"the remote tracking information by invoking\n"
+"\"git branch --set-upstream-to=%s%s%s\"."
+msgstr ""
+"\n"
+"Nachdem Sie die Fehlerursache behoben haben, können Sie\n"
+"die Tracking-Informationen mit\n"
+"\"git branch --set-upstream-to=%s%s%s\"\n"
+"erneut setzen."
+
+#: branch.c:67
#, c-format
msgid "Not setting branch %s as its own upstream."
msgstr "Branch %s kann nicht sein eigener Upstream-Branch sein."
-#: branch.c:84
+#: branch.c:93
#, c-format
msgid "Branch %s set up to track remote branch %s from %s by rebasing."
msgstr ""
"Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s durch Rebase."
-#: branch.c:85
+#: branch.c:94
#, c-format
msgid "Branch %s set up to track remote branch %s from %s."
msgstr "Branch %s konfiguriert zum Folgen von Remote-Branch %s von %s."
-#: branch.c:89
+#: branch.c:98
#, c-format
msgid "Branch %s set up to track local branch %s by rebasing."
msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s durch Rebase."
-#: branch.c:90
+#: branch.c:99
#, c-format
msgid "Branch %s set up to track local branch %s."
msgstr "Branch %s konfiguriert zum Folgen von lokalem Branch %s."
-#: branch.c:95
+#: branch.c:104
#, c-format
msgid "Branch %s set up to track remote ref %s by rebasing."
msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s durch Rebase."
-#: branch.c:96
+#: branch.c:105
#, c-format
msgid "Branch %s set up to track remote ref %s."
msgstr "Branch %s konfiguriert zum Folgen von Remote-Referenz %s."
-#: branch.c:100
+#: branch.c:109
#, c-format
msgid "Branch %s set up to track local ref %s by rebasing."
msgstr ""
"Branch %s konfiguriert zum Folgen von lokaler Referenz %s durch Rebase."
-#: branch.c:101
+#: branch.c:110
#, c-format
msgid "Branch %s set up to track local ref %s."
msgstr "Branch %s konfiguriert zum Folgen von lokaler Referenz %s."
-#: branch.c:134
+#: branch.c:119
+msgid "Unable to write upstream branch configuration"
+msgstr "Konnte Konfiguration zu Upstream-Branch nicht schreiben."
+
+#: branch.c:156
#, c-format
msgid "Not tracking: ambiguous information for ref %s"
msgstr ""
"Konfiguration zum Folgen von Branch nicht eingerichtet. Referenz %s ist "
"mehrdeutig."
-#: branch.c:163
+#: branch.c:185
#, c-format
msgid "'%s' is not a valid branch name."
msgstr "'%s' ist kein gültiger Branchname."
-#: branch.c:168
+#: branch.c:190
#, c-format
msgid "A branch named '%s' already exists."
msgstr "Branch '%s' existiert bereits."
-#: branch.c:176
+#: branch.c:198
msgid "Cannot force update the current branch."
msgstr "Kann Aktualisierung des aktuellen Branches nicht erzwingen."
-#: branch.c:196
+#: branch.c:218
#, c-format
msgid "Cannot setup tracking information; starting point '%s' is not a branch."
msgstr ""
"Kann Tracking-Informationen nicht einrichten; Startpunkt '%s' ist kein "
"Branch."
-#: branch.c:198
+#: branch.c:220
#, c-format
msgid "the requested upstream branch '%s' does not exist"
msgstr "der angeforderte Upstream-Branch '%s' existiert nicht"
-#: branch.c:200
+#: branch.c:222
msgid ""
"\n"
"If you are planning on basing your work on an upstream\n"
@@ -244,22 +262,22 @@ msgstr ""
"\"git push -u\" verwenden, um den Upstream-Branch beim \"push\"\n"
"zu konfigurieren."
-#: branch.c:244
+#: branch.c:266
#, c-format
msgid "Not a valid object name: '%s'."
msgstr "Ungültiger Objekt-Name: '%s'"
-#: branch.c:264
+#: branch.c:286
#, c-format
msgid "Ambiguous object name: '%s'."
msgstr "mehrdeutiger Objekt-Name: '%s'"
-#: branch.c:269
+#: branch.c:291
#, c-format
msgid "Not a valid branch point: '%s'."
msgstr "Ungültiger Branchpunkt: '%s'"
-#: branch.c:322
+#: branch.c:344
#, c-format
msgid "'%s' is already checked out at '%s'"
msgstr "'%s' ist bereits in '%s' ausgecheckt"
@@ -283,10 +301,10 @@ msgstr "Konnte '%s' nicht öffnen"
msgid "Repository lacks these prerequisite commits:"
msgstr "Dem Repository fehlen folgende vorausgesetzte Commits:"
-#: bundle.c:163 ref-filter.c:1372 sequencer.c:636 sequencer.c:1083
-#: builtin/blame.c:2734 builtin/commit.c:1045 builtin/log.c:334
-#: builtin/log.c:849 builtin/log.c:1461 builtin/log.c:1694 builtin/merge.c:358
-#: builtin/shortlog.c:158
+#: bundle.c:163 ref-filter.c:1462 sequencer.c:627 sequencer.c:1074
+#: builtin/blame.c:2754 builtin/commit.c:1045 builtin/log.c:334
+#: builtin/log.c:852 builtin/log.c:1467 builtin/log.c:1700 builtin/merge.c:358
+#: builtin/shortlog.c:170
msgid "revision walk setup failed"
msgstr "Einrichtung des Revisionsgangs fehlgeschlagen"
@@ -325,7 +343,7 @@ msgstr "\"rev-list\" abgebrochen"
msgid "ref '%s' is excluded by the rev-list options"
msgstr "Referenz '%s' wird durch \"rev-list\" Optionen ausgeschlossen"
-#: bundle.c:443 builtin/log.c:157 builtin/log.c:1369 builtin/shortlog.c:261
+#: bundle.c:443 builtin/log.c:157 builtin/log.c:1372 builtin/shortlog.c:273
#, c-format
msgid "unrecognized argument: %s"
msgstr "nicht erkanntes Argument: %s"
@@ -348,8 +366,8 @@ msgstr "Erstellung der Paketindexdatei abgebrochen"
msgid "invalid color value: %.*s"
msgstr "Ungültiger Farbwert: %.*s"
-#: commit.c:40 builtin/am.c:452 builtin/am.c:488 builtin/am.c:1520
-#: builtin/am.c:2149
+#: commit.c:40 builtin/am.c:437 builtin/am.c:473 builtin/am.c:1505
+#: builtin/am.c:2135
#, c-format
msgid "could not parse %s"
msgstr "konnte %s nicht parsen"
@@ -363,63 +381,68 @@ msgstr "%s %s ist kein Commit!"
msgid "memory exhausted"
msgstr "Speicher verbraucht"
-#: config.c:474 config.c:476
+#: config.c:475 config.c:477
#, c-format
-msgid "bad config file line %d in %s"
-msgstr "Zeile %d in Konfigurationsdatei %s ist ungültig."
+msgid "bad config line %d in %s %s"
+msgstr "Zeile %d in Konfiguration %s %s ist ungültig."
-#: config.c:592
+#: config.c:593
#, c-format
-msgid "bad numeric config value '%s' for '%s' in %s: %s"
-msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s: %s"
+msgid "bad numeric config value '%s' for '%s' in %s %s: %s"
+msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s' in %s %s: %s"
-#: config.c:594
+#: config.c:595
#, c-format
msgid "bad numeric config value '%s' for '%s': %s"
msgstr "Ungültiger numerischer Wert '%s' für Konfiguration '%s': %s"
-#: config.c:679
+#: config.c:680
#, c-format
msgid "failed to expand user dir in: '%s'"
msgstr "Fehler beim Erweitern des Nutzerverzeichnisses in: '%s'"
-#: config.c:757 config.c:768
+#: config.c:758 config.c:769
#, c-format
msgid "bad zlib compression level %d"
msgstr "ungültiger zlib Komprimierungsgrad %d"
-#: config.c:890
+#: config.c:891
#, c-format
msgid "invalid mode for object creation: %s"
msgstr "Ungültiger Modus für Objekterstellung: %s"
-#: config.c:1216
+#: config.c:1220
msgid "unable to parse command-line config"
msgstr ""
-"Konnte die über die Kommandozeile angegebene Konfiguration nicht parsen."
+"Konnte die über die Befehlszeile angegebene Konfiguration nicht parsen."
-#: config.c:1277
+#: config.c:1281
msgid "unknown error occured while reading the configuration files"
msgstr ""
"Es trat ein unbekannter Fehler beim Lesen der Konfigurationsdateien auf."
-#: config.c:1601
+#: config.c:1629
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr ""
-"Konnte Wert '%s' aus der über die Kommandozeile angegebenen\n"
-"Konfiguration nicht parsen."
+"Konnte Wert '%s' aus der über die Befehlszeile angegebenen Konfiguration\n"
+"nicht parsen."
-#: config.c:1603
+#: config.c:1631
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "ungültige Konfigurationsvariable '%s' in Datei '%s' bei Zeile %d"
-#: config.c:1662
+#: config.c:1690
#, c-format
msgid "%s has multiple values"
msgstr "%s hat mehrere Werte"
+#: config.c:2226
+#, c-format
+msgid "Could not set '%s' to '%s'"
+msgstr "Konnte '%s' nicht zu '%s' setzen."
+
#: connected.c:69
msgid "Could not run 'git rev-list'"
msgstr "Konnte 'git rev-list' nicht ausführen"
@@ -536,16 +559,16 @@ msgstr ""
"Fe