diff options
317 files changed, 10680 insertions, 5996 deletions
diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index 0f8cccf52d..376d5ec4f8 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -328,9 +328,14 @@ For C programs: - When you come up with an API, document it. - - The first #include in C files, except in platform specific - compat/ implementations, should be git-compat-util.h or another - header file that includes it, such as cache.h or builtin.h. + - The first #include in C files, except in platform specific compat/ + implementations, must be either "git-compat-util.h", "cache.h" or + "builtin.h". You do not have to include more than one of these. + + - A C file must directly include the header files that declare the + functions and the types it uses, except for the functions and types + that are made available to it by including one of the header files + it must include by the previous rule. - If you are planning a new command, consider writing it in shell or perl first, so that changes in semantics can be easily @@ -464,6 +469,10 @@ Writing Documentation: --sort=<key> --abbrev[=<n>] + If a placeholder has multiple words, they are separated by dashes: + <new-branch-name> + --template=<template-directory> + Possibility of multiple occurrences is indicated by three dots: <file>... (One or more of <file>.) @@ -480,12 +489,12 @@ Writing Documentation: (Zero or more of <patch>. Note that the dots are inside, not outside the brackets.) - Multiple alternatives are indicated with vertical bar: + Multiple alternatives are indicated with vertical bars: [-q | --quiet] [--utf8 | --no-utf8] Parentheses are used for grouping: - [(<rev>|<range>)...] + [(<rev> | <range>)...] (Any number of either <rev> or <range>. Parens are needed to make it clear that "..." pertains to both <rev> and <range>.) @@ -517,7 +526,7 @@ Writing Documentation: `backticks around word phrases`, do so. `--pretty=oneline` `git rev-list` - `remote.pushdefault` + `remote.pushDefault` Word phrases enclosed in `backtick characters` are rendered literally and will not be further expanded. The use of `backticks` to achieve the diff --git a/Documentation/RelNotes/2.4.0.txt b/Documentation/RelNotes/2.4.0.txt new file mode 100644 index 0000000000..730c8f81c3 --- /dev/null +++ b/Documentation/RelNotes/2.4.0.txt @@ -0,0 +1,475 @@ +Git 2.4 Release Notes +===================== + +Backward compatibility warning(s) +--------------------------------- + +This release has a few changes in the user-visible output from +Porcelain commands, which the users may want to be aware of. + + * Output from "git log --decorate" (and "%d" format specifier used in + the userformat "--format=<string>" parameter "git log" family of + command takes) used to list "HEAD" just like other tips of branch + names, separated with a comma in between. E.g. + + $ git log --decorate -1 master + commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD, master) + ... + + This release updates the output slightly when HEAD refers to the tip + of a branch whose name is also shown in the output. The above is + shown as: + + $ git log --decorate -1 master + commit bdb0f6788fa5e3cacc4315e9ff318a27b2676ff4 (HEAD -> master) + ... + + * The phrasing "git branch" uses to describe a detached HEAD has been + updated to match that of "git status": + + - When the HEAD is at the same commit as it was originally + detached, they now both show "detached at <commit object name>". + + - When the HEAD has moved since it was originally detached, + they now both show "detached from <commit object name>". + + Earlier "git branch" always used "from" + + +Updates since v2.3 +------------------ + +Ports + + * Our default I/O size (8 MiB) for large files was too large for some + platforms with smaller SSIZE_MAX, leading to read(2)/write(2) + failures. + + * We did not check the curl library version before using + CURLOPT_PROXYAUTH feature that may not exist. + + * We now detect number of CPUs on older BSD-derived systems. + + * Portability fixes and workarounds for shell scripts have been added + to help BSD-derived systems. + + +UI, Workflows & Features + + * The command usage info strings given by "git cmd -h" and in + documentation have been tweaked for consistency. + + * The "sync" subcommand of "git p4" now allows users to exclude + subdirectories like its "clone" subcommand does. + + * "git log --invert-grep --grep=WIP" will show only commits that do + not have the string "WIP" in their messages. + + * "git push" has been taught a "--atomic" option that makes push to + update more than one ref an "all-or-none" affair. + + * Extending the "push to deploy" added in 2.3, the behaviour of "git + push" when updating the branch that is checked out can now be + tweaked by push-to-checkout hook. + + * Using environment variable LANGUAGE and friends on the client side, + HTTP-based transports now send Accept-Language when making requests. + + * "git send-email" used to accept a mistaken "y" (or "yes") as an + answer to "What encoding do you want to use [UTF-8]? " without + questioning. Now it asks for confirmation when the answer looks + too short to be a valid encoding name. + + * When "git apply --whitespace=fix" fixed whitespace errors in the + common context lines, the command reports that it did so. + + * "git status" now allows the "-v" to be given twice to show the + differences that are left in the working tree not to be committed. + + * "git cherry-pick" used to clean-up the log message even when it is + merely replaying an existing commit. It now replays the message + verbatim unless you are editing the message of resulting commits. + + * "git archive" can now be told to set the 'text' attribute in the + resulting zip archive. + + * Output from "git log --decorate" mentions HEAD when it points at a + tip of an branch differently from a detached HEAD. + + This is a potentially backward-incompatible change. + + * "git branch" on a detached HEAD always said "(detached from xyz)", + even when "git status" would report "detached at xyz". The HEAD is + actually at xyz and haven't been moved since it was detached in + such a case, but the user cannot read what the current value of + HEAD is when "detached from" is used. + + * "git -C '' subcmd" refused to work in the current directory, unlike + "cd ''" which silently behaves as a no-op. + (merge 6a536e2 kn/git-cd-to-empty later to maint). + + * The versionsort.prerelease configuration variable can be used to + specify that v1.0-pre1 comes before v1.0. + + * A new "push.followTags" configuration turns the "--follow-tags" + option on by default for the "git push" command. + + * "git log --graph --no-walk A B..." is a conflicting request that + asks nonsense; no-walk tells us show discrete points in the + history, while graph asks to draw connections between these + discrete points. Forbid the combination. + + * "git rev-list --bisect --first-parent" does not work (yet) and can + even cause SEGV; forbid it. "git log --bisect --first-parent" + would not be useful until "git bisect --first-parent" materializes, + so it is also forbidden for now. + + +Performance, Internal Implementation, Development Support etc. + + * Implementation of N_() macro has been updated slightly to help us + detect mistakes. + + * Implementation of "reflog expire" has been restructured to fit the + reflogs better with the recently updated ref API. + + * The transport-helper did not give transport options such as + verbosity, progress, cloning, etc. to import and export based + helpers, like it did for fetch and push based helpers, robbing them + the chance to honor the wish of the end-users better. + + * The tests that wanted to see that file becomes unreadable after + running "chmod a-r file", and the tests that wanted to make sure it + is not run as root, we used "can we write into the / directory?" as + a cheap substitute, but on some platforms that is not a good + heuristics. The tests and their prerequisites have been updated to + check what they really require. + (merge f400e51 jk/sanity later to maint). + + * Various issues around "reflog expire", e.g. using --updateref when + expiring a reflog for a symbolic reference, have been corrected + and/or made saner. + + * The strbuf API was explained between the API documentation and in + the header file. Move missing bits to strbuf.h so that programmers + can check only one place for all necessary information. + + * The error handling functions and conventions are now documented in + the API manual. + + * Optimize attribute look-up, mostly useful in "git grep" on a + project that does not use many attributes, by avoiding it when we + (should) know that the attributes are not defined in the first + place. + + * Typofix in comments. + (merge ef2956a ak/git-pm-typofix later to maint). + + * Code clean-up. + (merge 0b868f0 sb/hex-object-name-is-at-most-41-bytes-long later to maint). + (merge 5d30851 dp/remove-duplicated-header-inclusion later to maint). + + * Simplify the ref transaction API around how "the ref should be + pointing at this object" is specified. + + * Code in "git daemon" to parse out and hold hostnames used in + request interpolation has been simplified. + + * "git push" codepath has been restructured to make it easier to add + new configuration bits. + + * The run-command interface was easy to abuse and make a pipe for us + to read from the process, wait for the process to finish and then + attempt to read its output, which is a pattern that lead to a + deadlock. Fix such uses by introducing a helper to do this + correctly (i.e. we need to read first and then wait the process to + finish) and also add code to prevent such abuse in the run-command + helper. + + * People often forget to chain the commands in their test together + with &&, leaving a failure from an earlier command in the test go + unnoticed. The new GIT_TEST_CHAIN_LINT mechanism allows you to + catch such a mistake more easily. + + +Also contains various documentation updates and code clean-ups. + + +Fixes since v2.3 +---------------- + +Unless otherwise noted, all the fixes since v2.3 in the maintenance +track are contained in this release (see the maintenance releases' +notes for details). + + * "git blame HEAD -- missing" failed to correctly say "HEAD" when it + tried to say "No such path 'missing' in HEAD". + (merge a46442f jk/blame-commit-label later to maint). + + * "git rerere" (invoked internally from many mergy operations) did + not correctly signal errors when told to update the working tree + files and failed to do so for whatever reason. + (merge 89ea903 jn/rerere-fail-on-auto-update-failure later to maint). + + * Setting diff.submodule to 'log' made "git format-patch" produce + broken patches. + (merge 339de50 dk/format-patch-ignore-diff-submodule later to maint). + + * After attempting and failing a password-less authentication + (e.g. kerberos), libcURL refuses to fall back to password based + Basic authentication without a bit of help/encouragement. + (merge 4dbe664 bc/http-fallback-to-password-after-krb-fails later to maint). + + * The "git push" documentation made the "--repo=<there>" option + easily misunderstood. + (merge 57b92a7 mg/push-repo-option-doc later to maint). + + * Code to read branch name from various files in .git/ directory + would have misbehaved if the code to write them left an empty file. + (merge 66ec904 jk/status-read-branch-name-fix later to maint). + + * A misspelled conditional that is always true has been fixed. + (merge 94ee8e2 jk/remote-curl-an-array-in-struct-cannot-be-null later to maint). + + * The documentation incorrectly said that C(opy) and R(ename) are the + only ones that can be followed by the score number in the output in + the --raw format. + (merge ac1c2d9 jc/diff-format-doc later to maint). + + * A broken pack .idx file in the receiving repository prevented the + dumb http transport from fetching a good copy of it from the other + side. + (merge 8b9c2dd jk/dumb-http-idx-fetch-fix later to maint). + + * The error message from "git commit", when a non-existing author + name was given as value to the "--author=" parameter, has been + reworded to avoid misunderstanding. + (merge 1044b1f mg/commit-author-no-match-malformed-message later to maint). + + * "git log --help" used to show rev-list options that are irrelevant + to the "log" command. + (merge 3cab02d jc/doc-log-rev-list-options later to maint). + + * "git apply --whitespace=fix" used to under-allocate the memory when + the fix resulted in a longer text than the original patch. + (merge 407a792 jc/apply-ws-fix-expands later to maint). + + * The interactive "show a list and let the user choose from it" + interface "add -i" used showed and prompted to the user even when + the candidate list was empty, against which the only "choice" the + user could have made was to choose nothing. + (merge a9c4641 ak/add-i-empty-candidates later to maint). + + * The insn sheet "git rebase -i" creates did not fully honor + core.abbrev settings. + (merge edb72d5 ks/rebase-i-abbrev later to maint). + + * "git fetch" over a remote-helper that cannot respond to "list" + command could not fetch from a symbolic reference e.g. HEAD. + (merge 33cae54 mh/deref-symref-over-helper-transport later to maint). + + * "git push --signed" gave an incorrectly worded error message when + the other side did not support the capability. + (merge 45917f0 jc/push-cert later to maint). + + * We didn't format an integer that wouldn't fit in "int" but in + "uintmax_t" correctly. + (merge d306f3d jk/decimal-width-for-uintmax later to maint). + + * Reading configuration from a blob object, when it ends with a lone + CR, use to confuse the configuration parser. + (merge 1d0655c jk/config-no-ungetc-eof later to maint). + + * The pack bitmap support did not build with older versions of GCC. + (merge bd4e882 jk/pack-bitmap later to maint). + + * The documentation wasn't clear that "remote.<nick>.pushURL" and + "remote.<nick>.URL" are there to name the same repository accessed + via different transports, not two separate repositories. + (merge 697f652 jc/remote-set-url-doc later to maint). + + * Older GnuPG implementations may not correctly import the keyring + material we prepare for the tests to use. + (merge 1f985d6 ch/new-gpg-drops-rfc-1991 later to maint). + + * The credential helper for Windows (in contrib/) used to mishandle + a user name with an at-sign in it. + (merge 13d261e av/wincred-with-at-in-username-fix later to maint). + + * Longstanding configuration variable naming rules has been added to + the documentation. + (merge 35840a3 jc/conf-var-doc later to maint). + + * An earlier workaround to squelch unhelpful deprecation warnings + from the compiler on Mac OSX unnecessarily set minimum required + version of the OS, which the user might want to raise (or lower) + for other reasons. + (merge 88c03eb es/squelch-openssl-warnings-on-macosx later to maint). + + * Certain older vintages of cURL give irregular output from + "curl-config --vernum", which confused our build system. + (merge 3af6792 tc/curl-vernum-output-broken-in-7.11 later to maint). + + * In v2.2.0, we broke "git prune" that runs in a repository that + borrows from an alternate object store. + (merge b0a4264 jk/prune-mtime later to maint). + + * "git submodule add" failed to squash "path/to/././submodule" to + "path/to/submodule". + (merge 8196e72 ps/submodule-sanitize-path-upon-add later to maint). + + * "git merge-file" did not work correctly in a subdirectory. + (merge 204a8ff ab/merge-file-prefix later to maint). + + * "git blame" died, trying to free an uninitialized piece of memory. + (merge e600592 es/blame-commit-info-fix later to maint). + + * "git fast-import" used to crash when it could not close and + conclude the resulting packfile cleanly. + (merge 5e915f3 jk/fast-import-die-nicely-fix later to maint). + + * "update-index --refresh" used to leak when an entry cannot be + refreshed for whatever reason. + (merge bc1c2ca sb/plug-leak-in-make-cache-entry later to maint). + + * The "interpolated-path" option of "git daemon" inserted any string + client declared on the "host=" capability request without checking. + Sanitize and limit %H and %CH to a saner and a valid DNS name. + (merge b485373 jk/daemon-interpolate later to maint). + + * "git daemon" looked up the hostname even when "%CH" and "%IP" + interpolations are not requested, which was unnecessary. + (merge dc8edc8 rs/daemon-interpolate later to maint). + + * Even though we officially haven't dropped Perl 5.8 support, the + Getopt::Long package that came with it does not support "--no-" + prefix to negate a boolean option; manually add support to help + people with older Getopt::Long package. + (merge f471494 km/send-email-getopt-long-workarounds later to maint). + + * "git apply" was not very careful about reading from, removing, + updating and creating paths outside the working tree (under + --index/--cached) or the current directory (when used as a + replacement for GNU patch). + (merge e0d201b jc/apply-beyond-symlink later to maint). + + * A breakage to git-svn around v2.2 era that triggers premature + closing of FileHandle has been corrected. + (merge e426311 ew/svn-maint-fixes later to maint). + + * We did not parse username followed by literal IPv6 address in SSH + transport URLs, e.g. ssh://user@[2001:db8::1]:22/repo.git + correctly. + (merge 3f55cca tb/connect-ipv6-parse-fix later to maint). + + * The configuration variable 'mailinfo.scissors' was hard to + discover in the documentation. + (merge afb5de7 mm/am-c-doc later to maint). + + * The interaction between "git submodule update" and the + submodule.*.update configuration was not clearly documented. + (merge 5c31acf ms/submodule-update-config-doc later to maint). + + * "git diff --shortstat --dirstat=changes" showed a dirstat based on + lines that was never asked by the end user in addition to the + dirstat that the user asked for. + (merge ab27389 mk/diff-shortstat-dirstat-fix later to maint). + + * "git remote add" mentioned "--tags" and "--no-tags" and was not + clear that fetch from the remote in the future will use the default + behaviour when neither is given to override it. + (merge aaba0ab mg/doc-remote-tags-or-not later to maint). + + * Description given by "grep -h" for its --exclude-standard option + was phrased poorly. + (merge 77fdb8a nd/grep-exclude-standard-help-fix later to maint). + + * "git rebase -i" recently started to include the number of + commits in the insn sheet to be processed, but on a platform + that prepends leading whitespaces to "wc -l" output, the numbers + are shown with extra whitespaces that aren't necessary. + (merge 2185d3b es/rebase-i-count-todo later to maint). + + * The borrowed code in kwset API did not follow our usual convention + to use "unsigned char" to store values that range from 0-255. + (merge 189c860 bw/kwset-use-unsigned later to maint). + + * A corrupt input to "git diff -M" used to cause it to segfault. + (merge 4d6be03 jk/diffcore-rename-duplicate later to maint). + + * Certain builds of GPG triggered false breakages in a test. + (merge 3f88c1b mg/verify-commit later to maint). + + * "git imap-send" learned to optionally talk with an IMAP server via + libcURL; because there is no other option when Git is built with + NO_OPENSSL option, use that codepath by default under such + configuration. + (merge dcd01ea km/imap-send-libcurl-options later to maint). + + * "git log --decorate" did not reset colors correctly around the + branch names. + (merge 5ee8758 jc/decorate-leaky-separator-color later to maint). + + * The code that reads from the ctags file in the completion script + (in contrib/) did not spell ${param/pattern/string} substitution + correctly, which happened to work with bash but not with zsh. + (merge db8d750 js/completion-ctags-pattern-substitution-fix later to maint). + + * The transfer.hiderefs support did not quite work for smart-http + transport. + (merge 8ddf3ca jk/smart-http-hide-refs later to maint). + + * "git tag -h" used to show the "--column" and "--sort" options + that are about listing in a wrong section. + (merge dd059c6 jk/tag-h-column-is-a-listing-option later to maint). + + * "git prune" used to largely ignore broken refs when deciding which + objects are still being used, which could spread an existing small + damage and make it a larger one. + (merge ea56c4e jk/prune-with-corrupt-refs later to maint). + + * The split-index mode introduced at v2.3.0-rc0~41 was broken in the + codepath to protect us against a broken reimplementation of Git + that writes an invalid index with duplicated index entries, etc. + (merge 03f15a7 tg/fix-check-order-with-split-index later to maint). + + * "git fetch" that fetches a commit using the allow-tip-sha1-in-want + extension could have failed to fetch all the requested refs. + (merge 32d0462 jk/fetch-pack later to maint). + + * An failure early in the "git clone" that started creating the + working tree and repository could have resulted in some directories + and files left without getting cleaned up. + (merge 16eff6c jk/cleanup-failed-clone later to maint). + + * Recommend format-patch and send-email for those who want to submit + patches to this project. + (merge b25c469 jc/submitting-patches-mention-send-email later to maint). + + * Even though "git grep --quiet" is run merely to ask for the exit + status, we spawned the pager regardless. Stop doing that. + (merge c2048f0 ws/grep-quiet-no-pager later to maint). + + * The prompt script (in contrib/) did not show the untracked sign + when working in a subdirectory without any untracked files. + (merge 9bdc517 ct/prompt-untracked-fix later to maint). + + * Code cleanups and documentation updates. + (merge 2ce63e9 rs/simple-cleanups later to maint). + (merge 33baa69 rj/no-xopen-source-for-cygwin later to maint). + (merge 817d03e jc/diff-test-updates later to maint). + (merge eb32c66 ak/t5516-typofix later to maint). + (merge bcd57cb mr/doc-clean-f-f later to maint). + (merge 0d6accc mg/doc-status-color-slot later to maint). + (merge 53e53c7 sg/completion-remote later to maint). + (merge 8fa7975 ak/git-done-help-cleanup later to maint). + (merge 9a6f128 rs/deflate-init-cleanup later to maint). + (merge 6f75d45 rs/use-isxdigit later to maint). + (merge 376e4b3 jk/test-annoyances later to maint). + (merge 7032054 nd/doc-git-index-version later to maint). + (merge e869c5e tg/test-index-v4 later to maint). + (merge 599d223 jk/simplify-csum-file-sha1fd-check later to maint). + (merge 260d585 sg/completion-gitcomp-nl-for-refs later to maint). + (merge 777c55a jc/report-path-error-to-dir later to maint). + (merge fddfaf8 ph/push-doc-cas later to maint). + (merge 129260c ss/pull-rebase-preserve later to maint). diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.txt index 0cebc4f692..b299b59023 100644 --- a/Documentation/blame-options.txt +++ b/Documentation/blame-options.txt @@ -4,7 +4,7 @@ --root:: Do not treat root commits as boundaries. This can also be - controlled via the `blame.showroot` config option. + controlled via the `blame.showRoot` config option. --show-stats:: Include additional statistics at the end of blame output. diff --git a/Documentation/config.txt b/Documentation/config.txt index 1a8ddb41c7..2e5ceaf719 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -154,9 +154,8 @@ color:: `white`; the attributes are `bold`, `dim`, `ul`, `blink` and `reverse`. The first color given is the foreground; the second is the background. The position of the attribute, if - any, doesn't matter. Attributes may be turned off - specifically by prefixing them with `no` (e.g., `noreverse`, - `noul`, etc). + any, doesn't matter. Attributes may be turned off specifically + by prefixing them with `no` (e.g., `noreverse`, `noul`, etc). + Colors (foreground and background) may also be given as numbers between 0 and 255; these use ANSI 256-color mode (but note that not all @@ -270,7 +269,7 @@ See linkgit:git-update-index[1]. + The default is true (when core.filemode is not specified in the config file). -core.ignorecase:: +core.ignoreCase:: If true, this option enables various workarounds to enable Git to work better on filesystems that are not case sensitive, like FAT. For example, if a directory listing finds @@ -279,12 +278,12 @@ core.ignorecase:: "Makefile". + The default is false, except linkgit:git-clone[1] or linkgit:git-init[1] -will probe and set core.ignorecase true if appropriate when the repository +will probe and set core.ignoreCase true if appropriate when the repository is created. -core.precomposeunicode:: +core.precomposeUnicode:: This option is only used by Mac OS implementation of Git. - When core.precomposeunicode=true, Git reverts the unicode decomposition + When core.precomposeUnicode=true, Git reverts the unicode decomposition of filenames done by Mac OS. This is useful when sharing a repository between Mac OS and Linux or Windows. (Git for Windows 1.7.10 or higher is needed, or Git under cygwin 1.7). @@ -309,13 +308,13 @@ core.trustctime:: crawlers and some backup systems). See linkgit:git-update-index[1]. True by default. -core.checkstat:: +core.checkStat:: Determines which stat fields to match between the index and work tree. The user can set this to 'default' or 'minimal'. Default (or explicitly 'default'), is to check all fields, including the sub-second part of mtime and ctime. -core.quotepath:: +core.quotePath:: The commands that output paths (e.g. 'ls-files', 'diff'), when not given the `-z` option, will quote "unusual" characters in the pathname by enclosing the @@ -519,9 +518,9 @@ core.compression:: -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being slowest. If set, this provides a default to other compression variables, - such as 'core.loosecompression' and 'pack.compression'. + such as 'core.looseCompression' and 'pack.compression'. -core.loosecompression:: +core.looseCompression:: An integer -1..9, indicating the compression level for objects that are not in a pack file. -1 is the zlib default. 0 means no compression, and 1..9 are various speed/size tradeoffs, 9 being @@ -582,7 +581,7 @@ be delta compressed, but larger binary media files won't be. + Common unit suffixes of 'k', 'm', or 'g' are supported. -core.excludesfile:: +core.excludesFile:: In addition to '.gitignore' (per-directory) and '.git/info/exclude', Git looks into this file for patterns of files which are not meant to be tracked. "`~/`" is expanded @@ -591,7 +590,7 @@ core.excludesfile:: If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead. See linkgit:gitignore[5]. -core.askpass:: +core.askPass:: Some commands (e.g. svn and http interfaces) that interactively ask for a password can be told to use an external program given via the value of this variable. Can be overridden by the 'GIT_ASKPASS' @@ -600,11 +599,11 @@ core.askpass:: prompt. The external program shall be given a suitable prompt as command-line argument and write the password on its STDOUT. -core.attributesfile:: +core.attributesFile:: In addition to '.gitattributes' (per-directory) and '.git/info/attributes', Git looks into this file for attributes (see linkgit:gitattributes[5]). Path expansions are made the same - way as for `core.excludesfile`. Its default value is + way as for `core.excludesFile`. Its default value is $XDG_CONFIG_HOME/git/attributes. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/attributes is used instead. @@ -614,7 +613,7 @@ core.editor:: variable when it is set, and the environment variable `GIT_EDITOR` is not set. See linkgit:git-var[1]. -core.commentchar:: +core.commentChar:: Commands such as `commit` and `tag` that lets you edit messages consider a line that begins with this character commented, and removes them after the editor returns @@ -683,7 +682,7 @@ core.whitespace:: is relevant for `indent-with-non-tab` and when Git fixes `tab-in-indent` errors. The default tab width is 8. Allowed values are 1 to 63. -core.fsyncobjectfiles:: +core.fsyncObjectFiles:: This boolean will enable 'fsync()' when writing object files. + This is a total waste of time and effort on a filesystem that orders @@ -691,7 +690,7 @@ data writes properly, but can be useful for filesystems that do not use journalling (traditional UNIX filesystems) or that only journal metadata and not file contents (OS X's HFS+, or Linux ext3 with "data=writeback"). -core.preloadindex:: +core.preloadIndex:: Enable parallel index preload for operations like 'git diff' + This can speed up operations like 'git diff' and 'git status' especially @@ -762,7 +761,7 @@ am.keepcr:: by giving '--no-keep-cr' from the command line. See linkgit:git-am[1], linkgit:git-mailsplit[1]. -apply.ignorewhitespace:: +apply.ignoreWhitespace:: When set to 'change', tells 'git apply' to ignore changes in whitespace, in the same way as the '--ignore-space-change' option. @@ -774,7 +773,7 @@ apply.whitespace:: Tells 'git apply' how to handle whitespaces, in the same way as the '--whitespace' option. See linkgit:git-apply[1]. -branch.autosetupmerge:: +branch.autoSetupMerge:: Tells 'git branch' and 'git checkout' to set up new branches so that linkgit:git-pull[1] will appropriately merge from the starting point branch. Note that even if this option is not set, @@ -786,7 +785,7 @@ branch.autosetupmerge:: local branch or remote-tracking branch. This option defaults to true. -branch.autosetuprebase:: +branch.autoSetupRebase:: When a new branch is created with 'git branch' or 'git checkout' that tracks another branch, this variable tells Git to set up pull to rebase instead of merge (see "branch.<name>.rebase"). @@ -797,27 +796,27 @@ branch.autosetuprebase:: remote-tracking branches. When `always`, rebase will be set to true for all tracking branches. - See "branch.autosetupmerge" for details on how to set up a + See "branch.autoSetupMerge" for details on how to set up a branch to track another branch. This option defaults to never. branch.<name>.remote:: When on branch <name>, it tells 'git fetch' and 'git push' which remote to fetch from/push to. The remote to push to - may be overridden with `remote.pushdefault` (for all branches). + may be overridden with `remote.pushDefault` (for all branches). The remote to push to, for the current branch, may be further - overridden by `branch.<name>.pushremote`. If no remote is + overridden by `branch.<name>.pushRemote`. If no remote is configured, or if you are not on any branch, it defaults to - `origin` for fetching and `remote.pushdefault` for pushing. + `origin` for fetching and `remote.pushDefault` for pushing. Additionally, `.` (a period) is the current local repository (a dot-repository), see `branch.<name>.merge`'s final note below. -branch.<name>.pushremote:: +branch.<name>.pushRemote:: When on branch <name>, it overrides `branch.<name>.remote` for - pushing. It also overrides `remote.pushdefault` for pushing + pushing. It also overrides `remote.pushDefault` for pushing from branch <name>. When you pull from one place (e.g. your upstream) and push to another place (e.g. your own publishing - repository), you would want to set `remote.pushdefault` to + repository), you would want to set `remote.pushDefault` to specify the remote to push to for all branches, and use this option to override it for a specific branch. @@ -839,7 +838,7 @@ branch.<name>.merge:: branch.<name>.merge to the desired branch, and use the relative path setting `.` (a period) for branch.<name>.remote. -branch.<name>.mergeoptions:: +branch.<name>.mergeOptions:: Sets default options for merging into branch <name>. The syntax and supported options are the same as those of linkgit:git-merge[1], but option values containing whitespace characters are currently not @@ -965,7 +964,7 @@ color.pager:: A boolean to enable/disable colored output when the pager is in use (default is true). -color.showbranch:: +color.showBranch:: A boolean to enable/disable color in the output of linkgit:git-show-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used @@ -1065,7 +1064,7 @@ commit.cleanup:: have to remove the help lines that begin with `#` in the commit log template yourself, if you do this). -commit.gpgsign:: +commit.gpgSign:: A boolean to specify whether all commits should be GPG signed. Use of this option when doing operations such as rebase can @@ -1178,7 +1177,7 @@ format.cc:: by mail. See the --to and --cc options in linkgit:git-format-patch[1]. -format.subjectprefix:: +format.subjectPrefix:: The default for format-patch is to output files with the '[PATCH]' subject prefix. Use this variable to change that prefix. @@ -1188,7 +1187,7 @@ format.signature:: Set this variable to the empty string ("") to suppress signature generation. -format.signaturefile:: +format.signatureFile:: Works just like format.signature except the contents of the file specified by this variable will be used as the signature. @@ -1212,7 +1211,7 @@ format.thread:: A true boolean value is the same as `shallow`, and a false value disables threading. -format.signoff:: +format.signOff:: A boolean value which lets you enable the `-s/--signoff` option of format-patch by default. *Note:* Adding the Signed-off-by: line to a patch should be a conscious act and means that you certify you have @@ -1251,17 +1250,17 @@ gc.auto:: light-weight garbage collection from time to time. The default value is 6700. Setting this to 0 disables it. -gc.autopacklimit:: +gc.autoPackLimit:: When there are more than this many packs that are not marked with `*.keep` file in the repository, `git gc --auto` consolidates them into one larger pack. The default value is 50. Setting this to 0 disables it. -gc.autodetach:: +gc.autoDetach:: Make `git gc --auto` return immediately and run in background if the system supports it. Default is true. -gc.packrefs:: +gc.packRefs:: Running `git pack-refs` in a repository renders it unclonable by Git versions prior to 1.5.1.2 over dumb transports such as HTTP. This variable determines whether @@ -1269,38 +1268,38 @@ gc.packrefs:: to enable it within all non-bare repos or it can be set to a boolean value. The default is `true`. -gc.pruneexpire:: +gc.pruneExpire:: When 'git gc' is run, it will call 'prune --expire 2.weeks.ago'. Override the grace period with this config variable. The value "now" may be used to disable this grace period and always prune unreachable objects immediately. -gc.reflogexpire:: -gc.<pattern>.reflogexpire:: +gc.reflogExpire:: +gc.<pattern>.reflogExpire:: 'git reflog expire' removes reflog entries older than this time; defaults to 90 days. With "<pattern>" (e.g. "refs/stash") in the middle the setting applies only to the refs that match the <pattern>. -gc.reflogexpireunreachable:: -gc.<ref>.reflogexpireunreachable:: +gc.reflogExpireUnreachable:: +gc.<ref>.reflogExpireUnreachable:: 'git reflog expire' removes reflog entries older than this time and are not reachable from the current tip; defaults to 30 days. With "<pattern>" (e.g. "refs/stash") in the middle, the setting applies only to the refs that match the <pattern>. -gc.rerereresolved:: +gc.rerereResolved:: Records of conflicted merge you resolved earlier are kept for this many days when 'git rerere gc' is run. The default is 60 days. See linkgit:git-rerere[1]. -gc.rerereunresolved:: +gc.rerereUnresolved:: Records of conflicted merge you have not resolved are kept for this many days when 'git rerere gc' is run. The default is 15 days. See linkgit:git-rerere[1]. -gitcvs.commitmsgannotation:: +gitcvs.commitMsgAnnotation:: Append this string to each commit message. Set to empty string to disable this feature. Defaults to "via git-CVS emulator". @@ -1308,7 +1307,7 @@ gitcvs.enabled:: Whether the CVS server interface is enabled for this repository. See linkgit:git-cvsserver[1]. -gitcvs.logfile:: +gitcvs.logFile:: Path to a log file where the CVS server interface well... logs various stuff. See linkgit:git-cvsserver[1]. @@ -1320,10 +1319,10 @@ gitcvs.usecrlfattr:: treat it as text. If they suppress text conversion, the file will be set with '-kb' mode, which suppresses any newline munging the client might otherwise do. If the attributes do not allow - the file type to be determined, then 'gitcvs.allbinary' is + the file type to be determined, then 'gitcvs.allBinary' is used. See linkgit:gitattributes[5]. -gitcvs.allbinary:: +gitcvs.allBinary:: This is used if 'gitcvs.usecrlfattr' does not resolve the correct '-kb' mode to use. If true, all unresolved files are sent to the client in @@ -1333,7 +1332,7 @@ gitcvs.allbinary:: then the contents of the file are examined to decide if it is binary, similar to 'core.autocrlf'. -gitcvs.dbname:: +gitcvs.dbName:: Database used by git-cvsserver to cache revision information derived from the Git repository. The exact meaning depends on the used database driver, for SQLite (which is the default driver) this @@ -1341,7 +1340,7 @@ gitcvs.dbname:: linkgit:git-cvsserver[1] for details). May not contain semicolons (`;`). Default: '%Ggitcvs.%m.sqlite' -gitcvs.dbdriver:: +gitcvs.dbDriver:: Used Perl DBI driver. You can specify any available driver for this here, but it might not work. git-cvsserver is tested with 'DBD::SQLite', reported to work with 'DBD::Pg', and @@ -1349,10 +1348,10 @@ gitcvs.dbdriver:: May not contain double colons (`:`). Default: 'SQLite'. See linkgit:git-cvsserver[1]. -gitcvs.dbuser, gitcvs.dbpass:: - Database user and password. Only useful if setting 'gitcvs.dbdriver', +gitcvs.dbUser, gitcvs.dbPass:: + Database user and password. Only useful if setting 'gitcvs.dbDriver', since SQLite has no concept of database users and/or passwords. - 'gitcvs.dbuser' supports variable substitution (see + 'gitcvs.dbUser' supports variable substitution (see linkgit:git-cvsserver[1] for details). gitcvs.dbTableNamePrefix:: @@ -1363,7 +1362,7 @@ gitcvs.dbTableNamePrefix:: characters will be replaced with underscores. All gitcvs variables except for 'gitcvs.usecrlfattr' and -'gitcvs.allbinary' can also be specified as +'gitcvs.allBinary' can also be specified as 'gitcvs.<access_method>.<varname>' (where 'access_method' is one of "ext" and "pserver") to make them apply only for the given access method. @@ -1381,7 +1380,7 @@ gitweb.highlight:: gitweb.patches:: gitweb.pickaxe:: gitweb.remote_heads:: -gitweb.showsizes:: +gitweb.showSizes:: gitweb.snapshot:: See linkgit:gitweb.conf[5] for description. @@ -1410,15 +1409,15 @@ gpg.program:: signed, and the program is expected to send the result to its standard output. -gui.commitmsgwidth:: +gui.commitMsgWidth:: Defines how wide the commit message window is in the linkgit:git-gui[1]. "75" is the default. -gui.diffcontext:: +gui.diffContext:: Specifies how many context lines should be used in calls to diff made by the linkgit:git-gui[1]. The default is "5". -gui.displayuntracked:: +gui.displayUntracked:: Determines if linkgit::git-gui[1] shows untracked files in the file list. The default is "true". @@ -1430,16 +1429,16 @@ gui.encoding:: If this option is not set, the tools default to the locale encoding. -gui.matchtrackingbranch:: +gui.matchTrackingBranch:: Determines if new branches created with linkgit:git-gui[1] should default to tracking remote branches with matching names or not. Default: "false". -gui.newbranchtemplate:: +gui.newBranchTemplate:: Is used as suggested name when creating new branches using the linkgit:git-gui[1]. -gui.pruneduringfetch:: +gui.pruneDuringFetch:: "true" if linkgit:git-gui[1] should prune remote-tracking branches when performing a fetch. The default value is "false". @@ -1447,17 +1446,17 @@ gui.trustmtime:: Determines if linkgit:git-gui[1] should trust the file modification timestamp or not. By default the timestamps are not trusted. -gui.spellingdictionary:: +gui.spellingDictionary:: Specifies the dictionary used for spell checking commit messages in the linkgit:git-gui[1]. When set to "none" spell checking is turned off. -gui.fastcopyblame:: +gui.fastCopyBlame:: If true, 'git gui blame' uses `-C` instead of `-C -C` for original location detection. It makes blame significantly faster on huge repositories at the expense of less thorough copy detection. -gui.copyblamethreshold:: +gui.copyBlameThreshold:: Specifies the threshold to use in 'git gui blame' original location detection, measured in alphanumeric characters. See the linkgit:git-blame[1] manual for more information on copy detection. @@ -1477,22 +1476,22 @@ guitool.<name>.cmd:: 'FILENAME', and the name of the current branch as 'CUR_BRANCH' (if the head is detached, 'CUR_BRANCH' is empty). -guitool.<name>.needsfile:: +guitool.<name>.needsFile:: Run the tool only if a diff is selected in the GUI. It guarantees that 'FILENAME' is not empty. -guitool.<name>.noconsole:: +guitool.<name>.noConsole:: Run the command silently, without creating a window to display its output. -guitool.<name>.norescan:: +guitool.<name>.noRescan:: Don't rescan the working directory for changes after the tool finishes execution. guitool.<name>.confirm:: Show a confirmation dialog before actually running the tool. -guitool.<name>.argprompt:: +guitool.<name>.argPrompt:: Request a string argument from the user, and pass it to the tool through the 'ARGS' environment variable. Since requesting an argument implies confirmation, the 'confirm' option has no effect @@ -1500,13 +1499,13 @@ guitool.<name>.argprompt:: the dialog uses a built-in generic prompt; otherwise the exact value of the variable is used. -guitool.<name>.revprompt:: +guitool.<name>.revPrompt:: Request a single valid revision from the user, and set the 'REVISION' environment variable. In other aspects this option - is similar to 'argprompt', and can be used together with it. + is similar to 'argPrompt', and can be used together with it. -guitool.<name>.revunmerged:: - Show only unmerged branches in the 'revprompt' subdialog. +guitool.<name>.revUnmerged:: + Show only unmerged branches in the 'revPrompt' subdialog. This is useful for tools similar to merge or rebase, but not for things like checkout or reset. @@ -1516,7 +1515,7 @@ guitool.<name>.title:: guitool.<name>.prompt:: Specifies the general prompt string to display at the top of - the dialog, before subsections for 'argprompt' and 'revprompt'. + the dialog, before subsections for 'argPrompt' and 'revPrompt'. The default value includes the actual command. help.browser:: @@ -1528,7 +1527,7 @@ help.format:: Values 'man', 'info', 'web' and 'html' are supported. 'man' is the default. 'web' and 'html' are the same. -help.autocorrect:: +help.autoCorrect:: Automatically correct and execute mistyped commands after waiting for the given number of deciseconds (0.1 sec). If more than one command can be deduced from the entered text, nothing @@ -1537,7 +1536,7 @@ help.autocorrect:: value is 0 - the command will be just shown but not executed. This is the default. -help.htmlpath:: +help.htmlPath:: Specify the path where the HTML documentation resides. File system paths and URLs are supported. HTML pages will be prefixed with this path when help is displayed in the 'web' format. This defaults to the documentation @@ -1549,17 +1548,17 @@ http.proxy:: `curl(1)`). This can be overridden on a per-remote basis; see remote.<name>.proxy -http.cookiefile:: +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 of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format (see linkgit:curl[1]). - NOTE that the file specified with http.cookiefile is only used as + NOTE that the file specified with http.cookieFile is only used as input unless http.saveCookies is set. -http.savecookies:: +http.saveCookies:: If set, store cookies received during requests to the file specified by - http.cookiefile. Has no effect if http.cookiefile is unset. + http.cookieFile. Has no effect if http.cookieFile is unset. http.sslVerify:: Whether to verify the SSL certificate when fetching or pushing @@ -1630,7 +1629,7 @@ http.noEPSV:: support EPSV mode. Can be overridden by the 'GIT_CURL_FTP_NO_EPSV' environment variable. Default is false (curl will use EPSV). -http.useragent:: +http.userAgent:: The HTTP USER_AGENT string presented to an HTTP server. The default value represents the version of the client Git such as git/1.7.1. This option allows you to override this value to a more common value @@ -1703,7 +1702,7 @@ index.version:: Specify the version with which new index files should be initialized. This does not affect existing repositories. -init.templatedir:: +init.templateDir:: Specify the directory from which templates will be copied. (See the "TEMPLATE DIRECTORY" section of linkgit:git-init[1].) @@ -1719,7 +1718,7 @@ instaweb.local:: If true the web server started by linkgit:git-instaweb[1] will be bound to the local IP (127.0.0.1). -instaweb.modulepath:: +instaweb.modulePath:: The default module path for linkgit:git-instaweb[1] to use instead of /usr/lib/apache2/modules. Only used if httpd is Apache. @@ -1728,7 +1727,7 @@ instaweb.port:: The port number to bind the gitweb httpd to. See linkgit:git-instaweb[1]. -interactive.singlekey:: +interactive.singleKey:: In interactive commands, allow the user to provide one-letter input with a single key (i.e., without hitting enter). Currently this is used by the `--patch` mode of @@ -1756,7 +1755,7 @@ log.decorate:: specified, the full ref name (including prefix) will be printed. This is the same as the log commands '--decorate' option. -log.showroot:: +log.showRoot:: If true, the initial commit will be shown as a big creation event. This is equivalent to a diff against an empty tree. Tools like linkgit:git-log[1] or linkgit:git-whatchanged[1], which @@ -1993,7 +1992,7 @@ pack.useBitmaps:: true. You should not generally need to turn this off unless you are debugging pack bitmaps. -pack.writebitmaps (deprecated):: +pack.writeBitmaps (deprecated):: This is a deprecated synonym for `repack.writeBitmaps`. pack.writeBitmapHashCache:: @@ -2112,14 +2111,20 @@ new default). -- +push.followTags:: + If set to true enable '--follow-tags' option by default. You + may override this configuration at time of push by specifying + '--no-follow-tags'. + + rebase.stat:: Whether to show a diffstat of what changed upstream since the last rebase. False by default. -rebase.autosquash:: +rebase.autoSquash:: If set to true enable '--autosquash' option by default. -rebase.autostash:: +rebase.autoStash:: When set to true, automatically create a temporary stash before the operation begins, and apply it after the operation ends. This means that you can run rebase on a dirty worktree. @@ -2127,18 +2132,23 @@ rebase.autostash:: successful rebase might result in non-trivial conflicts. Defaults to false. +receive.advertiseAtomic:: + By default, git-receive-pack will advertise the atomic push + capability to its clients. If you don't want to this capability + to be advertised, set this variable to false. + receive.autogc:: By default, git-receive-pack will run "git-gc --auto" after receiving data from git-push and updating refs. You can stop it by setting this variable to false. -receive.certnonceseed:: +receive.certNonceSeed:: By setting this variable to a string, `git receive-pack` will accept a `git push --signed` and verifies it by using a "nonce" protected by HMAC using this string as a secret key. -receive.certnonceslop:: +receive.certNonceSlop:: When a `git push --signed` sent a push certificate with a "nonce" that was issued by a receive-pack serving the same repository within this many seconds, export the "nonce" @@ -2186,11 +2196,15 @@ receive.denyCurrentBranch:: message. Defaults to "refuse". + Another option is "updateInstead" which will update the working -directory (must be clean) if pushing into the current branch. This option is +tree if pushing into the current branch. This option is intended for synchronizing working directories when one side is not easily accessible via interactive ssh (e.g. a live web site, hence the requirement that the working directory be clean). This mode also comes in handy when developing inside a VM to test and fix code on different Operating Systems. ++ +By default, "updateInstead" will refuse the push if the working tree or +the index have any difference from the HEAD, but the `push-to-checkout` +hook can be used to customize this. See linkgit:githooks[5]. receive.denyNonFastForwards:: If set to true, git-receive-pack will deny a ref update which is @@ -2198,7 +2212,7 @@ receive.denyNonFastForwards:: even if that push is forced. This configuration variable is set when initializing a shared repository. -receive.hiderefs:: +receive.hideRefs:: String(s) `receive-pack` uses to decide which refs to omit from its initial advertisement. Use more than one definitions to specify multiple prefix strings. A ref that @@ -2207,18 +2221,18 @@ receive.hiderefs:: push`, and an attempt to update or delete a hidden ref by `git push` is rejected. -receive.updateserverinfo:: +receive.updateServerInfo:: If set to true, git-receive-pack will run git-update-server-info after receiving data from git-push and updating refs. -receive.shallowupdate:: +receive.shallowUpdate:: If set to true, .git/shallow can be updated when new refs require new shallow roots. Otherwise those refs are rejected. -remote.pushdefault:: +remote.pushDefault:: The remote to push to by default. Overrides `branch.<name>.remote` for all branches, and is overridden by - `branch.<name>.pushremote` for specific branches. + `branch.<name>.pushRemote` for specific branches. remote.<name>.url:: The URL of a remote repository. See linkgit:git-fetch[1] or @@ -2262,7 +2276,7 @@ remote.<name>.uploadpack:: The default program to execute on the remote side when fetching. See option \--upload-pack of linkgit:git-fetch-pack[1]. -remote.<name>.tagopt:: +remote.<name>.tagOpt:: Setting this value to \--no-tags disables automatic tag following when fetching from remote <name>. Setting it to \--tags will fetch every tag from remote <name>, even if they are not reachable from remote @@ -2284,7 +2298,7 @@ remotes.<group>:: The list of remotes which are fetched by "git remote update <group>". See linkgit:git-remote[1]. -repack.usedeltabaseoffset:: +repack.useDeltaBaseOffset:: By default, linkgit:git-repack[1] creates packs that use delta-base offset. If you need to share your repository with Git older than version 1.4.4, either directly or via a dumb @@ -2307,7 +2321,7 @@ repack.writeBitmaps:: space and extra time spent on the initial repack. Defaults to false. -rerere.autoupdate:: +rerere.autoUpdate:: When set to true, `git-rerere` updates the index with the resulting contents after it cleanly resolves conflicts using previously recorded resolution. Defaults to false. @@ -2326,12 +2340,12 @@ sendemail.identity:: values in the 'sendemail' section. The default identity is the value of 'sendemail.identity'. -sendemail.smtpencryption:: +sendemail.smtpEncryption:: See linkgit:git-send-email[1] for description. Note that this setting is not subject to the 'identity' mechanism. sendemail.smtpssl (deprecated):: - Deprecated alias for 'sendemail.smtpencryption = ssl'. + Deprecated alias for 'sendemail.smtpEncryption = ssl'. sendemail.smtpsslcertpath:: Path to ca-certificates (either a directory or a single file). @@ -2343,29 +2357,29 @@ sendemail.<identity>.*:: identity is selected, through command-line or 'sendemail.identity'. -sendemail.aliasesfile:: -sendemail.aliasfiletype:: +sendemail.aliasesFile:: +sendemail.aliasFileType:: sendemail.annotate:: sendemail.bcc:: sendemail.cc:: -sendemail.cccmd:: -sendemail.chainreplyto:: +sendemail.ccCmd:: +sendemail.chainReplyTo:: sendemail.confirm:: -sendemail.envelopesender:: +sendemail.envelopeSender:: sendemail.from:: -sendemail.multiedit:: +sendemail.multiEdit:: sendemail.signedoffbycc:: -sendemail.smtppass:: +sendemail.smtpPass:: sendemail.suppresscc:: -sendemail.suppressfrom:: +sendemail.suppressFrom:: sendemail.to:: -sendemail.smtpdomain:: -sendemail.smtpserver:: -sendemail.smtpserverport:: -sendemail.smtpserveroption:: -sendemail.smtpuser:: +sendemail.smtpDomain:: +sendemail.smtpServer:: +sendemail.smtpServerPort:: +sendemail.smtpServerOption:: +sendemail.smtpUser:: sendemail.thread:: -sendemail.transferencoding:: +sendemail.transferEncoding:: sendemail.validate:: sendemail.xmailer:: See linkgit:git-send-email[1] for description. @@ -2417,7 +2431,7 @@ If this variable is not specified, it defaults to 'normal'. This variable can be overridden with the -u|--untracked-files option of linkgit:git-status[1] and linkgit:git-commit[1]. -status.submodulesummary:: +status.submoduleSummary:: Defaults to false. If this is set to a non zero number or true (identical to -1 or an unlimited number), the submodule summary will be enabled and a @@ -2492,9 +2506,9 @@ transfer.fsckObjects:: not set, the value of this variable is used instead. Defaults to false. -transfer.hiderefs:: - This variable can be used to set both `receive.hiderefs` - and `uploadpack.hiderefs` at the same time to the same +transfer.hideRefs:: + This variable can be used to set both `receive.hideRefs` + and `uploadpack.hideRefs` at the same time to the same values. See entries for these other variables. transfer.unpackLimit:: @@ -2509,7 +2523,7 @@ uploadarchive.allowUnreachable:: linkgit:git-upload-archive[1] for more details. Defaults to `false`. -uploadpack.hiderefs:: +uploadpack.hideRefs:: String(s) `upload-pack` uses to decide which refs to omit from its initial advertisement. Use more than one definitions to specify multiple prefix strings. A ref that @@ -2519,12 +2533,12 @@ uploadpack.hiderefs:: fetch` will fail. See also `uploadpack.allowtipsha1inwant`. uploadpack.allowtipsha1inwant:: - When `uploadpack.hiderefs` is in effect, allow `upload-pack` + When `uploadpack.hideRefs` is in effect, allow `upload-pack` to accept a fetch request that asks for an object at the tip of a hidden ref (by default, such a request is rejected). - see also `uploadpack.hiderefs`. + see also `uploadpack.hideRefs`. -uploadpack.keepalive:: +uploadpack.keepAlive:: When `upload-pack` has started `pack-objects`, there may be a quiet period while `pack-objects` prepares the pack. Normally it would output progress information, but if `--quiet` was used @@ -2532,7 +2546,7 @@ uploadpack.keepalive:: the pack data begins. Some clients and networks may consider the server to be hung and give up. Setting this option instructs `upload-pack` to send an empty keepalive packet every - `uploadpack.keepalive` seconds. Setting this option to 0 + `uploadpack.keepAlive` seconds. Setting this option to 0 disables keepalive packets entirely. The default is 5 seconds. url.<base>.insteadOf:: @@ -2569,13 +2583,25 @@ user.name:: Can be overridden by the 'GIT_AUTHOR_NAME' and 'GIT_COMMITTER_NAME' environment variables. See linkgit:git-commit-tree[1]. -user.signingkey:: +user.signingKey:: If linkgit:git-tag[1] or linkgit:git-commit[1] is not selecting the key you want it to automatically when creating a signed tag or commit, you can override the default selection with this variable. This option is passed unchanged to gpg's --local-user parameter, so you may specify a key using any method that gpg supports. +versionsort.prereleaseSuffix:: + When version sort is used in linkgit:git-tag[1], prerelease + tags (e.g. "1.0-rc1") may appear after the main release + "1.0". By specifying the suffix "-rc" in this variable, + "1.0-rc1" will appear before "1.0". ++ +This variable can be specified multiple times, once per suffix. The +order of suffixes in the config file determines the sorting order +(e.g. if "-pre" appears before "-rc" in the config file then 1.0-preXX +is sorted before 1.0-rcXX). The sorting order between different +suffixes is undefined if they are in multiple config files. + web.browser:: Specify a web browser that may be used by some commands. Currently only linkgit:git-instaweb[1] and linkgit:git-help[1] diff --git a/Documentation/diff-config.txt b/Documentation/diff-config.txt index b001779520..6eaa45271c 100644 --- a/Documentation/diff-config.txt +++ b/Documentation/diff-config.txt @@ -1,4 +1,4 @@ -diff.autorefreshindex:: +diff.autoRefreshIndex:: When using 'git diff' to compare with work tree files, do not consider stat-only change as changed. Instead, silently run `git update-index --refresh` to @@ -75,11 +75,11 @@ diff.ignoreSubmodules:: commands such as 'git diff-files'. 'git checkout' also honors this setting when reporting uncommitted changes. Setting it to 'all' disables the submodule summary normally shown by 'git commit' - and 'git status' when 'status.submodulesummary' is set unless it is + and 'git status' when 'status.submoduleSummary' is set unless it is overridden by using the --ignore-submodules command-line option. The 'git submodule' commands are not affected by this setting. -diff.mnemonicprefix:: +diff.mnemonicPrefix:: If set, 'git diff' uses a prefix pair that is different from the standard "a/" and "b/" depending on what is being compared. When this configuration is in effect, reverse diff output also swaps @@ -98,7 +98,7 @@ diff.mnemonicprefix:: diff.noprefix:: If set, 'git diff' does not show any source or destination prefix. -diff.orderfile:: +diff.orderFile:: File indicating how to order files within a diff, using one shell glob pattern per line. Can be overridden by the '-O' option to linkgit:git-diff[1]. @@ -148,7 +148,7 @@ diff.<driver>.textconv:: conversion is used to generate a human-readable diff. See linkgit:gitattributes[5] for details. -diff.<driver>.wordregex:: +diff.<driver>.wordRegex:: The regular expression that the diff driver should use to split words in a line. See linkgit:gitattributes[5] for details. diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 6cb083aae5..ccd499867b 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -432,8 +432,8 @@ endif::git-format-patch[] -O<orderfile>:: Output the patch in the order specified in the <orderfile>, which has one shell glob pattern per line. - This overrides the `diff.orderfile` configuration variable - (see linkgit:git-config[1]). To cancel `diff.orderfile`, + This overrides the `diff.orderFile` configuration variable + (see linkgit:git-config[1]). To cancel `diff.orderFile`, use `-O/dev/null`. ifndef::git-format-patch[] diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.txt index b09a783ee3..45583d8454 100644 --- a/Documentation/fetch-options.txt +++ b/Documentation/fetch-options.txt @@ -68,7 +68,7 @@ endif::git-pull[] By default, tags that point at objects that are downloaded from the remote repository are fetched and stored locally. This option disables this automatic tag following. The default - behavior for a remote may be specified with the remote.<name>.tagopt + behavior for a remote may be specified with the remote.<name>.tagOpt setting. See linkgit:git-config[1]. ifndef::git-pull[] diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 1c74907dd4..f2eb9076d7 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -173,7 +173,7 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. Configuration ------------- -The optional configuration variable `core.excludesfile` indicates a path to a +The optional configuration variable `core.excludesFile` indicates a path to a file containing patterns of file names to exclude from git-add, similar to $GIT_DIR/info/exclude. Patterns in the exclude file are used in addition to those in info/exclude. See linkgit:gitignore[5]. @@ -317,7 +317,7 @@ After deciding the fate for all hunks, if there is any hunk that was chosen, the index is updated with the selected hunks. + You can omit having to type return here, by setting the configuration -variable `interactive.singlekey` to `true`. +variable `interactive.singleKey` to `true`. diff:: diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.txt index 9489664cfa..d9ed6a1a4e 100644 --- a/Documentation/git-apply.txt +++ b/Documentation/git-apply.txt @@ -242,7 +242,7 @@ has no effect when `--index` or `--cached` is in use. Configuration ------------- -apply.ignorewhitespace:: +apply.ignoreWhitespace:: Set to 'change' if you want changes in whitespace to be ignored by default. Set to one of: no, none, never, false if you want changes in whitespace to be significant. diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt index 311b33674e..359619b552 100644 --- a/Documentation/git-branch.txt +++ b/Documentation/git-branch.txt @@ -51,7 +51,7 @@ When a local branch is started off a remote-tracking branch, Git sets up the branch (specifically the `branch.<name>.remote` and `branch.<name>.merge` configuration entries) so that 'git pull' will appropriately merge from the remote-tracking branch. This behavior may be changed via the global -`branch.autosetupmerge` configuration flag. That setting can be +`branch.autoSetupMerge` configuration flag. That setting can be overridden by using the `--track` and `--no-track` options, and changed later using `git branch --set-upstream-to`. @@ -166,14 +166,14 @@ This option is only applicable in non-verbose mode. upstream when the new branch is checked out. + This behavior is the default when the start point is a remote-tracking branch. -Set the branch.autosetupmerge configuration variable to `false` if you +Set the branch.autoSetupMerge configuration variable to `false` if you want `git checkout` and `git branch` to always behave as if '--no-track' were given. Set it to `always` if you want this behavior when the start-point is either a local or remote-tracking branch. --no-track:: Do not set up "upstream" configuration, even if the - branch.autosetupmerge configuration variable is true. + branch.autoSetupMerge configuration variable is true. --set-upstream:: If specified branch does not exist yet or if `--force` has been diff --git a/Documentation/git-check-ignore.txt b/Documentation/git-check-ignore.txt index 788a011580..e35cd0489b 100644 --- a/Documentation/git-check-ignore.txt +++ b/Documentation/git-check-ignore.txt @@ -72,7 +72,7 @@ matching pattern, <source> is the pattern's source file, and <linenum> is the line number of the pattern within that source. If the pattern contained a `!` prefix or `/` suffix, it will be preserved in the output. <source> will be an absolute path when referring to the file -configured by `core.excludesfile`, or relative to the repository root +configured by `core.excludesFile`, or relative to the repository root when referring to `.git/info/exclude` or a per-directory exclude file. If `-z` is specified, the pathnames in the output are delimited by the diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt index 33ad2adf5c..d5041082e8 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -144,7 +144,7 @@ explicitly give a name with '-b' in such a case. --no-track:: Do not set up "upstream" configuration, even if the - branch.autosetupmerge configuration variable is true. + branch.autoSetupMerge configuration variable is true. -l:: Create the new branch's reflog; see linkgit:git-branch[1] for @@ -210,7 +210,7 @@ the conflicted merge in the specified paths. --conflict=<style>:: The same as --merge option above, but changes the way the conflicting hunks are presented, overriding the - merge.conflictstyle configuration variable. Possible values are + merge.conflictStyle configuration variable. Possible values are "merge" (default) and "diff3" (in addition to what is shown by "merge" style, shows the original contents). diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.txt index a469eab066..f5f2a8d326 100644 --- a/Documentation/git-commit-tree.txt +++ b/Documentation/git-commit-tree.txt @@ -59,7 +59,7 @@ OPTIONS GPG-sign commit. --no-gpg-sign:: - Countermand `commit.gpgsign` configuration variable that is + Countermand `commit.gpgSign` configuration variable that is set to force each and every commit to be signed. diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index 1e74b75d38..617e29b38b 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -284,6 +284,10 @@ configuration variable documented in linkgit:git-config[1]. would be committed at the bottom of the commit message template. Note that this diff output doesn't have its lines prefixed with '#'. ++ +If specified twice, show in addition the unified diff between +what would be committed and the worktree files, i.e. the unstaged +changes to tracked files. -q:: --quiet:: @@ -310,7 +314,7 @@ configuration variable documented in linkgit:git-config[1]. GPG-sign commit. --no-gpg-sign:: - Countermand `commit.gpgsign` configuration variable that is + Countermand `commit.gpgSign` configuration variable that is set to force each and every commit to be signed. \--:: diff --git a/Documentation/git-config.txt b/Documentation/git-config.txt index 9dfa1a5ce2..02ec096faa 100644 --- a/Documentation/git-config.txt +++ b/Documentation/git-config.txt @@ -405,7 +405,7 @@ true % git config --bool --get-urlmatch http.sslverify https://weak.example.com false % git config --get-urlmatch http https://weak.example.com -http.cookiefile /tmp/cookie.txt +http.cookieFile /tmp/cookie.txt http.sslverify false ------------ diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.txt index 4961f1abda..db4d7a917c 100644 --- a/Documentation/git-cvsserver.txt +++ b/Documentation/git-cvsserver.txt @@ -154,7 +154,7 @@ with CVS_SERVER (and shouldn't) as 'git-shell' understands `cvs` to mean [gitcvs] enabled=1 # optional for debugging - logfile=/path/to/logfile + logFile=/path/to/logfile ------ Note: you need to ensure each user that is going to invoke 'git-cvsserver' has @@ -254,14 +254,14 @@ Configuring database backend its documentation if changing these variables, especially about `DBI->connect()`. -gitcvs.dbname:: +gitcvs.dbName:: Database name. The exact meaning depends on the selected database driver, for SQLite this is a filename. Supports variable substitution (see below). May not contain semicolons (`;`). Default: '%Ggitcvs.%m.sqlite' -gitcvs.dbdriver:: +gitcvs.dbDriver:: Used DBI driver. You can specify any available driver for this here, but it might not work. cvsserver is tested with 'DBD::SQLite', reported to work with @@ -271,12 +271,12 @@ gitcvs.dbdriver:: Default: 'SQLite' gitcvs.dbuser:: - Database user. Only useful if setting `dbdriver`, since + Database user. Only useful if setting `dbDriver`, since SQLite has no concept of database users. Supports variable substitution (see below). -gitcvs.dbpass:: - Database password. Only useful if setting `dbdriver`, since +gitcvs.dbPass:: + Database password. Only useful if setting `dbDriver`, since SQLite has no concept of database passwords. gitcvs.dbTableNamePrefix:: @@ -288,7 +288,7 @@ All variables can also be set per access method, see <<configaccessmethod,above> Variable substitution ^^^^^^^^^^^^^^^^^^^^^ -In `dbdriver` and `dbuser` you can use the following variables: +In `dbDriver` and `dbUser` you can use the following variables: %G:: Git directory name @@ -413,16 +413,16 @@ about end-of-line conversion. Alternatively, if `gitcvs.usecrlfattr` config is not enabled or the attributes do not allow automatic detection for a filename, then -the server uses the `gitcvs.allbinary` config for the default setting. -If `gitcvs.allbinary` is set, then file not otherwise +the server uses the `gitcvs.allBinary` config for the default setting. +If `gitcvs.allBinary` is set, then file not otherwise specified will default to '-kb' mode. Otherwise the '-k' mode -is left blank. But if `gitcvs.allbinary` is set to "guess", then +is left blank. But if `gitcvs.allBinary` is set to "guess", then the correct '-k' mode will be guessed based on the contents of the file. For best consistency with 'cvs', it is probably best to override the defaults by setting `gitcvs.usecrlfattr` to true, -and `gitcvs.allbinary` to "guess". +and `gitcvs.allBinary` to "guess". Dependencies ------------ diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.txt index 8deb61469d..e62d9a0717 100644 --- a/Documentation/git-fetch.txt +++ b/Documentation/git-fetch.txt @@ -26,7 +26,7 @@ By default, any tag that points into the histories being fetched is also fetched; the effect is to fetch tags that point at branches that you are interested in. This default behavior can be changed by using the --tags or --no-tags options or by -configuring remote.<name>.tagopt. By using a refspec that fetches tags +configuring remote.<name>.tagOpt. By using a refspec that fetches tags explicitly, you can fetch tags that do not point into branches you are interested in as well. diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt index c0fd470da4..bb3ea9372f 100644 --- a/Documentation/git-format-patch.txt +++ b/Documentation/git-format-patch.txt @@ -273,13 +273,13 @@ attachments, and sign off patches with configuration variables. ------------ [format] headers = "Organization: git-foo\n" - subjectprefix = CHANGE + subjectPrefix = CHANGE suffix = .txt numbered = auto to = <email> cc = <email> attach [ = mime-boundary-string ] - signoff = true + signOff = true coverletter = auto ------------ diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.txt index 273c4663c8..52234987f9 100644 --- a/Documentation/git-gc.txt +++ b/Documentation/git-gc.txt @@ -54,10 +54,10 @@ all loose objects are combined into a single pack using `git repack -d -l`. Setting the value of `gc.auto` to 0 disables automatic packing of loose objects. + -If the number of packs exceeds the value of `gc.autopacklimit`, +If the number of packs exceeds the value of `gc.autoPackLimit`, then existing packs (except those marked with a `.keep` file) are consolidated into a single pack by using the `-A` option of -'git repack'. Setting `gc.autopacklimit` to 0 disables +'git repack'. Setting `gc.autoPackLimit` to 0 disables automatic consolidation of packs. --prune=<date>:: @@ -101,18 +101,18 @@ branches: ------------ [gc "refs/remotes/*"] reflogExpire = never - reflogexpireUnreachable = 3 days + reflogExpireUnreachable = 3 days ------------ -The optional configuration variable 'gc.rerereresolved' indicates +The optional configuration variable 'gc.rerereResolved' indicates how long records of conflicted merge you resolved earlier are kept. This defaults to 60 days. -The optional configuration variable 'gc.rerereunresolved' indicates +The optional configuration variable 'gc.rerereUnresolved' indicates how long records of conflicted merge you have not resolved are kept. This defaults to 15 days. -The optional configuration variable 'gc.packrefs' determines if +The optional configuration variable 'gc.packRefs' determines if 'git gc' runs 'git pack-refs'. This can be set to "notbare" to enable it within all non-bare repos or it can be set to a boolean value. This defaults to true. diff --git a/Documentation/git-init.txt b/Documentation/git-init.txt index 369f889bb4..8174d27efd 100644 --- a/Documentation/git-init.txt +++ b/Documentation/git-init.txt @@ -125,7 +125,7 @@ The template directory will be one of the following (in order): - the contents of the `$GIT_TEMPLATE_DIR` environment variable; - - the `init.templatedir` configuration variable; or + - the `init.templateDir` configuration variable; or - the default template directory: `/usr/share/git-core/templates`. diff --git a/Documentation/git-instaweb.txt b/Documentation/git-instaweb.txt index f3eef510f2..cc75b25022 100644 --- a/Documentation/git-instaweb.txt +++ b/Documentation/git-instaweb.txt @@ -76,7 +76,7 @@ You may specify configuration in your .git/config httpd = apache2 -f port = 4321 browser = konqueror - modulepath = /usr/lib/apache2/modules + modulePath = /usr/lib/apache2/modules ----------------------------------------------------------------------- diff --git a/Documentation/git-log.txt b/Documentation/git-log.txt index 1f7bc67d6c..18bc716a0c 100644 --- a/Documentation/git-log.txt +++ b/Documentation/git-log.txt @@ -184,7 +184,7 @@ log.date:: `--date` option.) Defaults to "default", which means to write dates like `Sat May 8 19:35:34 2010 -0500`. -log.showroot:: +log.showRoot:: If `false`, `git log` and related commands will not treat the initial commit as a big creation event. Any root commits in `git log -p` output would be shown without a diff attached. diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.txt index cf2c374b71..1f94908e3c 100644 --- a/Documentation/git-merge.txt +++ b/Documentation/git-merge.txt @@ -232,7 +232,7 @@ Barbie's remark on your side. The only thing you can tell is that your side wants to say it is hard and you'd prefer to go shopping, while the other side wants to claim it is easy. -An alternative style can be used by setting the "merge.conflictstyle" +An alternative style can be used by setting the "merge.conflictStyle" configuration variable to "diff3". In "diff3" style, the above conflict may look like this: @@ -329,7 +329,7 @@ CONFIGURATION ------------- include::merge-config.txt[] -branch.<name>.mergeoptions:: +branch.<name>.mergeOptions:: Sets default options for merging into branch <name>. The syntax and supported options are the same as those of 'git merge', but option values containing whitespace characters are currently not supported. diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.txt index 6ab5f9497a..a1664b9f68 100644 --- a/Documentation/git-p4.txt +++ b/Documentation/git-p4.txt @@ -241,6 +241,9 @@ Git repository: Use a client spec to find the list of interesting files in p4. See the "CLIENT SPEC" section below. +-/ <path>:: + Exclude selected depot paths when cloning or syncing. + Clone options ~~~~~~~~~~~~~ These options can be used in an initial 'clone', along with the 'sync' @@ -254,9 +257,6 @@ options described above. --bare:: Perform a bare clone. See linkgit:git-clone[1]. --/ <path>:: - Exclude selected depot paths when cloning. - Submit options ~~~~~~~~~~~~~~ These options can be used to modify 'git p4 submit' behavior. diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt index 4064452b06..712ab4baed 100644 --- a/Documentation/git-pull.txt +++ b/Documentation/git-pull.txt @@ -116,7 +116,7 @@ to `git rebase` so that locally created merge commits will not be flattened. + When false, merge the current branch into the upstream branch. + -See `pull.rebase`, `branch.<name>.rebase` and `branch.autosetuprebase` in +See `pull.rebase`, `branch.<name>.rebase` and `branch.autoSetupRebase` in linkgit:git-config[1] if you want to make `git pull` always use `--rebase` instead of merging. + diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index 3593774495..863c30c4c2 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -9,7 +9,7 @@ git-push - Update remote refs along with associated objects SYNOPSIS -------- [verse] -'git push' [--all | --mirror | --tags] [--follow-tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>] +'git push' [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>] [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream] [--signed] [--force-with-lease[=<refname>[:<expect>]]] @@ -128,7 +128,10 @@ already exists on the remote side. Push all the refs that would be pushed without this option, and also push annotated tags in `refs/tags` that are missing from the remote but are pointing at commit-ish that are - reachable from the refs being pushed. + reachable from the refs being pushed. This can also be specified + with configuration variable 'push.followTags'. For more + information, see 'push.followTags' in linkgit:git-config[1]. + --signed:: GPG-sign the push request to update refs on the receiving @@ -136,6 +139,11 @@ already exists on the remote side. logged. See linkgit:git-receive-pack[1] for the details on the receiving end. +--[no-]atomic:: + Use an atomic transaction on the remote side if available. + Either all refs are updated, or on error, no refs are updated. + If the server does not support atomic pushes the push will fail. + --receive-pack=<git-receive-pack>:: --exec=<git-receive-pack>:: Path to the 'git-receive-pack' program on the remote diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index c8ab48d6aa..47984e84ed 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -207,10 +207,10 @@ rebase.stat:: Whether to show a diffstat of what changed upstream since the last rebase. False by default. -rebase.autosquash:: +rebase.autoSquash:: If set to true enable '--autosquash' option by default. -rebase.autostash:: +rebase.autoStash:: If set to true enable '--autostash' option by default. OPTIONS @@ -416,7 +416,7 @@ squash/fixup series. This option is only valid when the '--interactive' option is used. + If the '--autosquash' option is enabled by default using the -configuration variable `rebase.autosquash`, this option can be +configuration variable `rebase.autoSquash`, this option can be used to override and disable this setting. --[no-]autostash:: diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.txt index 9016960e27..000ee8dba2 100644 --- a/Documentation/git-receive-pack.txt +++ b/Documentation/git-receive-pack.txt @@ -100,7 +100,7 @@ the following environment variables: starting time is different by this many seconds from the current session. Only meaningful when `GIT_PUSH_CERT_NONCE_STATUS` says `SLOP`. - Also read about `receive.certnonceslop` variable in + Also read about `receive.certNonceSlop` variable in linkgit:git-config[1]. This hook is called before any refname is updated and before any diff --git a/Documentation/git-reflog.txt b/Documentation/git-reflog.txt index 70791b9fd8..5e7908e4f7 100644 --- a/Documentation/git-reflog.txt +++ b/Documentation/git-reflog.txt @@ -17,85 +17,113 @@ The command takes various subcommands, and different options depending on the subcommand: [verse] -'git reflog expire' [--dry-run] [--stale-fix] [--verbose] - [--expire=<time>] [--expire-unreachable=<time>] [--all] <refs>... -'git reflog delete' ref@\{specifier\}... 'git reflog' ['show'] [log-options] [<ref>] +'git reflog expire' [--expire=<time>] [--expire-unreachable=<time>] + [--rewrite] [--updateref] [--stale-fix] + [--dry-run] [--verbose] [--all | <refs>...] +'git reflog delete' [--rewrite] [--updateref] + [--dry-run] [--verbose] ref@\{specifier\}... + +Reference logs, or "reflogs", record when the tips of branches and +other references were updated in the local repository. Reflogs are +useful in various Git commands, to specify the old value of a +reference. For example, `HEAD@{2}` means "where HEAD used to be two +moves ago", `master@{one.week.ago}` means "where master used to point +to one week ago in this local repository", and so on. See +linkgit:gitrevisions[7] for more details. + +This command manages the information recorded in the reflogs. + +The "show" subcommand (which is also the default, in the absence of +any subcommands) shows the log of the reference provided in the +command-line (or `HEAD`, by default). The reflog covers all recent +actions, and in addition the `HEAD` reflog records branch switching. +`git reflog show` is an alias for `git log -g --abbrev-commit +--pretty=oneline`; see linkgit:git-log[1] for more information. + +The "expire" subcommand prunes older reflog entries. Entries older +than `expire` time, or entries older than `expire-unreachable` time +and not reachable from the current tip, are removed from the reflog. +This is typically not used directly by end users -- instead, see +linkgit:git-gc[1]. + +The "delete" subcommand deletes single entries from the reflog. Its +argument must be an _exact_ entry (e.g. "`git reflog delete +master@{2}`"). This subcommand is also typically not used directly by +end users. -Reflog is a mechanism to record when the tip of branches are -updated. This command is to manage the information recorded in it. -The subcommand "expire" is used to prune older reflog entries. -Entries older than `expire` time, or entries older than -`expire-unreachable` time and not reachable from the current -tip, are removed from the reflog. This is typically not used -directly by the end users -- instead, see linkgit:git-gc[1]. - -The subcommand "show" (which is also the default, in the absence of any -subcommands) will take all the normal log options, and show the log of -the reference provided in the command-line (or `HEAD`, by default). -The reflog will cover all recent actions (HEAD reflog records branch switching -as well). It is an alias for `git log -g --abbrev-commit --pretty=oneline`; -see linkgit:git-log[1]. +OPTIONS +------- -The reflog is useful in various Git commands, to specify the old value -of a reference. For example, `HEAD@{2}` means "where HEAD used to be -two moves ago", `master@{one.week.ago}` means "where master used to -point to one week ago", and so on. See linkgit:gitrevisions[7] for -more details. +Options for `show` +~~~~~~~~~~~~~~~~~~ -To delete single entries from the reflog, use the subcommand "delete" -and specify the _exact_ entry (e.g. "`git reflog delete master@{2}`"). +`git reflog show` accepts any of the options accepted by `git log`. -OPTIONS -------- +Options for `expire` +~~~~~~~~~~~~~~~~~~~~ ---stale-fix:: - This revamps the logic -- the definition of "broken commit" - becomes: a commit that is not reachable from any of the refs and - there is a missing object among the commit, tree, or blob - objects reachable from it that is not reachable from any of the - refs. -+ -This computation involves traversing all the reachable objects, i.e. it -has the same cost as 'git prune'. Fortunately, once this is run, we -should not have to ever worry about missing objects, because the current -prune and pack-objects know about reflogs and protect objects referred by -them. +--all:: + Process the reflogs of all references. --expire=<time>:: - Entries older than this time are pruned. Without the - option it is taken from configuration `gc.reflogExpire`, - which in turn defaults to 90 days. --expire=all prunes - entries regardless of their age; --expire=never turns off - pruning of reachable entries (but see --expire-unreachable). + Prune entries older than the specified time. If this option is + not specified, the expiration time is taken from the + configuration setting `gc.reflogExpire`, which in turn + defaults to 90 days. `--expire=all` prunes entries regardless + of their age; `--expire=never` turns off pruning of reachable + entries (but see `--expire-unreachable`). --expire-unreachable=<time>:: - Entries older than this time and not reachable from - the current tip of the branch are pruned. Without the - option it is taken from configuration - `gc.reflogExpireUnreachable`, which in turn defaults to - 30 days. --expire-unreachable=all prunes unreachable - entries regardless of their age; --expire-unreachable=never + Prune entries older than `<time>` that are not reachable from + the current tip of the branch. If this option is not + specified, the expiration time is taken from the configuration + setting `gc.reflogExpireUnreachable`, which in turn defaults + to 30 days. `--expire-unreachable=all` prunes unreachable + entries regardless of their age; `--expire-unreachable=never` turns off early pruning of unreachable entries (but see - --expire). - ---all:: - Instead of listing <refs> explicitly, prune all refs. + `--expire`). --updateref:: - Update the ref with the sha1 of the top reflog entry (i.e. - <ref>@\{0\}) after expiring or deleting. + Update the reference to the value of the top reflog entry (i.e. + <ref>@\{0\}) if the previous top entry was pruned. (This + option is ignored for symbolic references.) --rewrite:: - While expiring or deleting, adjust each reflog entry to ensure - that the `old` sha1 field points to the `new` sha1 field of the - previous entry. + If a reflog entry's predecessor is pruned, adjust its "old" + SHA-1 to be equal to the "new" SHA-1 field of the entry that + now precedes it. + +--stale-fix:: + Prune any reflog entries that point to "broken commits". A + broken commit is a commit that is not reachable from any of + the reference tips and that refers, directly or indirectly, to + a missing commit, tree, or blob object. ++ +This computation involves traversing all the reachable objects, i.e. it +has the same cost as 'git prune'. It is primarily intended to fix +corruption caused by garbage collecting using older versions of Git, +which didn't protect objects referred to by reflogs. + +-n:: +--dry-run:: + Do not actually prune any entries; just show what would have + been pruned. --verbose:: Print extra information on screen. + +Options for `delete` +~~~~~~~~~~~~~~~~~~~~ + +`git reflog delete` accepts options `--updateref`, `--rewrite`, `-n`, +`--dry-run`, and `--verbose`, with the same meanings as when they are +used with `expire`. + + GIT --- Part of the linkgit:git[1] suite diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.txt index 4786a780b5..0e0bd363d6 100644 --- a/Documentation/git-repack.txt +++ b/Documentation/git-repack.txt @@ -115,7 +115,7 @@ other objects in that pack they already have locally. Write a reachability bitmap index as part of the repack. This only makes sense when used with `-a` or `-A`, as the bitmaps must be able to refer to all reachable objects. This option - overrides the setting of `pack.writebitmaps`. + overrides the setting of `pack.writeBitmaps`. --pack-kept-objects:: Include objects in `.keep` files when repacking. Note that we @@ -123,7 +123,7 @@ other objects in that pack they already have locally. This means that we may duplicate objects, but this makes the option safe to use when there are concurrent pushes or fetches. This option is generally only useful if you are writing bitmaps - with `-b` or `pack.writebitmaps`, as it ensures that the + with `-b` or `pack.writeBitmaps`, as it ensures that the bitmapped packfile has the necessary objects. Configuration diff --git a/Documentation/git-rerere.txt b/Documentation/git-rerere.txt index a62227f84e..9ee083c415 100644 --- a/Documentation/git-rerere.txt +++ b/Documentation/git-rerere.txt @@ -69,7 +69,7 @@ Prune records of conflicted merges that occurred a long time ago. By default, unresolved conflicts older than 15 days and resolved conflicts older than 60 days are pruned. These defaults are controlled via the -`gc.rerereunresolved` and `gc.rerereresolved` configuration +`gc.rerereUnresolved` and `gc.rerereResolved` configuration variables respectively. diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index f248a8665e..804554609d 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -47,7 +47,7 @@ Composing --annotate:: Review and edit each patch you're about to send. Default is the value of 'sendemail.annotate'. See the CONFIGURATION section for - 'sendemail.multiedit'. + 'sendemail.multiEdit'. --bcc=<address>:: Specify a "Bcc:" value for each email. Default is the value of @@ -73,7 +73,7 @@ and In-Reply-To headers will be used unless they are removed. + Missing From or In-Reply-To headers will be prompted for. + -See the CONFIGURATION section for 'sendemail.multiedit'. +See the CONFIGURATION section for 'sendemail.multiEdit'. --from=<address>:: Specify the sender of the emails. If not specified on the command line, @@ -156,31 +156,31 @@ Sending subscribed to a list. In order to use the 'From' address, set the value to "auto". If you use the sendmail binary, you must have suitable privileges for the -f parameter. Default is the value of the - 'sendemail.envelopesender' configuration variable; if that is + 'sendemail.envelopeSender' configuration variable; if that is unspecified, choosing the envelope sender is left to your MTA. --smtp-encryption=<encryption>:: Specify the encryption to use, either 'ssl' or 'tls'. Any other value reverts to plain SMTP. Default is the value of - 'sendemail.smtpencryption'. + 'sendemail.smtpEncryption'. --smtp-domain=<FQDN>:: Specifies the Fully Qualified Domain Name (FQDN) used in the HELO/EHLO command to the SMTP server. Some servers require the FQDN to match your IP address. If not set, git send-email attempts to determine your FQDN automatically. Default is the value of - 'sendemail.smtpdomain'. + 'sendemail.smtpDomain'. --smtp-pass[=<password>]:: Password for SMTP-AUTH. The argument is optional: If no argument is specified, then the empty string is used as - the password. Default is the value of 'sendemail.smtppass', + the password. Default is the value of 'sendemail.smtpPass', however '--smtp-pass' always overrides this value. + Furthermore, passwords need not be specified in configuration files or on the command line. If a username has been specified (with -'--smtp-user' or a 'sendemail.smtpuser'), but no password has been -specified (with '--smtp-pass' or 'sendemail.smtppass'), then +'--smtp-user' or a 'sendemail.smtpUser'), but no password has been +specified (with '--smtp-pass' or 'sendemail.smtpPass'), then a password is obtained using 'git-credential'. --smtp-server=<host>:: @@ -188,7 +188,7 @@ a password is obtained using 'git-credential'. `smtp.example.com` or a raw IP address). Alternatively it can specify a full pathname of a sendmail-like program instead; the program must support the `-i` option. Default value can - be specified by the 'sendemail.smtpserver' configuration + be specified by the 'sendemail.smtpServer' configuration option; the built-in default is `/usr/sbin/sendmail` or `/usr/lib/sendmail` if such program is available, or `localhost` otherwise. @@ -199,11 +199,11 @@ a password is obtained using 'git-credential'. submission port 587, or the common SSL smtp port 465); symbolic port names (e.g. "submission" instead of 587) are also accepted. The port can also be set with the - 'sendemail.smtpserverport' configuration variable. + 'sendemail.smtpServerPort' configuration variable. --smtp-server-option=<option>:: If set, specifies the outgoing SMTP server option to use. - Default value can be specified by the 'sendemail.smtpserveroption' + Default value can be specified by the 'sendemail.smtpServerOption' configuration option. + The --smtp-server-option option must be repeated for each option you want @@ -225,8 +225,8 @@ must be used for each option. be the best choice on most platforms). --smtp-user=<user>:: - Username for SMTP-AUTH. Default is the value of 'sendemail.smtpuser'; - if a username is not specified (with '--smtp-user' or 'sendemail.smtpuser'), + Username for SMTP-AUTH. Default is the value of 'sendemail.smtpUser'; + if a username is not specified (with '--smtp-user' or 'sendemail.smtpUser'), then authentication is not attempted. --smtp-debug=0|1:: @@ -247,14 +247,14 @@ Automating Specify a command to execute once per patch file which should generate patch file specific "Cc:" entries. Output of this command must be single email address per line. - Default is the value of 'sendemail.cccmd' configuration value. + Default is the value of 'sendemail.ccCmd' configuration value. --[no-]chain-reply-to:: If this is set, each email will be sent as a reply to the previous email sent. If disabled with "--no-chain-reply-to", all emails after the first will be sent as replies to the first email sent. When using this, it is recommended that the first file given be an overview of the - entire patch series. Disabled by default, but the 'sendemail.chainreplyto' + entire patch series. Disabled by default, but the 'sendemail.chainReplyTo' configuration variable can be used to enable it. --identity=<identity>:: @@ -304,7 +304,7 @@ specified, as well as 'body' if --no-signed-off-cc is specified. --[no-]suppress-from:: If this is set, do not add the From: address to the cc: list. - Default is the value of 'sendemail.suppressfrom' configuration + Default is the value of 'sendemail.suppressFrom' configuration value; if that is unspecified, default to --no-suppress-from. --[no-]thread:: @@ -377,15 +377,15 @@ default to '--validate'. CONFIGURATION ------------- -sendemail.aliasesfile:: +sendemail.aliasesFile:: To avoid typing long email addresses, point this to one or more - email aliases files. You must also supply 'sendemail.aliasfiletype'. + email aliases files. You must also supply 'sendemail.aliasFileType'. -sendemail.aliasfiletype:: - Format of the file(s) specified in sendemail.aliasesfile. Must be +sendemail.aliasFileType:: + Format of the file(s) specified in sendemail.aliasesFile. Must be one of 'mutt', 'mailrc', 'pine', 'elm', or 'gnus'. -sendemail.multiedit:: +sendemail.multiEdit:: If true (default), a single editor instance will be spawned to edit files you have to edit (patches when '--annotate' is used, and the summary when '--compose' is used). If false, files will be edited one @@ -404,10 +404,10 @@ To use 'git send-email' to send your patches through the GMail SMTP server, edit ~/.gitconfig to specify your account settings: [sendemail] - smtpencryption = tls - smtpserver = smtp.gmail.com - smtpuser = yourname@gmail.com - smtpserverport = 587 + smtpEncryption = tls + smtpServer = smtp.gmail.com + smtpUser = yourname@gmail.com + smtpServerPort = 587 Once your commits are ready to be sent to the mailing list, run the following commands: diff --git a/Documentation/git-send-pack.txt b/Documentation/git-send-pack.txt index 2a0de42a75..45c7725dc3 100644 --- a/Documentation/git-send-pack.txt +++ b/Documentation/git-send-pack.txt @@ -9,7 +9,7 @@ git-send-pack - Push objects over Git protocol to another repository SYNOPSIS -------- [verse] -'git send-pack' [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...] +'git send-pack' [--all] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> [<ref>...] DESCRIPTION ----------- @@ -62,6 +62,11 @@ be in a separate packet, and the list must end with a flush packet. Send a "thin" pack, which records objects in deltified form based on objects not included in the pack to reduce network traffic. +--atomic:: + Use an atomic transaction for updating the refs. If any of the refs + fails to update then the entire push will fail without changing any + refs. + <host>:: A remote host to house the repository. When this part is specified, 'git-receive-pack' is invoked via diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt index 4d8d530d35..b3319f7c2a 100644 --- a/Documentation/git-status.txt +++ b/Documentation/git-status.txt @@ -77,7 +77,7 @@ configuration variable documented in linkgit:git-config[1]. only changes to the commits stored in the superproject are shown (this was the behavior before 1.7.0). Using "all" hides all changes to submodules (and suppresses the output of submodule summaries when the config option - `status.submodulesummary` is set). + `status.submoduleSummary` is set). --ignored:: Show ignored files as well. @@ -207,7 +207,7 @@ If the config variable `status.relativePaths` is set to false, then all paths shown are relative to the repository root, not to the current directory. -If `status.submodulesummary` is set to a non zero number or true (identical +If `status.submoduleSummary` is set to a non zero number or true (identical to -1 or an unlimited number), the submodule summary will be enabled for the long format and a summary of commits for modified submodules will be shown (see --summary-limit option of linkgit:git-submodule[1]). Please note diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.txt index e953ba4439..bfba4ef078 100644 --- a/Documentation/git-tag.txt +++ b/Documentation/git-tag.txt @@ -161,7 +161,7 @@ it in the repository configuration as follows: ------------------------------------- [user] - signingkey = <gpg-key-id> + signingKey = <gpg-key-id> ------------------------------------- diff --git a/Documentation/git.txt b/Documentation/git.txt index 8f5220ce47..59e8335055 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -922,7 +922,7 @@ for further details. If this environment variable is set, then Git commands which need to acquire passwords or passphrases (e.g. for HTTP or IMAP authentication) will call this program with a suitable prompt as command-line argument - and read the password from its STDOUT. See also the 'core.askpass' + and read the password from its STDOUT. See also the 'core.askPass' option in linkgit:git-config[1]. 'GIT_TERMINAL_PROMPT':: diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index c892ffa5ce..70899b3023 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -80,7 +80,7 @@ Attributes which should be version-controlled and distributed to other repositories (i.e., attributes of interest to all users) should go into `.gitattributes` files. Attributes that should affect all repositories for a single user should be placed in a file specified by the -`core.attributesfile` configuration option (see linkgit:git-config[1]). +`core.attributesFile` configuration option (see linkgit:git-config[1]). Its default value is $XDG_CONFIG_HOME/git/attributes. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/attributes is used instead. Attributes for all users on a system should be placed in the diff --git a/Documentation/gitcredentials.txt b/Documentation/gitcredentials.txt index 47576be5db..1c75be0803 100644 --- a/Documentation/gitcredentials.txt +++ b/Documentation/gitcredentials.txt @@ -32,7 +32,7 @@ strategies to ask the user for usernames and passwords: to the program on the command line, and the user's input is read from its standard output. -2. Otherwise, if the `core.askpass` configuration variable is set, its +2. Otherwise, if the `core.askPass` configuration variable is set, its value is used as above. 3. Otherwise, if the `SSH_ASKPASS` environment variable is set, its diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt index 9ef2469373..7ba0ac965d 100644 --- a/Documentation/githooks.txt +++ b/Documentation/githooks.txt @@ -341,6 +341,36 @@ Both standard output and standard error output are forwarded to 'git send-pack' on the other end, so you can simply `echo` messages for the user. +push-to-checkout +~~~~~~~~~~~~~~~~ + +This hook is invoked by 'git-receive-pack' on the remote repository, +which happens when a 'git push' is done on a local repository, when +the push tries to update the branch that is currently checked out +and the `receive.denyCurrentBranch` configuration variable is set to +`updateInstead`. Such a push by default is refused if the working +tree and the index of the remote repository has any difference from +the currently checked out commit; when both the working tree and the +index match the current commit, they are updated to match the newly +pushed tip of the branch. This hook is to be used to override the +default behaviour. + +The hook receives the commit with which the tip of the current +branch is going to be updated. It can exit with a non-zero status +to refuse the push (when it does so, it must not modify the index or +the working tree). Or it can make any necessary changes to the +working tree and to the index to bring them to the desired state +when the tip of the current branch is updated to the new commit, and +exit with a zero status. + +For example, the hook can simply run `git read-tree -u -m HEAD "$1"` +in order to emulate 'git fetch' that is run in the reverse direction +with `git push`, as the two-tree form of `read-tree -u -m` is +essentially the same as `git checkout` that switches branches while +keeping the local changes in the working tree that do not interfere +with the difference between the branches. + + pre-auto-gc ~~~~~~~~~~~ diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.txt index 4fd04423e9..473623d631 100644 --- a/Documentation/gitignore.txt +++ b/Documentation/gitignore.txt @@ -38,7 +38,7 @@ precedence, the last matching pattern decides the outcome): * Patterns read from `$GIT_DIR/info/exclude`. * Patterns read from the file specified by the configuration - variable 'core.excludesfile'. + variable 'core.excludesFile'. Which file to place a pattern in depends on how the pattern is meant to be used. @@ -56,7 +56,7 @@ be used. * Patterns which a user wants Git to ignore in all situations (e.g., backup or temporary files generated by the user's editor of choice) generally go into a file specified by - `core.excludesfile` in the user's `~/.gitconfig`. Its default value is + `core.excludesFile` in the user's `~/.gitconfig`. Its default value is $XDG_CONFIG_HOME/git/ignore. If $XDG_CONFIG_HOME is either not set or empty, $HOME/.config/git/ignore is used instead. diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt index ebe7a6c24c..0506f07d74 100644 --- a/Documentation/gitweb.conf.txt +++ b/Documentation/gitweb.conf.txt @@ -706,7 +706,7 @@ show-sizes:: I/O. Enabled by default. + This feature can be configured on a per-repository basis via -repository's `gitweb.showsizes` configuration variable (boolean). +repository's `gitweb.showSizes` configuration variable (boolean). patches:: Enable and configure "patches" view, which displays list of commits in email diff --git a/Documentation/merge-config.txt b/Documentation/merge-config.txt index d78d6d854e..8a0e52f8ee 100644 --- a/Documentation/merge-config.txt +++ b/Documentation/merge-config.txt @@ -1,4 +1,4 @@ -merge.conflictstyle:: +merge.conflictStyle:: Specify the style in which conflicted hunks are written out to working tree files upon merge. The default is "merge", which shows a `<<<<<<<` conflict marker, changes made by one side, diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.txt index 8569e29d08..74aa01a0ec 100644 --- a/Documentation/pretty-options.txt +++ b/Documentation/pretty-options.txt @@ -3,9 +3,13 @@ Pretty-print the contents of the commit logs in a given format, where '<format>' can be one of 'oneline', 'short', 'medium', - 'full', 'fuller', 'email', 'raw' and 'format:<string>'. See - the "PRETTY FORMATS" section for some additional details for each - format. When omitted, the format defaults to 'medium'. + 'full', 'fuller', 'email', 'raw', 'format:<string>' + and 'tformat:<string>'. When '<format>' is none of the above, + and has '%placeholder' in it, it acts as if + '--pretty=tformat:<format>' were given. ++ +See the "PRETTY FORMATS" section for some additional details for each +format. When '=<format>' part is omitted, it defaults to 'medium'. + Note: you can specify the default pretty format in the repository configuration (see linkgit:git-config[1]). diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt index 97ef2e8e71..f620ee4e1c 100644 --- a/Documentation/rev-list-options.txt +++ b/Documentation/rev-list-options.txt @@ -66,6 +66,10 @@ if it is part of the log message. Limit the commits output to ones that match all given `--grep`, instead of ones that match at least one. +--invert-grep:: + Limit the commits output to ones with log message that do not + match the pattern specified with `--grep=<pattern>`. + -i:: --regexp-ignore-case:: Match the regular expression limiting patterns without regard to letter @@ -119,7 +123,8 @@ parents) and `--max-parents=-1` (negative numbers denote no upper limit). because merges into a topic branch tend to be only about adjusting to updated upstream from time to time, and this option allows you to ignore the individual commits - brought in to your history by such a merge. + brought in to your history by such a merge. Cannot be + combined with --bisect. --not:: Reverses the meaning of the '{caret}' prefix (or lack thereof) @@ -181,7 +186,7 @@ ifndef::git-rev-list[] Pretend as if the bad bisection ref `refs/bisect/bad` was listed and as if it was followed by `--not` and the good bisection refs `refs/bisect/good-*` on the command - line. + line. Cannot be combined with --first-parent. endif::git-rev-list[] --stdin:: @@ -562,7 +567,7 @@ outputs 'midpoint', the output of the two commands would be of roughly the same length. Finding the change which introduces a regression is thus reduced to a binary search: repeatedly generate and test new 'midpoint's until the commit chain is of length -one. +one. Cannot be combined with --first-parent. --bisect-vars:: This calculates the same as `--bisect`, except that refs in @@ -675,6 +680,7 @@ endif::git-rev-list[] given on the command line. Otherwise (if `sorted` or no argument was given), the commits are shown in reverse chronological order by commit time. + Cannot be combined with `--graph`. --do-walk:: Overrides a previous `--no-walk`. @@ -777,6 +783,7 @@ you would get an output like this: on the left hand side of the output. This may cause extra lines to be printed in between commits, in order for the graph history to be drawn properly. + Cannot be combined with `--no-walk`. + This enables parent rewriting, see 'History Simplification' below. + diff --git a/Documentation/technical/api-error-handling.txt b/Documentation/technical/api-error-handling.txt new file mode 100644 index 0000000000..ceeedd485c --- /dev/null +++ b/Documentation/technical/api-error-handling.txt @@ -0,0 +1,75 @@ +Error reporting in git +====================== + +`die`, `usage`, `error`, and `warning` report errors of various +kinds. + +- `die` is for fatal application errors. It prints a message to + the user and exits with status 128. + +- `usage` is for errors in command line usage. After printing its + message, it exits with status 129. (See also `usage_with_options` + in the link:api-parse-options.html[parse-options API].) + +- `error` is for non-fatal library errors. It prints a message + to the user and returns -1 for convenience in signaling the error + to the caller. + +- `warning` is for reporting situations that probably should not + occur but which the user (and Git) can continue to work around + without running into too many problems. Like `error`, it + returns -1 after reporting the situation to the caller. + +Customizable error handlers +--------------------------- + +The default behavior of `die` and `error` is to write a message to +stderr and then exit or return as appropriate. This behavior can be +overridden using `set_die_routine` and `set_error_routine`. For +example, "git daemon" uses set_die_routine to write the reason `die` +was called to syslog before exiting. + +Library errors +-------------- + +Functions return a negative integer on error. Details beyond that +vary from function to function: + +- Some functions return -1 for all errors. Others return a more + specific value depending on how the caller might want to react + to the error. + +- Some functions report the error to stderr with `error`, + while others leave that for the caller to do. + +- errno is not meaningful on return from most functions (except + for thin wrappers for system calls). + +Check the function's API documentation to be sure. + +Caller-handled errors +--------------------- + +An increasing number of functions take a parameter 'struct strbuf *err'. +On error, such functions append a message about what went wrong to the +'err' strbuf. The message is meant to be complete enough to be passed +to `die` or `error` as-is. For example: + + if (ref_transaction_commit(transaction, &err)) + die("%s", err.buf); + +The 'err' parameter will be untouched if no error occurred, so multiple +function calls can be chained: + + t = ref_transaction_begin(&err); + if (!t || + ref_transaction_update(t, "HEAD", ..., &err) || + ret_transaction_commit(t, &err)) + die("%s", err.buf); + +The 'err' parameter must be a pointer to a valid strbuf. To silence +a message, pass a strbuf that is explicitly ignored: + + if (thing_that_can_fail_in_an_ignorable_way(..., &err)) + /* This failure is okay. */ + strbuf_reset(&err); diff --git a/Documentation/technical/api-strbuf.txt b/Documentation/technical/api-strbuf.txt deleted file mode 100644 index cca6543234..0000000000 --- a/Documentation/technical/api-strbuf.txt +++ /dev/null @@ -1,351 +0,0 @@ -strbuf API -========== - -strbuf's are meant to be used with all the usual C string and memory -APIs. Given that the length of the buffer is known, it's often better to -use the mem* functions than a str* one (memchr vs. strchr e.g.). -Though, one has to be careful about the fact that str* functions often -stop on NULs and that strbufs may have embedded NULs. - -A strbuf is NUL terminated for convenience, but no function in the -strbuf API actually relies on the string being free of NULs. - -strbufs have some invariants that are very important to keep in mind: - -. The `buf` member is never NULL, so it can be used in any usual C -string operations safely. strbuf's _have_ to be initialized either by -`strbuf_init()` or by `= STRBUF_INIT` before the invariants, though. -+ -Do *not* assume anything on what `buf` really is (e.g. if it is -allocated memory or not), use `strbuf_detach()` to unwrap a memory -buffer from its strbuf shell in a safe way. That is the sole supported -way. This will give you a malloced buffer that you can later `free()`. -+ -However, it is totally safe to modify anything in the string pointed by -the `buf` member, between the indices `0` and `len-1` (inclusive). - -. The `buf` member is a byte array that has at least `len + 1` bytes - allocated. The extra byte is used to store a `'\0'`, allowing the - `buf` member to be a valid C-string. Every strbuf function ensure this - invariant is preserved. -+ -NOTE: It is OK to "play" with the buffer directly if you work it this - way: -+ ----- -strbuf_grow(sb, SOME_SIZE); <1> -strbuf_setlen(sb, sb->len + SOME_OTHER_SIZE); ----- -<1> Here, the memory array starting at `sb->buf`, and of length -`strbuf_avail(sb)` is all yours, and you can be sure that -`strbuf_avail(sb)` is at least `SOME_SIZE`. -+ -NOTE: `SOME_OTHER_SIZE` must be smaller or equal to `strbuf_avail(sb)`. -+ -Doing so is safe, though if it has to be done in many places, adding the -missing API to the strbuf module is the way to go. -+ -WARNING: Do _not_ assume that the area that is yours is of size `alloc -- 1` even if it's true in the current implementation. Alloc is somehow a -"private" member that should not be messed with. Use `strbuf_avail()` -instead. - -Data structures ---------------- - -* `struct strbuf` - -This is the string buffer structure. The `len` member can be used to -determine the current length of the string, and `buf` member provides -access to the string itself. - -Functions ---------- - -* Life cycle - -`strbuf_init`:: - - Initialize the structure. The second parameter can be zero or a bigger - number to allocate memory, in case you want to prevent further reallocs. - -`strbuf_release`:: - - Release a string buffer and the memory it used. You should not use the - string buffer after using this function, unless you initialize it again. - -`strbuf_detach`:: - - Detach the string from the strbuf and returns it; you now own the - storage the string occupies and it is your responsibility from then on - to release it with `free(3)` when you are done with it. - -`strbuf_attach`:: - - Attach a string to a buffer. You should specify the string to attach, - the current length of the string and the amount of allocated memory. - The amount must be larger than the string length, because the string you - pass is supposed to be a NUL-terminated string. This string _must_ be - malloc()ed, and after attaching, the pointer cannot be relied upon - anymore, and neither be free()d directly. - -`strbuf_swap`:: - - Swap the contents of two string buffers. - -* Related to the size of the buffer - -`strbuf_avail`:: - - Determine the amount of allocated but unused memory. - -`strbuf_grow`:: - - Ensure that at least this amount of unused memory is available after - `len`. This is used when you know a typical size for what you will add - and want to avoid repetitive automatic resizing of the underlying buffer. - This is never a needed operation, but can be critical for performance in - some cases. - -`strbuf_setlen`:: - - Set the length of the buffer to a given value. This function does *not* - allocate new memory, so you should not perform a `strbuf_setlen()` to a - length that is larger than `len + strbuf_avail()`. `strbuf_setlen()` is - just meant as a 'please fix invariants from this strbuf I just messed - with'. - -`strbuf_reset`:: - - Empty the buffer by setting the size of it to zero. - -* Related to the contents of the buffer - -`strbuf_trim`:: - - Strip whitespace from the beginning and end of a string. - Equivalent to performing `strbuf_rtrim()` followed by `strbuf_ltrim()`. - -`strbuf_rtrim`:: - - Strip whitespace from the end of a string. - -`strbuf_ltrim`:: - - Strip whitespace from the beginning of a string. - -`strbuf_reencode`:: - - Replace the contents of the strbuf with a reencoded form. Returns -1 - on error, 0 on success. - -`strbuf_tolower`:: - - Lowercase each character in the buffer using `tolower`. - -`strbuf_cmp`:: - - Compare two buffers. Returns an integer less than, equal to, or greater - than zero if the first buffer is found, respectively, to be less than, - to match, or be greater than the second buffer. - -* Adding data to the buffer - -NOTE: All of the functions in this section will grow the buffer as necessary. -If they fail for some reason other than memory shortage and the buffer hadn't -been allocated before (i.e. the `struct strbuf` was set to `STRBUF_INIT`), -then they will free() it. - -`strbuf_addch`:: - - Add a single character to the buffer. - -`strbuf_addchars`:: - - Add a character the specified number of times to the buffer. - -`strbuf_insert`:: - - Insert data to the given position of the buffer. The remaining contents - will be shifted, not overwritten. - -`strbuf_remove`:: - - Remove given amount of data from a given position of the buffer. - -`strbuf_splice`:: - - Remove the bytes between `pos..pos+len` and replace it with the given - data. - -`strbuf_add_commented_lines`:: - - Add a NUL-terminated string to the buffer. Each line will be prepended - by a comment character and a blank. - -`strbuf_add`:: - - Add data of given length to the buffer. - -`strbuf_addstr`:: - -Add a NUL-terminated string to the buffer. -+ -NOTE: This function will *always* be implemented as an inline or a macro -that expands to: -+ ----- -strbuf_add(..., s, strlen(s)); ----- -+ -Meaning that this is efficient to write things like: -+ ----- -strbuf_addstr(sb, "immediate string"); ----- - -`strbuf_addbuf`:: - - Copy the contents of another buffer at the end of the current one. - -`strbuf_adddup`:: - - Copy part of the buffer from a given position till a given length to the - end of the buffer. - -`strbuf_expand`:: - - This function can be used to expand a format string containing - placeholders. To that end, it parses the string and calls the specified - function for every percent sign found. -+ -The callback function is given a pointer to the character after the `%` -and a pointer to the struct strbuf. It is expected to add the expanded -version of the placeholder to the strbuf, e.g. to add a newline -character if the letter `n` appears after a `%`. The function returns -the length of the placeholder recognized and `strbuf_expand()` skips -over it. -+ -The format `%%` is automatically expanded to a single `%` as a quoting -mechanism; callers do not need to handle the `%` placeholder themselves, -and the callback function will not be invoked for this placeholder. -+ -All other characters (non-percent and not skipped ones) are copied -verbatim to the strbuf. If the callback returned zero, meaning that the -placeholder is unknown, then the percent sign is copied, too. -+ -In order to facilitate caching and to make it possible to give -parameters to the callback, `strbuf_expand()` passes a context pointer, -which can be used by the programmer of the callback as she sees fit. - -`strbuf_expand_dict_cb`:: - - Used as callback for `strbuf_expand()`, expects an array of - struct strbuf_expand_dict_entry as context, i.e. pairs of - placeholder and replacement string. The array needs to be - terminated by an entry with placeholder set to NULL. - -`strbuf_addbuf_percentquote`:: - - Append the contents of one strbuf to another, quoting any - percent signs ("%") into double-percents ("%%") in the - destination. This is useful for literal data to be fed to either - strbuf_expand or to the *printf family of functions. - -`strbuf_humanise_bytes`:: - - Append the given byte size as a human-readable string (i.e. 12.23 KiB, - 3.50 MiB). - -`strbuf_addf`:: - - Add a formatted string to the buffer. - -`strbuf_commented_addf`:: - - Add a formatted string prepended by a comment character and a - blank to the buffer. - -`strbuf_fread`:: - - Read a given size of data from a FILE* pointer to the buffer. -+ -NOTE: The buffer is rewound if the read fails. If -1 is returned, -`errno` must be consulted, like you would do for `read(3)`. -`strbuf_read()`, `strbuf_read_file()` and `strbuf_getline()` has the -same behaviour as well. - -`strbuf_read`:: - - Read the contents of a given file descriptor. The third argument can be - used to give a hint about the file size, to avoid reallocs. - -`strbuf_read_file`:: - - Read the contents of a file, specified by its path. The third argument - can be used to give a hint about the file size, to avoid reallocs. - -`strbuf_readlink`:: - - Read the target of a symbolic link, specified by its path. The third - argument can be used to give a hint about the size, to avoid reallocs. - -`strbuf_getline`:: - - Read a line from a FILE *, overwriting the existing contents - of the strbuf. The second argument specifies the line - terminator character, typically `'\n'`. - Reading stops after the terminator or at EOF. The terminator - is removed from the buffer before returning. Returns 0 unless - there was nothing left before EOF, in which case it returns `EOF`. - -`strbuf_getwholeline`:: - - Like `strbuf_getline`, but keeps the trailing terminator (if - any) in the buffer. - -`strbuf_getwholeline_fd`:: - - Like `strbuf_getwholeline`, but operates on a file descriptor. - It reads one character at a time, so it is very slow. Do not - use it unless you need the correct position in the file - descriptor. - -`strbuf_getcwd`:: - - Set the buffer to the path of the current working directory. - -`strbuf_add_absolute_path` - - Add a path to a buffer, converting a relative path to an - absolute one in the process. Symbolic links are not - resolved. - -`stripspace`:: - - Strip whitespace from a buffer. The second parameter controls if - comments are considered contents to be removed or not. - -`strbuf_split_buf`:: -`strbuf_split_str`:: -`strbuf_split_max`:: -`strbuf_split`:: - - Split a string or strbuf into a list of strbufs at a specified - terminator character. The returned substrings include the - terminator characters. Some of these functions take a `max` - parameter, which, if positive, limits the output to that - number of substrings. - -`strbuf_list_free`:: - - Free a list of strbufs (for example, the return values of the - `strbuf_split()` functions). - -`launch_editor`:: - - Launch the user preferred editor to edit a file and fill the buffer - with the file's contents upon the user completing their editing. The - third argument can be used to set the environment which the editor is - run in. If the buffer is NULL the editor is launched as usual but the - file's contents are not read into the buffer upon completion. diff --git a/Documentation/technical/protocol-capabilities.txt b/Documentation/technical/protocol-capabilities.txt index 6d5424c1bd..4f8a7bfb4c 100644 --- a/Documentation/technical/protocol-capabilities.txt +++ b/Documentation/technical/protocol-capabilities.txt @@ -18,8 +18,9 @@ was sent. Server MUST NOT ignore capabilities that client requested and server advertised. As a consequence of these rules, server MUST NOT advertise capabilities it does not understand. -The 'report-status', 'delete-refs', 'quiet', and 'push-cert' capabilities -are sent and recognized by the receive-pack (push to server) process. +The 'atomic', 'report-status', 'delete-refs', 'quiet', and 'push-cert' +capabilities are sent and recognized by the receive-pack (push to server) +process. The 'ofs-delta' and 'side-band-64k' capabilities are sent and recognized by both upload-pack and receive-pack protocols. The 'agent' capability @@ -244,6 +245,14 @@ respond with the 'quiet' capability to suppress server-side progress reporting if the local progress reporting is also being suppressed (e.g., via `push -q`, or if stderr does not go to a tty). +atomic +------ + +If the server sends the 'atomic' capability it is capable of accepting +atomic pushes. If the pushing client requests this capability, the server +will update the refs in one atomic transaction. Either all refs are +updated or none. + allow-tip-sha1-in-want ---------------------- diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt index 7330d880f3..68978f5338 100644 --- a/Documentation/user-manual.txt +++ b/Documentation/user-manual.txt @@ -1200,7 +1200,7 @@ for other users who clone your repository. If you wish the exclude patterns to affect only certain repositories (instead of every repository for a given project), you may instead put them in a file in your repository named `.git/info/exclude`, or in any -file specified by the `core.excludesfile` configuration variable. +file specified by the `core.excludesFile` configuration variable. Some Git commands can also take exclude patterns directly on the command line. See linkgit:gitignore[5] for the details. diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 7e0ccef568..730b3f9fe7 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.3.5 +DEF_VER=v2.4.0-rc0 LF=' ' @@ -348,6 +348,17 @@ all:: # # Define NO_HMAC_CTX_CLEANUP if your OpenSSL is version 0.9.6b or earlier to # cleanup the HMAC context with the older HMAC_cleanup function. +# +# Define USE_PARENS_AROUND_GETTEXT_N to "yes" if your compiler happily +# compiles the following initialization: +# +# static const char s[] = ("FOO"); +# +# and define it to "no" if you need to remove the parentheses () around the +# constant. The default is "auto", which means to use parentheses if your +# compiler is detected to support it. +# +# Define HAVE_BSD_SYSCTL if your platform has a BSD-compatible sysctl function. GIT-VERSION-FILE: FORCE @$(SHELL_PATH) ./GIT-VERSION-GEN @@ -955,6 +966,14 @@ ifneq (,$(SOCKLEN_T)) BASIC_CFLAGS += -Dsocklen_t=$(SOCKLEN_T) endif +ifeq (yes,$(USE_PARENS_AROUND_GETTEXT_N)) + BASIC_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=1 +else +ifeq (no,$(USE_PARENS_AROUND_GETTEXT_N)) + BASIC_CFLAGS += -DUSE_PARENS_AROUND_GETTEXT_N=0 +endif +endif + ifeq ($(uname_S),Darwin) ifndef NO_FINK ifeq ($(shell test -d /sw/lib && echo y),y) @@ -1414,6 +1433,10 @@ ifdef HAVE_CLOCK_MONOTONIC BASIC_CFLAGS += -DHAVE_CLOCK_MONOTONIC endif +ifdef HAVE_BSD_SYSCTL + BASIC_CFLAGS += -DHAVE_BSD_SYSCTL +endif + ifeq ($(TCLTK_PATH),) NO_TCLTK = NoThanks endif @@ -1 +1 @@ -Documentation/RelNotes/2.3.5.txt
\ No newline at end of file +Documentation/RelNotes/2.4.0.txt
\ No newline at end of file @@ -105,7 +105,7 @@ void detach_advice(const char *new_name) "state without impacting any branches by performing another checkout.\n\n" "If you want to create a new branch to retain commits you create, you may\n" "do so (now or later) by using -b with the checkout command again. Example:\n\n" - " git checkout -b new_branch_name\n\n"; + " git checkout -b <new-branch-name>\n\n"; fprintf(stderr, fmt, new_name); } diff --git a/archive-zip.c b/archive-zip.c index 1a54e1b187..ffb3535e93 100644 --- a/archive-zip.c +++ b/archive-zip.c @@ -5,6 +5,8 @@ #include "archive.h" #include "streaming.h" #include "utf8.h" +#include "userdiff.h" +#include "xdiff-interface.h" static int zip_date; static int zip_time; @@ -188,6 +190,16 @@ static int has_only_ascii(const char *s) } } +static int entry_is_binary(const char *path, const void *buffer, size_t size) +{ + struct userdiff_driver *driver = userdiff_find_by_path(path); + if (!driver) + driver = userdiff_find_by_name("default"); + if (driver->binary != -1) + return driver->binary; + return buffer_is_binary(buffer, size); +} + #define STREAM_BUFFER_SIZE (1024 * 16) static int write_zip_entry(struct archiver_args *args, @@ -209,6 +221,8 @@ static int write_zip_entry(struct archiver_args *args, struct git_istream *stream = NULL; unsigned long flags = 0; unsigned long size; + int is_binary = -1; + const char *path_without_prefix = path + args->baselen; crc = crc32(0, NULL, 0); @@ -255,6 +269,8 @@ static int write_zip_entry(struct archiver_args *args, return error("cannot read %s", sha1_to_hex(sha1)); crc = crc32(crc, buffer, size); + is_binary = entry_is_binary(path_without_prefix, + buffer, size); out = buffer; } compressed_size = (method == 0) ? size : 0; @@ -299,7 +315,6 @@ static int write_zip_entry(struct archiver_args *args, copy_le16(dirent.extra_length, ZIP_EXTRA_MTIME_SIZE); copy_le16(dirent.comment_length, 0); copy_le16(dirent.disk, 0); - copy_le16(dirent.attr1, 0); copy_le32(dirent.attr2, attr2); copy_le32(dirent.offset, zip_offset); @@ -327,6 +342,9 @@ static int write_zip_entry(struct archiver_args *args, if (readlen <= 0) break; crc = crc32(crc, buf, readlen); + if (is_binary == -1) + is_binary = entry_is_binary(path_without_prefix, + buf, readlen); write_or_die(1, buf, readlen); } close_istream(stream); @@ -359,6 +377,9 @@ static int write_zip_entry(struct archiver_args *args, if (readlen <= 0) break; crc = crc32(crc, buf, readlen); + if (is_binary == -1) + is_binary = entry_is_binary(path_without_prefix, + buf, readlen); zstream.next_in = buf; zstream.avail_in = readlen; @@ -403,6 +424,8 @@ static int write_zip_entry(struct archiver_args *args, free(deflated); free(buffer); + copy_le16(dirent.attr1, !is_binary); + memcpy(zip_dir + zip_dir_offset, &dirent, ZIP_DIR_HEADER_SIZE); zip_dir_offset += ZIP_DIR_HEADER_SIZE; memcpy(zip_dir + zip_dir_offset, path, pathlen); @@ -8,9 +8,9 @@ #include "dir.h" static char const * const archive_usage[] = { - N_("git archive [options] <tree-ish> [<path>...]"), + N_("git archive [<options>] <tree-ish> [<path>...]"), N_("git archive --list"), - N_("git archive --remote <repo> [--exec <cmd>] [options] <tree-ish> [<path>...]"), + N_("git archive --remote <repo> [--exec <cmd>] [<options>] <tree-ish> [<path>...]"), N_("git archive --remote <repo> [--exec <cmd>] --list"), NULL }; @@ -32,9 +32,12 @@ struct git_attr { struct git_attr *next; unsigned h; int attr_nr; + int maybe_macro; + int maybe_real; char name[FLEX_ARRAY]; }; static int attr_nr; +static int cannot_trust_maybe_real; static struct git_attr_check *check_all_attr; static struct git_attr *(git_attr_hash[HASHSIZE]); @@ -95,6 +98,8 @@ static struct git_attr *git_attr_internal(const char *name, int len) a->h = hval; a->next = git_attr_hash[pos]; a->attr_nr = attr_nr++; + a->maybe_macro = 0; + a->maybe_real = 0; git_attr_hash[pos] = a; REALLOC_ARRAY(check_all_attr, attr_nr); @@ -244,9 +249,10 @@ static struct match_attr *parse_attr_line(const char *line, const char *src, sizeof(*res) + sizeof(struct attr_state) * num_attr + (is_macro ? 0 : namelen + 1)); - if (is_macro) + if (is_macro) { res->u.attr = git_attr_internal(name, namelen); - else { + res->u.attr->maybe_macro = 1; + } else { char *p = (char *)&(res->state[num_attr]); memcpy(p, name, namelen); res->u.pat.pattern = p; @@ -266,6 +272,10 @@ static struct match_attr *parse_attr_line(const char *line, const char *src, /* Second pass to fill the attr_states */ for (cp = states, i = 0; *cp; i++) { cp = parse_attr(src, lineno, cp, &(res->state[i])); + if (!is_macro) + res->state[i].attr->maybe_real = 1; + if (res->state[i].attr->maybe_macro) + cannot_trust_maybe_real = 1; } return res; @@ -681,13 +691,14 @@ static int fill(const char *path, int pathlen, int basename_offset, return rem; } -static int macroexpand_one(int attr_nr, int rem) +static int macroexpand_one(int nr, int rem) { struct attr_stack *stk; struct match_attr *a = NULL; int i; - if (check_all_attr[attr_nr].value != ATTR__TRUE) + if (check_all_attr[nr].value != ATTR__TRUE || + !check_all_attr[nr].attr->maybe_macro) return rem; for (stk = attr_stack; !a && stk; stk = stk->prev) @@ -695,7 +706,7 @@ static int macroexpand_one(int attr_nr, int rem) struct match_attr *ma = stk->attrs[i]; if (!ma->is_macro) continue; - if (ma->u.attr->attr_nr == attr_nr) + if (ma->u.attr->attr_nr == nr) a = ma; } @@ -706,10 +717,13 @@ static int macroexpand_one(int attr_nr, int rem) } /* - * Collect all attributes for path into the array pointed to by - * check_all_attr. + * Collect attributes for path into the array pointed to by + * check_all_attr. If num is non-zero, only attributes in check[] are + * collected. Otherwise all attributes are collected. */ -static void collect_all_attrs(const char *path) +static void collect_some_attrs(const char *path, int num, + struct git_attr_check *check) + { struct attr_stack *stk; int i, pathlen, rem, dirlen; @@ -732,6 +746,19 @@ static void collect_all_attrs(const char *path) prepare_attr_stack(path, dirlen); for (i = 0; i < attr_nr; i++) check_all_attr[i].value = ATTR__UNKNOWN; + if (num && !cannot_trust_maybe_real) { + rem = 0; + for (i = 0; i < num; i++) { + if (!check[i].attr->maybe_real) { + struct git_attr_check *c; + c = check_all_attr + check[i].attr->attr_nr; + c->value = ATTR__UNSET; + rem++; + } + } + if (rem == num) + return; + } rem = attr_nr; for (stk = attr_stack; 0 < rem && stk; stk = stk->prev) @@ -742,7 +769,7 @@ int git_check_attr(const char *path, int num, struct git_attr_check *check) { int i; - collect_all_attrs(path); + collect_some_attrs(path, num, check); for (i = 0; i < num; i++) { const char *value = check_all_attr[check[i].attr->attr_nr].value; @@ -758,7 +785,7 @@ int git_all_attrs(const char *path, int *num, struct git_attr_check **check) { int i, count, j; - collect_all_attrs(path); + collect_some_attrs(path, 0, NULL); /* Count the number of attributes that are set. */ count = 0; @@ -284,8 +284,9 @@ void create_branch(const char *head, transaction = ref_transaction_begin(&err); if (!transaction || - ref_transaction_update(transaction, ref.buf, sha1, - null_sha1, 0, !forcing, msg, &err) || + ref_transaction_update(transaction, ref.buf, + sha1, forcing ? NULL : null_sha1, + 0, msg, &err) || ref_transaction_commit(transaction, &err)) die("%s", err.buf); ref_transaction_free(transaction); diff --git a/builtin/add.c b/builtin/add.c index 1074e32349..3390933d68 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -19,7 +19,7 @@ #include "argv-array.h" static const char * const builtin_add_usage[] = { - N_("git add [options] [--] <pathspec>..."), + N_("git add [<options>] [--] <pathspec>..."), NULL }; static int patch_interactive, add_interactive, edit_interactive; diff --git a/builtin/apply.c b/builtin/apply.c index 0ca687fa6b..0769b09287 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -56,7 +56,7 @@ static const char *fake_ancestor; static int line_termination = '\n'; static unsigned int p_context = UINT_MAX; static const char * const apply_usage[] = { - N_("git apply [options] [<patch>...]"), + N_("git apply [<options>] [<patch>...]"), NULL }; @@ -1601,6 +1601,9 @@ static int parse_fragment(const char *line, unsigned long size, if (!deleted && !added) leading++; trailing++; + if (!apply_in_reverse && + ws_error_action == correct_ws_error) + check_whitespace(line, len, patch->ws_rule); break; case '-': if (apply_in_reverse && @@ -2773,7 +2776,8 @@ static int apply_one_fragment(struct image *img, struct fragment *frag, default: if (apply_verbosely) error(_("invalid start of line: '%c'"), first); - return -1; + applied_pos = -1; + goto out; } if (added_blank_line) { if (!new_blank_lines_at_end) @@ -2912,6 +2916,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag, (int)(old - oldlines), oldlines); } +out: free(oldlines); strbuf_release(&newlines); free(preimage.line_allocated); diff --git a/builtin/blame.c b/builtin/blame.c index 2b1f9dd6cd..06484c2e0e 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -27,12 +27,12 @@ #include "line-range.h" #include "line-log.h" -static char blame_usage[] = N_("git blame [options] [rev-opts] [rev] [--] file"); +static char blame_usage[] = N_("git blame [<options>] [<rev-opts>] [<rev>] [--] file"); static const char *blame_opt_usage[] = { blame_usage, "", - N_("[rev-opts] are documented in git-rev-list(1)"), + N_("<rev-opts> are documented in git-rev-list(1)"), NULL }; diff --git a/builtin/branch.c b/builtin/branch.c index dc6f0b266c..1d150378e9 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -21,10 +21,10 @@ #include "wt-status.h" static const char * const builtin_branch_usage[] = { - N_("git branch [options] [-r | -a] [--merged | --no-merged]"), - N_("git branch [options] [-l] [-f] <branchname> [<start-point>]"), - N_("git branch [options] [-r] (-d | -D) <branchname>..."), - N_("git branch [options] (-m | -M) [<oldbranch>] <newbranch>"), + N_("git branch [<options>] [-r | -a] [--merged | --no-merged]"), + N_("git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"), + N_("git branch [<options>] [-r] (-d | -D) <branch-name>..."), + N_("git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"), NULL }; @@ -589,9 +589,16 @@ static char *get_head_description(void) else if (state.bisect_in_progress) strbuf_addf(&desc, _("(no branch, bisect started on %s)"), state.branch); - else if (state.detached_from) - strbuf_addf(&desc, _("(detached from %s)"), - state.detached_from); + else if (state.detached_from) { + /* TRANSLATORS: make sure these match _("HEAD detached at ") + and _("HEAD detached from ") in wt-status.c */ + if (state.detached_at) + strbuf_addf(&desc, _("(HEAD detached at %s)"), + state.detached_from); + else + strbuf_addf(&desc, _("(HEAD detached from %s)"), + state.detached_from); + } else strbuf_addstr(&desc, _("(no branch)")); free(state.branch); diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 31b133b357..df99df4db1 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -323,8 +323,8 @@ static int batch_objects(struct batch_options *opt) } static const char * const cat_file_usage[] = { - N_("git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>"), - N_("git cat-file (--batch|--batch-check) < <list_of_objects>"), + N_("git cat-file (-t | -s | -e | -p | <type> | --textconv) <object>"), + N_("git cat-file (--batch | --batch-check) < <list-of-objects>"), NULL }; diff --git a/builtin/check-attr.c b/builtin/check-attr.c index 5600ec3f61..21d2bedcc9 100644 --- a/builtin/check-attr.c +++ b/builtin/check-attr.c @@ -8,8 +8,8 @@ static int all_attrs; static int cached_attrs; static int stdin_paths; static const char * const check_attr_usage[] = { -N_("git check-attr [-a | --all | attr...] [--] pathname..."), -N_("git check-attr --stdin [-z] [-a | --all | attr...] < <list-of-paths>"), +N_("git check-attr [-a | --all | <attr>...] [--] <pathname>..."), +N_("git check-attr --stdin [-z] [-a | --all | <attr>...] < <list-of-paths>"), NULL }; diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c index 594463a11b..dc8d97c56c 100644 --- a/builtin/check-ignore.c +++ b/builtin/check-ignore.c @@ -7,8 +7,8 @@ static int quiet, verbose, stdin_paths, show_non_matching, no_index; static const char * const check_ignore_usage[] = { -"git check-ignore [options] pathname...", -"git check-ignore [options] --stdin < <list-of-paths>", +"git check-ignore [<options>] <pathname>...", +"git check-ignore [<options>] --stdin < <list-of-paths>", NULL }; diff --git a/builtin/check-mailmap.c b/builtin/check-mailmap.c index 8f4d809bd8..eaaea546d3 100644 --- a/builtin/check-mailmap.c +++ b/builtin/check-mailmap.c @@ -5,7 +5,7 @@ static int use_stdin; static const char * const check_mailmap_usage[] = { -N_("git check-mailmap [options] <contact>..."), +N_("git check-mailmap [<options>] <contact>..."), NULL }; diff --git a/builtin/check-ref-format.c b/builtin/check-ref-format.c index 28a7320271..fd915d5984 100644 --- a/builtin/check-ref-format.c +++ b/builtin/check-ref-format.c @@ -8,7 +8,7 @@ #include "strbuf.h" static const char builtin_check_ref_format_usage[] = -"git check-ref-format [--normalize] [options] <refname>\n" +"git check-ref-format [--normalize] [<options>] <refname>\n" " or: git check-ref-format --branch <branchname-shorthand>"; /* diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index 031780f49e..9ca2da1583 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -123,7 +123,7 @@ static void checkout_all(const char *prefix, int prefix_length) } static const char * const builtin_checkout_index_usage[] = { - N_("git checkout-index [options] [--] [<file>...]"), + N_("git checkout-index [<options>] [--] [<file>...]"), NULL }; diff --git a/builtin/checkout.c b/builtin/checkout.c index 52d6cbb0a8..3e141fc149 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -22,8 +22,8 @@ #include "argv-array.h" static const char * const checkout_usage[] = { - N_("git checkout [options] <branch>"), - N_("git checkout [options] [<branch>] -- <file>..."), + N_("git checkout [<options>] <branch>"), + N_("git checkout [<options>] [<branch>] -- <file>..."), NULL, }; @@ -746,7 +746,7 @@ static void suggest_reattach(struct commit *commit, struct rev_info *revs) _( "If you want to keep them by creating a new branch, " "this may be a good time\nto do so with:\n\n" - " git branch new_branch_name %s\n\n"), + " git branch <new-branch-name> %s\n\n"), find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV)); } @@ -1127,7 +1127,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) OPT_BOOL(0, "ignore-skip-worktree-bits", &opts.ignore_skipworktree, N_("do not limit pathspecs to sparse entries only")), OPT_HIDDEN_BOOL(0, "guess", &dwim_new_local_branch, - N_("second guess 'git checkout no-such-branch'")), + N_("second guess 'git checkout <no-such-branch>'")), OPT_END(), }; diff --git a/builtin/clean.c b/builtin/clean.c index 7e7fdcfe54..98c103fa8b 100644 --- a/builtin/clean.c +++ b/builtin/clean.c @@ -754,7 +754,8 @@ static int ask_each_cmd(void) /* Ctrl-D should stop removing files */ if (!eof) { qname = quote_path_relative(item->string, NULL, &buf); - printf(_("remove %s? "), qname); + /* TRANSLATORS: Make sure to keep [y/N] as is */ + printf(_("Remove %s [y/N]? "), qname); if (strbuf_getline(&confirm, stdin, '\n') != EOF) { strbuf_trim(&confirm); } else { diff --git a/builtin/clone.c b/builtin/clone.c index 2d77a2de4f..53a2e5af35 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -34,7 +34,7 @@ * */ static const char * const builtin_clone_usage[] = { - N_("git clone [options] [--] <repo> [<dir>]"), + N_("git clone [<options>] [--] <repo> [<dir>]"), NULL }; diff --git a/builtin/column.c b/builtin/column.c index 75818520e1..449413c8a8 100644 --- a/builtin/column.c +++ b/builtin/column.c @@ -6,7 +6,7 @@ #include "column.h" static const char * const builtin_column_usage[] = { - N_("git column [options]"), + N_("git column [<options>]"), NULL }; static unsigned int colopts; diff --git a/builtin/commit.c b/builtin/commit.c index 714638c5d6..da79ac4bc7 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -34,12 +34,12 @@ #include "mailmap.h" static const char * const builtin_commit_usage[] = { - N_("git commit [options] [--] <pathspec>..."), + N_("git commit [<options>] [--] <pathspec>..."), NULL }; static const char * const builtin_status_usage[] = { - N_("git status [options] [--] <pathspec>..."), + N_("git status [<options>] [--] <pathspec>..."), NULL }; @@ -229,7 +229,7 @@ static int commit_index_files(void) static int list_paths(struct string_list *list, const char *with_tree, const char *prefix, const struct pathspec *pattern) { - int i; + int i, ret; char *m; if (!pattern->nr) @@ -256,7 +256,9 @@ static int list_paths(struct string_list *list, const char *with_tree, item->util = item; /* better a valid pointer than a fake one */ } - return report_path_error(m, pattern, prefix); + ret = report_path_error(m, pattern, prefix); + free(m); + return ret; } static void add_remove_files(struct string_list *list) @@ -1766,8 +1768,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix) if (!transaction || ref_transaction_update(transaction, "HEAD", sha1, current_head - ? current_head->object.sha1 : NULL, - 0, !!current_head, sb.buf, &err) || + ? current_head->object.sha1 : null_sha1, + 0, sb.buf, &err) || ref_transaction_commit(transaction, &err)) { rollback_index_files(); die("%s", err.buf); diff --git a/builtin/config.c b/builtin/config.c index 15a7bea936..d32c5327e5 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -5,7 +5,7 @@ #include "urlmatch.h" static const char *const builtin_config_usage[] = { - N_("git config [options]"), + N_("git config [<options>]"), NULL }; diff --git a/builtin/describe.c b/builtin/describe.c index 9103193b4f..e00a75b121 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -14,8 +14,8 @@ #define MAX_TAGS (FLAG_BITS - 1) static const char * const describe_usage[] = { - N_("git describe [options] <commit-ish>*"), - N_("git describe [options] --dirty"), + N_("git describe [<options>] [<commit-ish>...]"), + N_("git describe [<options>] --dirty"), NULL }; diff --git a/builtin/diff-files.c b/builtin/diff-files.c index 9200069363..8ed2eb8813 100644 --- a/builtin/diff-files.c +++ b/builtin/diff-files.c @@ -11,7 +11,7 @@ #include "submodule.h" static const char diff_files_usage[] = -"git diff-files [-q] [-0/-1/2/3 |-c|--cc] [<common diff options>] [<path>...]" +"git diff-files [-q] [-0 | -1 | -2 | -3 | -c | --cc] [<common-diff-options>] [<path>...]" COMMON_DIFF_OPTIONS_HELP; int cmd_diff_files(int argc, const char **argv, const char *prefix) diff --git a/builtin/diff-index.c b/builtin/diff-index.c index ce15b23042..d979824f93 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -7,7 +7,7 @@ static const char diff_cache_usage[] = "git diff-index [-m] [--cached] " -"[<common diff options>] <tree-ish> [<path>...]" +"[<common-diff-options>] <tree-ish> [<path>...]" COMMON_DIFF_OPTIONS_HELP; int cmd_diff_index(int argc, const char **argv, const char *prefix) diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c index 1c4ad6223e..12b683d021 100644 --- a/builtin/diff-tree.c +++ b/builtin/diff-tree.c @@ -82,7 +82,7 @@ static int diff_tree_stdin(char *line) static const char diff_tree_usage[] = "git diff-tree [--stdin] [-m] [-c] [--cc] [-s] [-v] [--pretty] [-t] [-r] [--root] " -"[<common diff options>] <tree-ish> [<tree-ish>] [<path>...]\n" +"[<common-diff-options>] <tree-ish> [<tree-ish>] [<path>...]\n" " -r diff recursively\n" " --root include the initial commit as diff against /dev/null\n" COMMON_DIFF_OPTIONS_HELP; diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 1262b405f8..4a6b340ab6 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -6,7 +6,7 @@ #include "sha1-array.h" static const char fetch_pack_usage[] = -"git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] " +"git fetch-pack [--all] [--stdin] [--quiet | -q] [--keep | -k] [--thin] " "[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] " "[--no-progress] [--diag-url] [-v] [<host>:]<directory> [<refs>...]"; diff --git a/builtin/fetch.c b/builtin/fetch.c index 75a55e590b..f9512652cf 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -415,8 +415,10 @@ static int s_update_ref(const char *action, transaction = ref_transaction_begin(&err); if (!transaction || - ref_transaction_update(transaction, ref->name, ref->new_sha1, - ref->old_sha1, 0, check_old, msg, &err)) + ref_transaction_update(transaction, ref->name, + ref->new_sha1, + check_old ? ref->old_sha1 : NULL, + 0, msg, &err)) goto fail; ret = ref_transaction_commit(transaction, &err); diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c index af7919e51e..1d962dc569 100644 --- a/builtin/fmt-merge-msg.c +++ b/builtin/fmt-merge-msg.c @@ -10,7 +10,7 @@ #include "gpg-interface.h" static const char * const fmt_merge_msg_usage[] = { - N_("git fmt-merge-msg [-m <message>] [--log[=<n>]|--no-log] [--file <file>]"), + N_("git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"), NULL }; diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index 008513c2f1..83f9cf9163 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -1060,7 +1060,7 @@ static int opt_parse_sort(const struct option *opt, const char *arg, int unset) } static char const * const for_each_ref_usage[] = { - N_("git for-each-ref [options] [<pattern>]"), + N_("git for-each-ref [<options>] [<pattern>]"), NULL }; diff --git a/builtin/fsck.c b/builtin/fsck.c index a27515aeaa..0c757862e8 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -600,7 +600,7 @@ static int fsck_cache_tree(struct cache_tree *it) } static char const * const fsck_usage[] = { - N_("git fsck [options] [<object>...]"), + N_("git fsck [<options>] [<object>...]"), NULL }; diff --git a/builtin/gc.c b/builtin/gc.c index 005adbebea..5c634afc00 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -21,7 +21,7 @@ #define FAILED_RUN "failed to run %s" static const char * const builtin_gc_usage[] = { - N_("git gc [options]"), + N_("git gc [<options>]"), NULL }; diff --git a/builtin/grep.c b/builtin/grep.c index fe7b9fdd93..abc440023f 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -20,7 +20,7 @@ #include "pathspec.h" static char const * const grep_usage[] = { - N_("git grep [options] [-e] <pattern> [<rev>...] [[--] <path>...]"), + N_("git grep [<options>] [-e] <pattern> [<rev>...] [[--] <path>...]"), NULL }; diff --git a/builtin/hash-object.c b/builtin/hash-object.c index 6158363318..207b90c7b1 100644 --- a/builtin/hash-object.c +++ b/builtin/hash-object.c @@ -79,7 +79,7 @@ static void hash_stdin_paths(const char *type, int no_filters, unsigned flags, int cmd_hash_object(int argc, const char **argv, const char *prefix) { static const char * const hash_object_usage[] = { - N_("git hash-object [-t <type>] [-w] [--path=<file>|--no-filters] [--stdin] [--] <file>..."), + N_("git hash-object [-t <type>] [-w] [--path=<file> | --no-filters] [--stdin] [--] <file>..."), N_("git hash-object --stdin-paths < <list-of-paths>"), NULL }; diff --git a/builtin/help.c b/builtin/help.c index e78c135e01..3422e73079 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -49,7 +49,7 @@ static struct option builtin_help_options[] = { }; static const char * const builtin_help_usage[] = { - N_("git help [--all] [--guides] [--man|--web|--info] [command]"), + N_("git help [--all] [--guides] [--man | --web | --info] [<command>]"), NULL }; @@ -171,7 +171,7 @@ static void exec_man_cmd(const char *cmd, const char *page) { struct strbuf shell_cmd = STRBUF_INIT; strbuf_addf(&shell_cmd, "%s %s", cmd, page); - execl("/bin/sh", "sh", "-c", shell_cmd.buf, (char *)NULL); + execl(SHELL_PATH, SHELL_PATH, "-c", shell_cmd.buf, (char *)NULL); warning(_("failed to exec '%s': %s"), cmd, strerror(errno)); } @@ -456,7 +456,7 @@ static void list_common_guides_help(void) int cmd_help(int argc, const char **argv, const char *prefix) { int nongit; - const char *alias; + char *alias; enum help_format parsed_help_format; argc = parse_options(argc, argv, prefix, builtin_help_options, @@ -499,6 +499,7 @@ int cmd_help(int argc, const char **argv, const char *prefix) alias = alias_lookup(argv[0]); if (alias && !is_git_command(argv[0])) { printf_ln(_("`git %s' is aliased to `%s'"), argv[0], alias); + free(alias); return 0; } diff --git a/builtin/init-db.c b/builtin/init-db.c index 9966522b4a..6723d39c3b 100644 --- a/builtin/init-db.c +++ b/builtin/init-db.c @@ -472,7 +472,7 @@ static int shared_callback(const struct option *opt, const char *arg, int unset) } static const char *const init_db_usage[] = { - N_("git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [directory]"), + N_("git init [-q | --quiet] [--bare] [--template=<template-directory>] [--shared[=<permissions>]] [<directory>]"), NULL }; diff --git a/builtin/log.c b/builtin/log.c index a131992c52..dd8f3fcfc4 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -39,7 +39,7 @@ static const char *fmt_pretty; static const char * const builtin_log_usage[] = { N_("git log [<options>] [<revision range>] [[--] <path>...]"), - N_("git show [options] <object>..."), + N_("git show [<options>] <object>..."), NULL }; @@ -1023,7 +1023,7 @@ static const char *set_outdir(const char *prefix, const char *output_directory) } static const char * const builtin_format_patch_usage[] = { - N_("git format-patch [options] [<since> | <revision range>]"), + N_("git format-patch [<options>] [<since> | <revision-range>]"), NULL }; diff --git a/builtin/ls-files.c b/builtin/ls-files.c index 19063ebc64..6fa2205734 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -355,7 +355,7 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix) } static const char * const ls_files_usage[] = { - N_("git ls-files [options] [<file>...]"), + N_("git ls-files [<options>] [<file>...]"), NULL }; diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c index b2a4b92992..4554dbc8a9 100644 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@ -5,7 +5,7 @@ static const char ls_remote_usage[] = "git ls-remote [--heads] [--tags] [-u <exec> | --upload-pack <exec>]\n" -" [-q|--quiet] [--exit-code] [--get-url] [<repository> [<refs>...]]"; +" [-q | --quiet] [--exit-code] [--get-url] [<repository> [<refs>...]]"; /* * Is there one among the list of patterns that match the tail part diff --git a/builtin/mailinfo.c b/builtin/mailinfo.c index c8a47c173d..999a5250fb 100644 --- a/builtin/mailinfo.c +++ b/builtin/mailinfo.c @@ -1031,7 +1031,7 @@ static int git_mailinfo_config(const char *var, const char *value, void *unused) } static const char mailinfo_usage[] = - "git mailinfo [-k|-b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] msg patch < mail >info"; + "git mailinfo [-k | -b] [-m | --message-id] [-u | --encoding=<encoding> | -n] [--scissors | --no-scissors] <msg> <patch> < mail >info"; int cmd_mailinfo(int argc, const char **argv, const char *prefix) { diff --git a/builtin/merge-base.c b/builtin/merge-base.c index fdebef6fa1..08a8217890 100644 --- a/builtin/merge-base.c +++ b/builtin/merge-base.c @@ -26,8 +26,8 @@ static int show_merge_base(struct commit **rev, int rev_nr, int show_all) } static const char * const merge_base_usage[] = { - N_("git merge-base [-a|--all] <commit> <commit>..."), - N_("git merge-base [-a|--all] --octopus <commit>..."), + N_("git merge-base [-a | --all] <commit> <commit>..."), + N_("git merge-base [-a | --all] --octopus <commit>..."), N_("git merge-base --independent <commit>..."), N_("git merge-base --is-ancestor <commit> <commit>"), N_("git merge-base --fork-point <ref> [<commit>]"), diff --git a/builtin/merge-file.c b/builtin/merge-file.c index 232b76857c..ea8093f676 100644 --- a/builtin/merge-file.c +++ b/builtin/merge-file.c @@ -5,7 +5,7 @@ #include "parse-options.h" static const char *const merge_file_usage[] = { - N_("git merge-file [options] [-L name1 [-L orig [-L name2]]] file1 orig_file file2"), + N_("git merge-file [<options>] [-L <name1> [-L <orig> [-L <name2>]]] <file1> <orig-file> <file2>"), NULL }; @@ -42,7 +42,7 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix) N_("for conflicts, use this marker size")), OPT__QUIET(&quiet, N_("do not warn about conflicts")), OPT_CALLBACK('L', NULL, names, N_("name"), - N_("set labels for file1/orig_file/file2"), &label_cb), + N_("set labels for file1/orig-file/file2"), &label_cb), OPT_END(), }; diff --git a/builtin/merge-index.c b/builtin/merge-index.c index b416d92849..1a1eafa6fd 100644 --- a/builtin/merge-index.c +++ b/builtin/merge-index.c @@ -75,7 +75,7 @@ int cmd_merge_index(int argc, const char **argv, const char *prefix) signal(SIGCHLD, SIG_DFL); if (argc < 3) - usage("git merge-index [-o] [-q] <merge-program> (-a | [--] <filename>*)"); + usage("git merge-index [-o] [-q] <merge-program> (-a | [--] [<filename>...])"); read_cache(); diff --git a/builtin/merge.c b/builtin/merge.c index c638fd5a9a..3b0f8f96d4 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -42,8 +42,8 @@ struct strategy { }; static const char * const builtin_merge_usage[] = { - N_("git merge [options] [<commit>...]"), - N_("git merge [options] <msg> HEAD <commit>"), + N_("git merge [<options>] [<commit>...]"), + N_("git merge [<options>] <msg> HEAD <commit>"), N_("git merge --abort"), NULL }; diff --git a/builtin/mv.c b/builtin/mv.c index 563d05ba1a..d1d43168ae 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -12,7 +12,7 @@ #include "submodule.h" static const char * const builtin_mv_usage[] = { - N_("git mv [options] <source>... <destination>"), + N_("git mv [<options>] <source>... <destination>"), NULL }; diff --git a/builtin/name-rev.c b/builtin/name-rev.c index 3c8f319be6..9736d4452f 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -252,9 +252,9 @@ static void show_name(const struct object *obj, } static char const * const name_rev_usage[] = { - N_("git name-rev [options] <commit>..."), - N_("git name-rev [options] --all"), - N_("git name-rev [options] --stdin"), + N_("git name-rev [<options>] <commit>..."), + N_("git name-rev [<options>] --all"), + N_("git name-rev [<options>] --stdin"), NULL }; diff --git a/builtin/notes.c b/builtin/notes.c index a9f37d0456..63f95fc554 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -21,18 +21,18 @@ #include "notes-utils.h" static const char * const git_notes_usage[] = { - N_("git notes [--ref <notes_ref>] [list [<object>]]"), - N_("git notes [--ref <notes_ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"), - N_("git notes [--ref <notes_ref>] copy [-f] <from-object> <to-object>"), - N_("git notes [--ref <notes_ref>] append [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"), - N_("git notes [--ref <notes_ref>] edit [--allow-empty] [<object>]"), - N_("git notes [--ref <notes_ref>] show [<object>]"), - N_("git notes [--ref <notes_ref>] merge [-v | -q] [-s <strategy> ] <notes_ref>"), + N_("git notes [--ref <notes-ref>] [list [<object>]]"), + N_("git notes [--ref <notes-ref>] add [-f] [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"), + N_("git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>"), + N_("git notes [--ref <notes-ref>] append [--allow-empty] [-m <msg> | -F <file> | (-c | -C) <object>] [<object>]"), + N_("git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]"), + N_("git notes [--ref <notes-ref>] show [<object>]"), + N_("git notes [--ref <notes-ref>] merge [-v | -q] [-s <strategy>] <notes-ref>"), N_("git notes merge --commit [-v | -q]"), N_("git notes merge --abort [-v | -q]"), - N_("git notes [--ref <notes_ref>] remove [<object>...]"), - N_("git notes [--ref <notes_ref>] prune [-n | -v]"), - N_("git notes [--ref <notes_ref>] get-ref"), + N_("git notes [--ref <notes-ref>] remove [<object>...]"), + N_("git notes [--ref <notes-ref>] prune [-n | -v]"), + N_("git notes [--ref <notes-ref>] get-ref"), NULL }; @@ -68,7 +68,7 @@ static const char * const git_notes_show_usage[] = { }; static const char * const git_notes_merge_usage[] = { - N_("git notes merge [<options>] <notes_ref>"), + N_("git notes merge [<options>] <notes-ref>"), N_("git notes merge --commit [<options>]"), N_("git notes merge --abort [<options>]"), NULL @@ -951,7 +951,7 @@ int cmd_notes(int argc, const char **argv, const char *prefix) const char *override_notes_ref = NULL; struct option options[] = { OPT_STRING(0, "ref", &override_notes_ref, N_("notes-ref"), - N_("use notes from <notes_ref>")), + N_("use notes from <notes-ref>")), OPT_END() }; diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c index 649c3aaa93..d0532f66b1 100644 --- a/builtin/pack-redundant.c +++ b/builtin/pack-redundant.c @@ -11,7 +11,7 @@ #define BLKSIZE 512 static const char pack_redundant_usage[] = -"git pack-redundant [ --verbose ] [ --alt-odb ] < --all | <.pack filename> ...>"; +"git pack-redundant [--verbose] [--alt-odb] (--all | <filename.pack>...)"; static int load_all_packs, verbose, alt_odb; diff --git a/builtin/pack-refs.c b/builtin/pack-refs.c index b20b1ec4c1..39f9a55d16 100644 --- a/builtin/pack-refs.c +++ b/builtin/pack-refs.c @@ -3,7 +3,7 @@ #include "refs.h" static char const * const pack_refs_usage[] = { - N_("git pack-refs [options]"), + N_("git pack-refs [<options>]"), NULL }; diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c index f24a2c2bdc..7cf900ea07 100644 --- a/builtin/prune-packed.c +++ b/builtin/prune-packed.c @@ -4,7 +4,7 @@ #include "parse-options.h" static const char * const prune_packed_usage[] = { - N_("git prune-packed [-n|--dry-run] [-q|--quiet]"), + N_("git prune-packed [-n | --dry-run] [-q | --quiet]"), NULL }; diff --git a/builtin/push.c b/builtin/push.c index 12f5e69393..57c138bd7b 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -473,13 +473,22 @@ static int option_parse_recurse_submodules(const struct option *opt, static int git_push_config(const char *k, const char *v, void *cb) { - struct wt_status *s = cb; + int *flags = cb; int status; status = git_gpg_config(k, v, NULL); if (status) return status; - return git_default_config(k, v, s); + + if (!strcmp(k, "push.followtags")) { + if (git_config_bool(k, v)) + *flags |= TRANSPORT_PUSH_FOLLOW_TAGS; + else + *flags &= ~TRANSPORT_PUSH_FOLLOW_TAGS; + return 0; + } + + return git_default_config(k, v, NULL); } int cmd_push(int argc, const char **argv, const char *prefix) @@ -518,11 +527,12 @@ int cmd_push(int argc, const char **argv, const char *prefix) OPT_BIT(0, "follow-tags", &flags, N_("push missing but relevant tags"), TRANSPORT_PUSH_FOLLOW_TAGS), OPT_BIT(0, "signed", &flags, N_("GPG sign the push"), TRANSPORT_PUSH_CERT), + OPT_BIT(0, "atomic", &flags, N_("request atomic transaction on remote side"), TRANSPORT_PUSH_ATOMIC), OPT_END() }; packet_trace_identity("push"); - git_config(git_push_config, NULL); + git_config(git_push_config, &flags); argc = parse_options(argc, argv, prefix, options, push_usage, 0); if (deleterefs && (tags || (flags & (TRANSPORT_PUSH_ALL | TRANSPORT_PUSH_MIRROR)))) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 8266c1fccf..70e9ce5f96 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -38,9 +38,11 @@ static int receive_fsck_objects = -1; static int transfer_fsck_objects = -1; static int receive_unpack_limit = -1; static int transfer_unpack_limit = -1; +static int advertise_atomic_push = 1; static int unpack_limit = 100; static int report_status; static int use_sideband; +static int use_atomic; static int quiet; static int prefer_ofs_delta = 1; static int auto_update_server_info; @@ -67,6 +69,7 @@ static const char *NONCE_SLOP = "SLOP"; static const char *nonce_status; static long nonce_stamp_slop; static unsigned long nonce_stamp_slop_limit; +static struct ref_transaction *transaction; static enum deny_action parse_deny_action(const char *var, const char *value) { @@ -160,6 +163,11 @@ static int receive_pack_config(const char *var, const char *value, void *cb) return 0; } + if (strcmp(var, "receive.advertiseatomic") == 0) { + advertise_atomic_push = git_config_bool(var, value); + return 0; + } + return git_default_config(var, value, cb); } @@ -175,6 +183,8 @@ static void show_ref(const char *path, const unsigned char *sha1) strbuf_addstr(&cap, "report-status delete-refs side-band-64k quiet"); + if (advertise_atomic_push) + strbuf_addstr(&cap, " atomic"); if (prefer_ofs_delta) strbuf_addstr(&cap, " ofs-delta"); if (push_cert_nonce) @@ -733,7 +743,9 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si) return 0; } -static const char *update_worktree(unsigned char *sha1) +static const char *push_to_deploy(unsigned char *sha1, + struct argv_array *env, + const char *work_tree) { const char *update_refresh[] = { "update-index", "-q", "--ignore-submodules", "--refresh", NULL @@ -748,69 +760,87 @@ static const char *update_worktree(unsigned char *sha1) const char *read_tree[] = { "read-tree", "-u", "-m", NULL, NULL }; - const char *work_tree = git_work_tree_cfg ? git_work_tree_cfg : ".."; - struct argv_array env = ARGV_ARRAY_INIT; struct child_process child = CHILD_PROCESS_INIT; - if (is_bare_repository()) - return "denyCurrentBranch = updateInstead needs a worktree"; - - argv_array_pushf(&env, "GIT_DIR=%s", absolute_path(get_git_dir())); - child.argv = update_refresh; - child.env = env.argv; + child.env = env->argv; child.dir = work_tree; child.no_stdin = 1; child.stdout_to_stderr = 1; child.git_cmd = 1; - if (run_command(&child)) { - argv_array_clear(&env); + if (run_command(&child)) return "Up-to-date check failed"; - } /* run_command() does not clean up completely; reinitialize */ child_process_init(&child); child.argv = diff_files; - child.env = env.argv; + child.env = env->argv; child.dir = work_tree; child.no_stdin = 1; child.stdout_to_stderr = 1; child.git_cmd = 1; - if (run_command(&child)) { - argv_array_clear(&env); + if (run_command(&child)) return "Working directory has unstaged changes"; - } child_process_init(&child); child.argv = diff_index; - child.env = env.argv; + child.env = env->argv; child.no_stdin = 1; child.no_stdout = 1; child.stdout_to_stderr = 0; child.git_cmd = 1; - if (run_command(&child)) { - argv_array_clear(&env); + if (run_command(&child)) return "Working directory has staged changes"; - } read_tree[3] = sha1_to_hex(sha1); child_process_init(&child); child.argv = read_tree; - child.env = env.argv; + child.env = env->argv; child.dir = work_tree; child.no_stdin = 1; child.no_stdout = 1; child.stdout_to_stderr = 0; child.git_cmd = 1; - if (run_command(&child)) { - argv_array_clear(&env); + if (run_command(&child)) return "Could not update working tree to new HEAD"; - } - argv_array_clear(&env); return NULL; } +static const char *push_to_checkout_hook = "push-to-checkout"; + +static const char *push_to_checkout(unsigned char *sha1, + struct argv_array *env, + const char *work_tree) +{ + argv_array_pushf(env, "GIT_WORK_TREE=%s", absolute_path(work_tree)); + if (run_hook_le(env->argv, push_to_checkout_hook, + sha1_to_hex(sha1), NULL)) + return "push-to-checkout hook declined"; + else + return NULL; +} + +static const char *update_worktree(unsigned char *sha1) +{ + const char *retval; + const char *work_tree = git_work_tree_cfg ? git_work_tree_cfg : ".."; + struct argv_array env = ARGV_ARRAY_INIT; + + if (is_bare_repository()) + return "denyCurrentBranch = updateInstead needs a worktree"; + + argv_array_pushf(&env, "GIT_DIR=%s", absolute_path(get_git_dir())); + + if (!find_hook(push_to_checkout_hook)) + retval = push_to_deploy(sha1, &env, work_tree); + else + retval = push_to_checkout(sha1, &env, work_tree); + + argv_array_clear(&env); + return retval; +} + static const char *update(struct command *cmd, struct shallow_info *si) { const char *name = cmd->ref_name; @@ -910,6 +940,7 @@ static const char *update(struct command *cmd, struct shallow_info *si) } if (is_null_sha1(new_sha1)) { + struct strbuf err = STRBUF_INIT; if (!parse_object(old_sha1)) { old_sha1 = NULL; if (ref_exists(name)) { @@ -919,35 +950,35 @@ static const char *update(struct command *cmd, struct shallow_info *si) cmd->did_not_exist = 1; } } - if (delete_ref(namespaced_name, old_sha1, 0)) { - rp_error("failed to delete %s", name); + if (ref_transaction_delete(transaction, + namespaced_name, + old_sha1, + 0, "push", &err)) { + rp_error("%s", err.buf); + strbuf_release(&err); return "failed to delete"; } + strbuf_release(&err); return NULL; /* good */ } else { struct strbuf err = STRBUF_INIT; - struct ref_transaction *transaction; - if (shallow_update && si->shallow_ref[cmd->index] && update_shallow_ref(cmd, si)) return "shallow error"; - transaction = ref_transaction_begin(&err); - if (!transaction || - ref_transaction_update(transaction, namespaced_name, - new_sha1, old_sha1, 0, 1, "push", - &err) || - ref_transaction_commit(transaction, &err)) { - ref_transaction_free(transaction); - + if (ref_transaction_update(transaction, + namespaced_name, + new_sha1, old_sha1, + 0, "push", + &err)) { rp_error("%s", err.buf); strbuf_release(&err); + return "failed to update ref"; } - - ref_transaction_free(transaction); strbuf_release(&err); + return NULL; /* good */ } } @@ -1131,11 +1162,105 @@ static void reject_updates_to_hidden(struct command *commands) } } +static int should_process_cmd(struct command *cmd) +{ + return !cmd->error_string && !cmd->skip_update; +} + +static void warn_if_skipped_connectivity_check(struct command *commands, + struct shallow_info *si) +{ + struct command *cmd; + int checked_connectivity = 1; + + for (cmd = commands; cmd; cmd = cmd->next) { + if (should_process_cmd(cmd) && si->shallow_ref[cmd->index]) { + error("BUG: connectivity check has not been run on ref %s", + cmd->ref_name); + checked_connectivity = 0; + } + } + if (!checked_connectivity) + die("BUG: connectivity check skipped???"); +} + +static void execute_commands_non_atomic(struct command *commands, + struct shallow_info *si) +{ + struct command *cmd; + struct strbuf err = STRBUF_INIT; + + for (cmd = commands; cmd; cmd = cmd->next) { + if (!should_process_cmd(cmd)) + continue; + + transaction = ref_transaction_begin(&err); + if (!transaction) { + rp_error("%s", err.buf); + strbuf_reset(&err); + cmd->error_string = "transaction failed to start"; + continue; + } + + cmd->error_string = update(cmd, si); + + if (!cmd->error_string + && ref_transaction_commit(transaction, &err)) { + rp_error("%s", err.buf); + strbuf_reset(&err); + cmd->error_string = "failed to update ref"; + } + ref_transaction_free(transaction); + } + strbuf_release(&err); +} + +static void execute_commands_atomic(struct command *commands, + struct shallow_info *si) +{ + struct command *cmd; + struct strbuf err = STRBUF_INIT; + const char *reported_error = "atomic push failure"; + + transaction = ref_transaction_begin(&err); + if (!transaction) { + rp_error("%s", err.buf); + strbuf_reset(&err); + reported_error = "transaction failed to start"; + goto failure; + } + + for (cmd = commands; cmd; cmd = cmd->next) { + if (!should_process_cmd(cmd)) + continue; + + cmd->error_string = update(cmd, si); + + if (cmd->error_string) + goto failure; + } + + if (ref_transaction_commit(transaction, &err)) { + rp_error("%s", err.buf); + reported_error = "atomic transaction failed"; + goto failure; + } + goto cleanup; + +failure: + for (cmd = commands; cmd; cmd = cmd->next) + if (!cmd->error_string) + cmd->error_string = reported_error; + +cleanup: + ref_transaction_free(transaction); + strbuf_release(&err); +} + static void execute_commands(struct command *commands, const char *unpacker_error, struct shallow_info *si) { - int checked_connectivity; struct command *cmd; unsigned char sha1[20]; struct iterate_data data; @@ -1166,27 +1291,13 @@ static void execute_commands(struct command *commands, free(head_name_to_free); head_name = head_name_to_free = resolve_refdup("HEAD", 0, sha1, NULL); - checked_connectivity = 1; - for (cmd = commands; cmd; cmd = cmd->next) { - if (cmd->error_string) - continue; - - if (cmd->skip_update) - continue; - - cmd->error_string = update(cmd, si); - if (shallow_update && !cmd->error_string && - si->shallow_ref[cmd->index]) { - error("BUG: connectivity check has not been run on ref %s", - cmd->ref_name); - checked_connectivity = 0; - } - } + if (use_atomic) + execute_commands_atomic(commands, si); + else + execute_commands_non_atomic(commands, si); - if (shallow_update && !checked_connectivity) - error("BUG: run 'git fsck' for safety.\n" - "If there are errors, try to remove " - "the reported refs above"); + if (shallow_update) + warn_if_skipped_connectivity_check(commands, si); } static struct command **queue_command(struct command **tail, @@ -1268,6 +1379,9 @@ static struct command *read_head_info(struct sha1_array *shallow) use_sideband = LARGE_PACKET_MAX; if (parse_feature_request(feature_list, "quiet")) quiet = 1; + if (advertise_atomic_push + && parse_feature_request(feature_list, "atomic")) + use_atomic = 1; } if (!strcmp(line, "push-cert")) { diff --git a/builtin/reflog.c b/builtin/reflog.c index 2d85d260ca..8182b648b9 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -8,32 +8,24 @@ #include "revision.h" #include "reachable.h" -/* - * reflog expire - */ - +/* NEEDSWORK: switch to using parse_options */ static const char reflog_expire_usage[] = -"git reflog expire [--verbose] [--dry-run] [--stale-fix] [--expire=<time>] [--expire-unreachable=<time>] [--all] <refs>..."; +"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <refs>..."; static const char reflog_delete_usage[] = -"git reflog delete [--verbose] [--dry-run] [--rewrite] [--updateref] <refs>..."; +"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <refs>..."; static unsigned long default_reflog_expire; static unsigned long default_reflog_expire_unreachable; struct cmd_reflog_expire_cb { struct rev_info revs; - int dry_run; int stalefix; - int rewrite; - int updateref; - int verbose; unsigned long expire_total; unsigned long expire_unreachable; int recno; }; -struct expire_reflog_cb { - FILE *newlog; +struct expire_reflog_policy_cb { enum { UE_NORMAL, UE_ALWAYS, @@ -41,14 +33,16 @@ struct expire_reflog_cb { } unreachable_expire_kind; struct commit_list *mark_list; unsigned long mark_limit; - struct cmd_reflog_expire_cb *cmd; - unsigned char last_kept_sha1[20]; + struct cmd_reflog_expire_cb cmd; + struct commit *tip_commit; + struct commit_list *tips; }; struct collected_reflog { unsigned char sha1[20]; char reflog[FLEX_ARRAY]; }; + struct collect_reflog_cb { struct collected_reflog **e; int alloc; @@ -220,7 +214,7 @@ static int keep_entry(struct commit **it, unsigned char *sha1) * the expire_limit and queue them back, so that the caller can call * us again to restart the traversal with longer expire_limit. */ -static void mark_reachable(struct expire_reflog_cb *cb) +static void mark_reachable(struct expire_reflog_policy_cb *cb) { struct commit *commit; struct commit_list *pending; @@ -259,7 +253,7 @@ static void mark_reachable(struct expire_reflog_cb *cb) cb->mark_list = leftover; } -static int unreachable(struct expire_reflog_cb *cb, struct commit *commit, unsigned char *sha1) +static int unreachable(struct expire_reflog_policy_cb *cb, struct commit *commit, unsigned char *sha1) { /* * We may or may not have the commit yet - if not, look it @@ -288,55 +282,39 @@ static int unreachable(struct expire_reflog_cb *cb, struct commit *commit, unsig return !(commit->object.flags & REACHABLE); } -static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, - const char *email, unsigned long timestamp, int tz, - const char *message, void *cb_data) +/* + * Return true iff the specified reflog entry should be expired. + */ +static int should_expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, + const char *email, unsigned long timestamp, int tz, + const char *message, void *cb_data) { - struct expire_reflog_cb *cb = cb_data; + struct expire_reflog_policy_cb *cb = cb_data; struct commit *old, *new; - if (timestamp < cb->cmd->expire_total) - goto prune; - - if (cb->cmd->rewrite) - osha1 = cb->last_kept_sha1; + if (timestamp < cb->cmd.expire_total) + return 1; old = new = NULL; - if (cb->cmd->stalefix && + if (cb->cmd.stalefix && (!keep_entry(&old, osha1) || !keep_entry(&new, nsha1))) - goto prune; + return 1; - if (timestamp < cb->cmd->expire_unreachable) { + if (timestamp < cb->cmd.expire_unreachable) { if (cb->unreachable_expire_kind == UE_ALWAYS) - goto prune; + return 1; if (unreachable(cb, old, osha1) || unreachable(cb, new, nsha1)) - goto prune; + return 1; } - if (cb->cmd->recno && --(cb->cmd->recno) == 0) - goto prune; - - if (cb->newlog) { - char sign = (tz < 0) ? '-' : '+'; - int zone = (tz < 0) ? (-tz) : tz; - fprintf(cb->newlog, "%s %s %s %lu %c%04d\t%s", - sha1_to_hex(osha1), sha1_to_hex(nsha1), - email, timestamp, sign, zone, - message); - hashcpy(cb->last_kept_sha1, nsha1); - } - if (cb->cmd->verbose) - printf("keep %s", message); - return 0; - prune: - if (!cb->newlog) - printf("would prune %s", message); - else if (cb->cmd->verbose) - printf("prune %s", message); + if (cb->cmd.recno && --(cb->cmd.recno) == 0) + return 1; + return 0; } -static int push_tip_to_list(const char *refname, const unsigned char *sha1, int flags, void *cb_data) +static int push_tip_to_list(const char *refname, const unsigned char *sha1, + int flags, void *cb_data) { struct commit_list **list = cb_data; struct commit *tip_commit; @@ -349,104 +327,56 @@ static int push_tip_to_list(const char *refname, const unsigned char *sha1, int return 0; } -static int expire_reflog(const char *ref, const unsigned char *sha1, int unused, void *cb_data) +static void reflog_expiry_prepare(const char *refname, + const unsigned char *sha1, + void *cb_data) { - struct cmd_reflog_expire_cb *cmd = cb_data; - struct expire_reflog_cb cb; - struct ref_lock *lock; - char *log_file, *newlog_path = NULL; - struct commit *tip_commit; - struct commit_list *tips; - int status = 0; - - memset(&cb, 0, sizeof(cb)); - - /* - * we take the lock for the ref itself to prevent it from - * getting updated. - */ - lock = lock_any_ref_for_update(ref, sha1, 0, NULL); - if (!lock) - return error("cannot lock ref '%s'", ref); - log_file = git_pathdup("logs/%s", ref); - if (!reflog_exists(ref)) - goto finish; - if (!cmd->dry_run) { - newlog_path = git_pathdup("logs/%s.lock", ref); - cb.newlog = fopen(newlog_path, "w"); - } + struct expire_reflog_policy_cb *cb = cb_data; - cb.cmd = cmd; - - if (!cmd->expire_unreachable || !strcmp(ref, "HEAD")) { - tip_commit = NULL; - cb.unreachable_expire_kind = UE_HEAD; + if (!cb->cmd.expire_unreachable || !strcmp(refname, "HEAD")) { + cb->tip_commit = NULL; + cb->unreachable_expire_kind = UE_HEAD; } else { - tip_commit = lookup_commit_reference_gently(sha1, 1); - if (!tip_commit) - cb.unreachable_expire_kind = UE_ALWAYS; + cb->tip_commit = lookup_commit_reference_gently(sha1, 1); + if (!cb->tip_commit) + cb->unreachable_expire_kind = UE_ALWAYS; else - cb.unreachable_expire_kind = UE_NORMAL; + cb->unreachable_expire_kind = UE_NORMAL; } - if (cmd->expire_unreachable <= cmd->expire_total) - cb.unreachable_expire_kind = UE_ALWAYS; + if (cb->cmd.expire_unreachable <= cb->cmd.expire_total) + cb->unreachable_expire_kind = UE_ALWAYS; - cb.mark_list = NULL; - tips = NULL; - if (cb.unreachable_expire_kind != UE_ALWAYS) { - if (cb.unreachable_expire_kind == UE_HEAD) { + cb->mark_list = NULL; + cb->tips = NULL; + if (cb->unreachable_expire_kind != UE_ALWAYS) { + if (cb->unreachable_expire_kind == UE_HEAD) { struct commit_list *elem; - for_each_ref(push_tip_to_list, &tips); - for (elem = tips; elem; elem = elem->next) - commit_list_insert(elem->item, &cb.mark_list); + for_each_ref(push_tip_to_list, &cb->tips); + for (elem = cb->tips; elem; elem = elem->next) + commit_list_insert(elem->item, &cb->mark_list); } else { - commit_list_insert(tip_commit, &cb.mark_list); + commit_list_insert(cb->tip_commit, &cb->mark_list); } - cb.mark_limit = cmd->expire_total; - mark_reachable(&cb); + cb->mark_limit = cb->cmd.expire_total; + mark_reachable(cb); } +} - for_each_reflog_ent(ref, expire_reflog_ent, &cb); +static void reflog_expiry_cleanup(void *cb_data) +{ + struct expire_reflog_policy_cb *cb = cb_data; - if (cb.unreachable_expire_kind != UE_ALWAYS) { - if (cb.unreachable_expire_kind == UE_HEAD) { + if (cb->unreachable_expire_kind != UE_ALWAYS) { + if (cb->unreachable_expire_kind == UE_HEAD) { struct commit_list *elem; - for (elem = tips; elem; elem = elem->next) + for (elem = cb->tips; elem; elem = elem->next) clear_commit_marks(elem->item, REACHABLE); - free_commit_list(tips); + free_commit_list(cb->tips); } else { - clear_commit_marks(tip_commit, REACHABLE); + clear_commit_marks(cb->tip_commit, REACHABLE); } } - finish: - if (cb.newlog) { - if (fclose(cb.newlog)) { - status |= error("%s: %s", strerror(errno), - newlog_path); - unlink(newlog_path); - } else if (cmd->updateref && - (write_in_full(lock->lock_fd, - sha1_to_hex(cb.last_kept_sha1), 40) != 40 || - write_str_in_full(lock->lock_fd, "\n") != 1 || - close_ref(lock) < 0)) { - status |= error("Couldn't write %s", - lock->lk->filename.buf); - unlink(newlog_path); - } else if (rename(newlog_path, log_file)) { - status |= error("cannot rename %s to %s", - newlog_path, log_file); - unlink(newlog_path); - } else if (cmd->updateref && commit_ref(lock)) { - status |= error("Couldn't set %s", lock->ref_name); - } else { - adjust_shared_perm(log_file); - } - } - free(newlog_path); - free(log_file); - unlock_ref(lock); - return status; } static int collect_reflog(const char *ref, const unsigned char *sha1, int unused, void *cb_data) @@ -590,10 +520,11 @@ static void set_reflog_expiry_param(struct cmd_reflog_expire_cb *cb, int slot, c static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) { - struct cmd_reflog_expire_cb cb; + struct expire_reflog_policy_cb cb; unsigned long now = time(NULL); int i, status, do_all; int explicit_expiry = 0; + unsigned int flags = 0; default_reflog_expire_unreachable = now - 30 * 24 * 3600; default_reflog_expire = now - 90 * 24 * 3600; @@ -603,33 +534,33 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) do_all = status = 0; memset(&cb, 0, sizeof(cb)); - cb.expire_total = default_reflog_expire; - cb.expire_unreachable = default_reflog_expire_unreachable; + cb.cmd.expire_total = default_reflog_expire; + cb.cmd.expire_unreachable = default_reflog_expire_unreachable; for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (!strcmp(arg, "--dry-run") || !strcmp(arg, "-n")) - cb.dry_run = 1; + flags |= EXPIRE_REFLOGS_DRY_RUN; else if (starts_with(arg, "--expire=")) { - if (parse_expiry_date(arg + 9, &cb.expire_total)) + if (parse_expiry_date(arg + 9, &cb.cmd.expire_total)) die(_("'%s' is not a valid timestamp"), arg); explicit_expiry |= EXPIRE_TOTAL; } else if (starts_with(arg, "--expire-unreachable=")) { - if (parse_expiry_date(arg + 21, &cb.expire_unreachable)) + if (parse_expiry_date(arg + 21, &cb.cmd.expire_unreachable)) die(_("'%s' is not a valid timestamp"), arg); explicit_expiry |= EXPIRE_UNREACH; } else if (!strcmp(arg, "--stale-fix")) - cb.stalefix = 1; + cb.cmd.stalefix = 1; else if (!strcmp(arg, "--rewrite")) - cb.rewrite = 1; + flags |= EXPIRE_REFLOGS_REWRITE; else if (!strcmp(arg, "--updateref")) - cb.updateref = 1; + flags |= EXPIRE_REFLOGS_UPDATE_REF; else if (!strcmp(arg, "--all")) do_all = 1; else if (!strcmp(arg, "--verbose")) - cb.verbose = 1; + flags |= EXPIRE_REFLOGS_VERBOSE; else if (!strcmp(arg, "--")) { i++; break; @@ -645,12 +576,12 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) * even in older repository. We cannot trust what's reachable * from reflog if the repository was pruned with older git. */ - if (cb.stalefix) { - init_revisions(&cb.revs, prefix); - if (cb.verbose) + if (cb.cmd.stalefix) { + init_revisions(&cb.cmd.revs, prefix); + if (flags & EXPIRE_REFLOGS_VERBOSE) printf("Marking reachable objects..."); - mark_reachable_objects(&cb.revs, 0, 0, NULL); - if (cb.verbose) + mark_reachable_objects(&cb.cmd.revs, 0, 0, NULL); + if (flags & EXPIRE_REFLOGS_VERBOSE) putchar('\n'); } @@ -662,8 +593,12 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) for_each_reflog(collect_reflog, &collected); for (i = 0; i < collected.nr; i++) { struct collected_reflog *e = collected.e[i]; - set_reflog_expiry_param(&cb, explicit_expiry, e->reflog); - status |= expire_reflog(e->reflog, e->sha1, 0, &cb); + set_reflog_expiry_param(&cb.cmd, explicit_expiry, e->reflog); + status |= reflog_expire(e->reflog, e->sha1, flags, + reflog_expiry_prepare, + should_expire_reflog_ent, + reflog_expiry_cleanup, + &cb); free(e); } free(collected.e); @@ -676,8 +611,12 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) status |= error("%s points nowhere!", argv[i]); continue; } - set_reflog_expiry_param(&cb, explicit_expiry, ref); - status |= expire_reflog(ref, sha1, 0, &cb); + set_reflog_expiry_param(&cb.cmd, explicit_expiry, ref); + status |= reflog_expire(ref, sha1, flags, + reflog_expiry_prepare, + should_expire_reflog_ent, + reflog_expiry_cleanup, + &cb); } return status; } @@ -686,29 +625,30 @@ static int count_reflog_ent(unsigned char *osha1, unsigned char *nsha1, const char *email, unsigned long timestamp, int tz, const char *message, void *cb_data) { - struct cmd_reflog_expire_cb *cb = cb_data; - if (!cb->expire_total || timestamp < cb->expire_total) - cb->recno++; + struct expire_reflog_policy_cb *cb = cb_data; + if (!cb->cmd.expire_total || timestamp < cb->cmd.expire_total) + cb->cmd.recno++; return 0; } static int cmd_reflog_delete(int argc, const char **argv, const char *prefix) { - struct cmd_reflog_expire_cb cb; + struct expire_reflog_policy_cb cb; int i, status = 0; + unsigned int flags = 0; memset(&cb, 0, sizeof(cb)); for (i = 1; i < argc; i++) { const char *arg = argv[i]; if (!strcmp(arg, "--dry-run") || !strcmp(arg, "-n")) - cb.dry_run = 1; + flags |= EXPIRE_REFLOGS_DRY_RUN; else if (!strcmp(arg, "--rewrite")) - cb.rewrite = 1; + flags |= EXPIRE_REFLOGS_REWRITE; else if (!strcmp(arg, "--updateref")) - cb.updateref = 1; + flags |= EXPIRE_REFLOGS_UPDATE_REF; else if (!strcmp(arg, "--verbose")) - cb.verbose = 1; + flags |= EXPIRE_REFLOGS_VERBOSE; else if (!strcmp(arg, "--")) { i++; break; @@ -740,15 +680,19 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix) recno = strtoul(spec + 2, &ep, 10); if (*ep == '}') { - cb.recno = -recno; + cb.cmd.recno = -recno; for_each_reflog_ent(ref, count_reflog_ent, &cb); } else { - cb.expire_total = approxidate(spec + 2); + cb.cmd.expire_total = approxidate(spec + 2); for_each_reflog_ent(ref, count_reflog_ent, &cb); - cb.expire_total = 0; + cb.cmd.expire_total = 0; } - status |= expire_reflog(ref, sha1, 0, &cb); + status |= reflog_expire(ref, sha1, flags, + reflog_expiry_prepare, + should_expire_reflog_ent, + reflog_expiry_cleanup, + &cb); free(ref); } return status; diff --git a/builtin/remote.c b/builtin/remote.c index b4ff468977..5d3ab906bc 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -10,10 +10,10 @@ static const char * const builtin_remote_usage[] = { N_("git remote [-v | --verbose]"), - N_("git remote add [-t <branch>] [-m <master>] [-f] [--tags|--no-tags] [--mirror=<fetch|push>] <name> <url>"), + N_("git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>"), N_("git remote rename <old> <new>"), N_("git remote remove <name>"), - N_("git remote set-head <name> (-a | --auto | -d | --delete |<branch>)"), + N_("git remote set-head <name> (-a | --auto | -d | --delete | <branch>)"), N_("git remote [-v | --verbose] show [-n] <name>"), N_("git remote prune [-n | --dry-run] <name>"), N_("git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]"), diff --git a/builtin/repack.c b/builtin/repack.c index 2fe1b30d71..f2edeb0f4c 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -14,7 +14,7 @@ static int write_bitmaps; static char *packdir, *packtmp; static const char *const git_repack_usage[] = { - N_("git repack [options]"), + N_("git repack [<options>]"), NULL }; diff --git a/builtin/replace.c b/builtin/replace.c index 85d39b58d8..54bf01acb4 100644 --- a/builtin/replace.c +++ b/builtin/replace.c @@ -172,7 +172,7 @@ static int replace_object_sha1(const char *object_ref, transaction = ref_transaction_begin(&err); if (!transaction || ref_transaction_update(transaction, ref, repl, prev, - 0, 1, NULL, &err) || + 0, NULL, &err) || ref_transaction_commit(transaction, &err)) die("%s", err.buf); diff --git a/builtin/rerere.c b/builtin/rerere.c index 98eb8c5404..7afadd2ead 100644 --- a/builtin/rerere.c +++ b/builtin/rerere.c @@ -9,7 +9,7 @@ #include "pathspec.h" static const char * const rerere_usage[] = { - N_("git rerere [clear | forget path... | status | remaining | diff | gc]"), + N_("git rerere [clear | forget <path>... | status | remaining | diff | gc]"), NULL, }; diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 95328b80d9..3626c61da6 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -358,7 +358,7 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix) { static int keep_dashdash = 0, stop_at_non_option = 0; static char const * const parseopt_usage[] = { - N_("git rev-parse --parseopt [options] -- [<args>...]"), + N_("git rev-parse --parseopt [<options>] -- [<args>...]"), NULL }; static struct option parseopt_opts[] = { @@ -496,9 +496,9 @@ static void die_no_single_rev(int quiet) } static const char builtin_rev_parse_usage[] = -N_("git rev-parse --parseopt [options] -- [<args>...]\n" +N_("git rev-parse --parseopt [<options>] -- [<args>...]\n" " or: git rev-parse --sq-quote [<arg>...]\n" - " or: git rev-parse [options] [<arg>...]\n" + " or: git rev-parse [<options>] [<arg>...]\n" "\n" "Run \"git rev-parse --parseopt -h\" for more information on the first usage."); diff --git a/builtin/revert.c b/builtin/revert.c index f9ed5bd5d0..56a2c36669 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -19,13 +19,13 @@ */ static const char * const revert_usage[] = { - N_("git revert [options] <commit-ish>..."), + N_("git revert [<options>] <commit-ish>..."), N_("git revert <subcommand>"), NULL }; static const char * const cherry_pick_usage[] = { - N_("git cherry-pick [options] <commit-ish>..."), + N_("git cherry-pick [<options>] <commit-ish>..."), N_("git cherry-pick <subcommand>"), NULL }; diff --git a/builtin/rm.c b/builtin/rm.c index d8a9c86dd1..3304bff42a 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -14,7 +14,7 @@ #include "pathspec.h" static const char * const builtin_rm_usage[] = { - N_("git rm [options] [--] <file>..."), + N_("git rm [<options>] [--] <file>..."), NULL }; diff --git a/builtin/send-pack.c b/builtin/send-pack.c index b564a77845..b961e5ae78 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -13,7 +13,7 @@ #include "sha1-array.h" static const char send_pack_usage[] = -"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [<host>:]<directory> [<ref>...]\n" +"git send-pack [--all | --mirror] [--dry-run] [--force] [--receive-pack=<git-receive-pack>] [--verbose] [--thin] [--atomic] [<host>:]<directory> [<ref>...]\n" " --all and explicit <ref> specification are mutually exclusive."; static struct send_pack_args args; @@ -170,6 +170,10 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) args.use_thin_pack = 1; continue; } + if (!strcmp(arg, "--atomic")) { + args.atomic = 1; + continue; + } if (!strcmp(arg, "--stateless-rpc")) { args.stateless_rpc = 1; continue; diff --git a/builtin/shortlog.c b/builtin/shortlog.c index 4b7e53623f..c0bab6aaa9 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -10,7 +10,7 @@ #include "parse-options.h" static char const * const shortlog_usage[] = { - N_("git shortlog [<options>] [<revision range>] [[--] [<path>...]]"), + N_("git shortlog [<options>] [<revision-range>] [[--] [<path>...]]"), NULL }; diff --git a/builtin/show-branch.c b/builtin/show-branch.c index 365228aa8d..f3fb5fb2bf 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -6,11 +6,11 @@ #include "parse-options.h" static const char* show_branch_usage[] = { - N_("git show-branch [-a|--all] [-r|--remotes] [--topo-order | --date-order]\n" + N_("git show-branch [-a | --all] [-r | --remotes] [--topo-order | --date-order]\n" " [--current] [--color[=<when>] | --no-color] [--sparse]\n" " [--more=<n> | --list | --independent | --merge-base]\n" " [--no-name | --sha1-name] [--topics] [(<rev> | <glob>)...]"), - N_("git show-branch (-g|--reflog)[=<n>[,<base>]] [--list] [<ref>]"), + N_("git show-branch (-g | --reflog)[=<n>[,<base>]] [--list] [<ref>]"), NULL }; diff --git a/builtin/show-ref.c b/builtin/show-ref.c index 5ba1f30838..afb10309d6 100644 --- a/builtin/show-ref.c +++ b/builtin/show-ref.c @@ -7,7 +7,7 @@ #include "parse-options.h" static const char * const show_ref_usage[] = { - N_("git show-ref [-q|--quiet] [--verify] [--head] [-d|--dereference] [-s|--hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [pattern*] "), + N_("git show-ref [-q | --quiet] [--verify] [--head] [-d | --dereference] [-s | --hash[=<n>]] [--abbrev[=<n>]] [--tags] [--heads] [--] [<pattern>...]"), N_("git show-ref --exclude-existing[=pattern] < ref-list"), NULL }; diff --git a/builtin/symbolic-ref.c b/builtin/symbolic-ref.c index 29fb3f1c20..ce0fde705c 100644 --- a/builtin/symbolic-ref.c +++ b/builtin/symbolic-ref.c @@ -4,8 +4,8 @@ #include "parse-options.h" static const char * const git_symbolic_ref_usage[] = { - N_("git symbolic-ref [options] name [ref]"), - N_("git symbolic-ref -d [-q] name"), + N_("git symbolic-ref [<options>] <name> [<ref>]"), + N_("git symbolic-ref -d [-q] <name>"), NULL }; diff --git a/builtin/tag.c b/builtin/tag.c index d315827cf5..6f07ac6b93 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -19,9 +19,9 @@ #include "column.h" static const char * const git_tag_usage[] = { - N_("git tag [-a|-s|-u <key-id>] [-f] [-m <msg>|-F <file>] <tagname> [<head>]"), + N_("git tag [-a | -s | -u <key-id>] [-f] [-m <msg> | -F <file>] <tagname> [<head>]"), N_("git tag -d <tagname>..."), - N_("git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>] " + N_("git tag -l [-n[<num>]] [--contains <commit>] [--points-at <object>]" "\n\t\t[<pattern>...]"), N_("git tag -v <tagname>..."), NULL @@ -733,7 +733,7 @@ int cmd_tag(int argc, const char **argv, const char *prefix) transaction = ref_transaction_begin(&err); if (!transaction || ref_transaction_update(transaction, ref.buf, object, prev, - 0, 1, NULL, &err) || + 0, NULL, &err) || ref_transaction_commit(transaction, &err)) die("%s", err.buf); ref_transaction_free(transaction); diff --git a/builtin/update-index.c b/builtin/update-index.c index b0e3dc9105..6271b54adc 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -400,7 +400,7 @@ static void read_index_info(int line_termination) } static const char * const update_index_usage[] = { - N_("git update-index [options] [--] [<file>...]"), + N_("git update-index [<options>] [--] [<file>...]"), NULL }; @@ -584,6 +584,7 @@ static int do_reupdate(int ac, const char **av, path = xstrdup(ce->name); update_one(path); free(path); + free(old); if (save_nr != active_nr) goto redo; } diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 1993529521..3d79a46b03 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -6,9 +6,9 @@ #include "argv-array.h" static const char * const git_update_ref_usage[] = { - N_("git update-ref [options] -d <refname> [<oldval>]"), - N_("git update-ref [options] <refname> <newval> [<oldval>]"), - N_("git update-ref [options] --stdin [-z]"), + N_("git update-ref [<options>] -d <refname> [<old-val>]"), + N_("git update-ref [<options>] <refname> <new-val> [<old-val>]"), + N_("git update-ref [<options>] --stdin [-z]"), NULL }; @@ -198,8 +198,9 @@ static const char *parse_cmd_update(struct ref_transaction *transaction, if (*next != line_termination) die("update %s: extra input: %s", refname, next); - if (ref_transaction_update(transaction, refname, new_sha1, old_sha1, - update_flags, have_old, msg, &err)) + if (ref_transaction_update(transaction, refname, + new_sha1, have_old ? old_sha1 : NULL, + update_flags, msg, &err)) die("%s", err.buf); update_flags = 0; @@ -264,8 +265,9 @@ static const char *parse_cmd_delete(struct ref_transaction *transaction, if (*next != line_termination) die("delete %s: extra input: %s", refname, next); - if (ref_transaction_delete(transaction, refname, old_sha1, - update_flags, have_old, msg, &err)) + if (ref_transaction_delete(transaction, refname, + have_old ? old_sha1 : NULL, + update_flags, msg, &err)) die("%s", err.buf); update_flags = 0; @@ -280,7 +282,6 @@ static const char *parse_cmd_verify(struct ref_transaction *transaction, { struct strbuf err = STRBUF_INIT; char *refname; - unsigned char new_sha1[20]; unsigned char old_sha1[20]; refname = parse_refname(input, &next); @@ -291,13 +292,11 @@ static const char *parse_cmd_verify(struct ref_transaction *transaction, PARSE_SHA1_OLD)) hashclr(old_sha1); - hashcpy(new_sha1, old_sha1); - if (*next != line_termination) die("verify %s: extra input: %s", refname, next); - if (ref_transaction_update(transaction, refname, new_sha1, old_sha1, - update_flags, 1, msg, &err)) + if (ref_transaction_verify(transaction, refname, old_sha1, + update_flags, &err)) die("%s", err.buf); update_flags = 0; @@ -353,7 +352,8 @@ int cmd_update_ref(int argc, const char **argv, const char *prefix) { const char *refname, *oldval; unsigned char sha1[20], oldsha1[20]; - int delete = 0, no_deref = 0, read_stdin = 0, end_null = 0, flags = 0; + int delete = 0, no_deref = 0, read_stdin = 0, end_null = 0; + unsigned int flags = 0; struct option options[] = { OPT_STRING( 'm', NULL, &msg, N_("reason"), N_("reason of the update")), OPT_BOOL('d', NULL, &delete, N_("delete the reference")), diff --git a/builtin/verify-commit.c b/builtin/verify-commit.c index b0f85042b2..ec0c4e3d83 100644 --- a/builtin/verify-commit.c +++ b/builtin/verify-commit.c @@ -14,7 +14,7 @@ #include "gpg-interface.h" static const char * const verify_commit_usage[] = { - N_("git verify-commit [-v|--verbose] <commit>..."), + N_("git verify-commit [-v | --verbose] <commit>..."), NULL }; diff --git a/builtin/verify-pack.c b/builtin/verify-pack.c index 7747537beb..c94e156932 100644 --- a/builtin/verify-pack.c +++ b/builtin/verify-pack.c @@ -51,7 +51,7 @@ static int verify_one_pack(const char *path, unsigned int flags) } static const char * const verify_pack_usage[] = { - N_("git verify-pack [-v|--verbose] [-s|--stat-only] <pack>..."), + N_("git verify-pack [-v | --verbose] [-s | --stat-only] <pack>..."), NULL }; diff --git a/builtin/verify-tag.c b/builtin/verify-tag.c index 9cdf332333..53c68fce3a 100644 --- a/builtin/verify-tag.c +++ b/builtin/verify-tag.c @@ -14,7 +14,7 @@ #include "gpg-interface.h" static const char * const verify_tag_usage[] = { - N_("git verify-tag [-v|--verbose] <tag>..."), + N_("git verify-tag [-v | --verbose] <tag>..."), NULL }; @@ -334,7 +334,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs) if (e->item->flags & UNINTERESTING) continue; if (dwim_ref(e->name, strlen(e->name), sha1, &ref) != 1) - continue; + goto skip_write_ref; if (read_ref_full(e->name, RESOLVE_REF_READING, sha1, &flag)) flag = 0; display_ref = (flag & REF_ISSYMREF) ? e->name : ref; @@ -342,7 +342,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs) if (e->item->type == OBJ_TAG && !is_tag_in_date_range(e->item, revs)) { e->item->flags |= UNINTERESTING; - continue; + goto skip_write_ref; } /* @@ -357,8 +357,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs) if (!(e->item->flags & SHOWN) && e->item->type == OBJ_COMMIT) { warning(_("ref '%s' is excluded by the rev-list options"), e->name); - free(ref); - continue; + goto skip_write_ref; } /* * If you run "git bundle create bndl v1.0..v2.0", the @@ -388,8 +387,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs) obj->flags |= SHOWN; add_pending_object(revs, obj, e->name); } - free(ref); - continue; + goto skip_write_ref; } ref_count++; @@ -397,6 +395,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs) write_or_die(bundle_fd, " ", 1); write_or_die(bundle_fd, display_ref, strlen(display_ref)); write_or_die(bundle_fd, "\n", 1); + skip_write_ref: free(ref); } @@ -568,7 +568,7 @@ extern void update_index_if_able(struct index_state *, struct lock_file *); extern int hold_locked_index(struct lock_file *, int); extern void set_alternate_index_output(const char *); -extern int delete_ref(const char *, const unsigned char *sha1, int delopt); +extern int delete_ref(const char *, const unsigned char *sha1, unsigned int flags); /* Environment bits from configuration mechanism */ extern int trust_executable_bit; diff --git a/check-builtins.sh b/check-builtins.sh index 07cff69d8e..a0aaf3a347 100755 --- a/check-builtins.sh +++ b/check-builtins.sh @@ -3,7 +3,7 @@ { cat <<\EOF sayIt: - $(foreach b,$(BUILT_INS),echo XXX $b YYY;) + $(foreach b,$(BUILT_INS),echo XXX $(b:$X=) YYY;) EOF cat Makefile } | @@ -254,7 +254,6 @@ extern int for_each_commit_graft(each_commit_graft_fn, void *); extern int is_repository_shallow(void); extern struct commit_list *get_shallow_commits(struct object_array *heads, int depth, int shallow_flag, int not_shallow_flag); -extern void check_shallow_file_for_update(void); extern void set_alternate_shallow_file(const char *path, int override); extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol, const struct sha1_array *extra); diff --git a/config.mak.uname b/config.mak.uname index b64b63c34c..f4e77cb9e5 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -107,6 +107,7 @@ ifeq ($(uname_S),Darwin) COMPAT_OBJS += compat/precompose_utf8.o BASIC_CFLAGS += -DPRECOMPOSE_UNICODE BASIC_CFLAGS += -DPROTECT_HFS_DEFAULT=1 + HAVE_BSD_SYSCTL = YesPlease endif ifeq ($(uname_S),SunOS) NEEDS_SOCKET = YesPlease @@ -199,6 +200,7 @@ ifeq ($(uname_S),FreeBSD) PYTHON_PATH = /usr/local/bin/python HAVE_PATHS_H = YesPlease GMTIME_UNRELIABLE_ERRORS = UnfortunatelyYes + HAVE_BSD_SYSCTL = YesPlease endif ifeq ($(uname_S),OpenBSD) NO_STRCASESTR = YesPlease @@ -208,6 +210,7 @@ ifeq ($(uname_S),OpenBSD) BASIC_CFLAGS += -I/usr/local/include BASIC_LDFLAGS += -L/usr/local/lib HAVE_PATHS_H = YesPlease + HAVE_BSD_SYSCTL = YesPlease endif ifeq ($(uname_S),MirBSD) NO_STRCASESTR = YesPlease @@ -215,6 +218,7 @@ ifeq ($(uname_S),MirBSD) USE_ST_TIMESPEC = YesPlease NEEDS_LIBICONV = YesPlease HAVE_PATHS_H = YesPlease + HAVE_BSD_SYSCTL = YesPlease endif ifeq ($(uname_S),NetBSD) ifeq ($(shell expr "$(uname_R)" : '[01]\.'),2) @@ -225,6 +229,7 @@ ifeq ($(uname_S),NetBSD) USE_ST_TIMESPEC = YesPlease NO_MKSTEMPS = YesPlease HAVE_PATHS_H = YesPlease + HAVE_BSD_SYSCTL = YesPlease endif ifeq ($(uname_S),AIX) DEFAULT_PAGER = more diff --git a/configure.ac b/configure.ac index 55e5a9b3e6..bbdde85c3d 100644 --- a/configure.ac +++ b/configure.ac @@ -1046,6 +1046,29 @@ GIT_CONF_SUBST([NO_INITGROUPS]) # # Define NO_ICONV if your libc does not properly support iconv. +AC_DEFUN([BSD_SYSCTL_SRC], [ +AC_LANG_PROGRAM([[ +#include <stddef.h> +#include <sys/types.h> +#include <sys/sysctl.h> +]],[[ +int val, mib[2]; +size_t len; +mib[0] = CTL_HW; +mib[1] = 1; +len = sizeof(val); +return sysctl(mib, 2, &val, &len, NULL, 0) ? 1 : 0; +]])]) + +# +# Define HAVE_BSD_SYSCTL=YesPlease if a BSD-compatible sysctl function is available. +AC_MSG_CHECKING([for BSD sysctl]) +AC_COMPILE_IFELSE([BSD_SYSCTL_SRC], + [AC_MSG_RESULT([yes]) + HAVE_BSD_SYSCTL=YesPlease], + [AC_MSG_RESULT([no]) + HAVE_BSD_SYSCTL=]) +GIT_CONF_SUBST([HAVE_BSD_SYSCTL]) ## Other checks. # Define USE_PIC if you need the main git objects to be built with -fPIC @@ -739,6 +739,7 @@ struct child_process *git_connect(int fd[2], const char *url, free(hostandport); free(path); + free(conn); return NULL; } else { ssh = getenv("GIT_SSH_COMMAND"); diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 661a8294da..fbe597232c 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1422,7 +1422,7 @@ __git_log_gitk_options=" # Options that go well for log and shortlog (not gitk) __git_log_shortlog_options=" --author= --committer= --grep= - --all-match + --all-match --invert-grep " __git_log_pretty_formats="oneline short medium full fuller email raw format:" @@ -2186,6 +2186,7 @@ _git_config () pull.octopus pull.twohead push.default + push.followTags rebase.autosquash rebase.stat receive.autogc diff --git a/credential-store.c b/credential-store.c index d435514cbe..925d3f4024 100644 --- a/credential-store.c +++ b/credential-store.c @@ -118,7 +118,7 @@ static int lookup_credential(const char *fn, struct credential *c) int main(int argc, char **argv) { const char * const usage[] = { - "git credential-store [options] <action>", + "git credential-store [<options>] <action>", NULL }; const char *op; @@ -43,9 +43,6 @@ static const char *base_path; static const char *interpolated_path; static int base_path_relaxed; -/* Flag indicating client sent extra args. */ -static int saw_extended_args; - /* If defined, ~user notation is allowed and the string is inserted * after ~user/. E.g. a request to git://host/~alice/frotz would * go to /home/alice/pub_git/frotz with --user-path=pub_git. @@ -56,25 +53,27 @@ static const char *user_path; static unsigned int timeout; static unsigned int init_timeout; -static char *hostname; -static char *canon_hostname; -static char *ip_address; -static char *tcp_port; - -static int hostname_lookup_done; +struct hostinfo { + struct strbuf hostname; + struct strbuf canon_hostname; + struct strbuf ip_address; + struct strbuf tcp_port; + unsigned int hostname_lookup_done:1; + unsigned int saw_extended_args:1; +}; -static void lookup_hostname(void); +static void lookup_hostname(struct hostinfo *hi); -static const char *get_canon_hostname(void) +static const char *get_canon_hostname(struct hostinfo *hi) { - lookup_hostname(); - return canon_hostname; + lookup_hostname(hi); + return hi->canon_hostname.buf; } -static const char *get_ip_address(void) +static const char *get_ip_address(struct hostinfo *hi) { - lookup_hostname(); - return ip_address; + lookup_hostname(hi); + return hi->ip_address.buf; } static void logreport(int priority, const char *err, va_list params) @@ -122,38 +121,34 @@ static void NORETURN daemon_die(const char *err, va_list params) exit(1); } -static void strbuf_addstr_or_null(struct strbuf *sb, const char *s) -{ - if (s) - strbuf_addstr(sb, s); -} - struct expand_path_context { const char *directory; + struct hostinfo *hostinfo; }; static size_t expand_path(struct strbuf *sb, const char *placeholder, void *ctx) { struct expand_path_context *context = ctx; + struct hostinfo *hi = context->hostinfo; switch (placeholder[0]) { case 'H': - strbuf_addstr_or_null(sb, hostname); + strbuf_addbuf(sb, &hi->hostname); return 1; case 'C': if (placeholder[1] == 'H') { - strbuf_addstr_or_null(sb, get_canon_hostname()); + strbuf_addstr(sb, get_canon_hostname(hi)); return 2; } break; case 'I': if (placeholder[1] == 'P') { - strbuf_addstr_or_null(sb, get_ip_address()); + strbuf_addstr(sb, get_ip_address(hi)); return 2; } break; case 'P': - strbuf_addstr_or_null(sb, tcp_port); + strbuf_addbuf(sb, &hi->tcp_port); return 1; case 'D': strbuf_addstr(sb, context->directory); @@ -162,7 +157,7 @@ static size_t expand_path(struct strbuf *sb, const char *placeholder, void *ctx) return 0; } -static const char *path_ok(const char *directory) +static const char *path_ok(const char *directory, struct hostinfo *hi) { static char rpath[PATH_MAX]; static char interp_path[PATH_MAX]; @@ -198,11 +193,12 @@ static const char *path_ok(const char *directory) dir = rpath; } } - else if (interpolated_path && saw_extended_args) { + else if (interpolated_path && hi->saw_extended_args) { struct strbuf expanded_path = STRBUF_INIT; struct expand_path_context context; context.directory = directory; + context.hostinfo = hi; if (*dir != '/') { /* Allow only absolute */ @@ -292,7 +288,8 @@ static int daemon_error(const char *dir, const char *msg) static const char *access_hook; -static int run_access_hook(struct daemon_service *service, const char *dir, const char *path) +static int run_access_hook(struct daemon_service *service, const char *dir, + const char *path, struct hostinfo *hi) { struct child_process child = CHILD_PROCESS_INIT; struct strbuf buf = STRBUF_INIT; @@ -301,16 +298,14 @@ static int run_access_hook(struct daemon_service *service, const char *dir, cons char *eol; int seen_errors = 0; -#define STRARG(x) ((x) ? (x) : "") *arg++ = access_hook; *arg++ = service->name; *arg++ = path; - *arg++ = STRARG(hostname); - *arg++ = STRARG(get_canon_hostname()); - *arg++ = STRARG(get_ip_address()); - *arg++ = STRARG(tcp_port); + *arg++ = hi->hostname.buf; + *arg++ = get_canon_hostname(hi); + *arg++ = get_ip_address(hi); + *arg++ = hi->tcp_port.buf; *arg = NULL; -#undef STRARG child.use_shell = 1; child.argv = argv; @@ -354,7 +349,8 @@ error_return: return -1; } -static int run_service(const char *dir, struct daemon_service *service) +static int run_service(const char *dir, struct daemon_service *service, + struct hostinfo *hi) { const char *path; int enabled = service->enabled; @@ -368,7 +364,7 @@ static int run_service(const char *dir, struct daemon_service *service) return daemon_error(dir, "service not enabled"); } - if (!(path = path_ok(dir))) + if (!(path = path_ok(dir, hi))) return daemon_error(dir, "no such repository"); /* @@ -404,7 +400,7 @@ static int run_service(const char *dir, struct daemon_service *service) * Optionally, a hook can choose to deny access to the * repository depending on the phase of the moon. */ - if (access_hook && run_access_hook(service, dir, path)) + if (access_hook && run_access_hook(service, dir, path, hi)) return -1; /* @@ -542,7 +538,7 @@ static void parse_host_and_port(char *hostport, char **host, * trailing and leading dots, which means that the client cannot escape * our base path via ".." traversal. */ -static void sanitize_client_strbuf(struct strbuf *out, const char *in) +static void sanitize_client(struct strbuf *out, const char *in) { for (; *in; in++) { if (*in == '/') @@ -556,36 +552,27 @@ static void sanitize_client_strbuf(struct strbuf *out, const char *in) strbuf_setlen(out, out->len - 1); } -static char *sanitize_client(const char *in) -{ - struct strbuf out = STRBUF_INIT; - sanitize_client_strbuf(&out, in); - return strbuf_detach(&out, NULL); -} - /* * Like sanitize_client, but we also perform any canonicalization * to make life easier on the admin. */ -static char *canonicalize_client(const char *in) +static void canonicalize_client(struct strbuf *out, const char *in) { - struct strbuf out = STRBUF_INIT; - sanitize_client_strbuf(&out, in); - strbuf_tolower(&out); - return strbuf_detach(&out, NULL); + sanitize_client(out, in); + strbuf_tolower(out); } /* * Read the host as supplied by the client connection. */ -static void parse_host_arg(char *extra_args, int buflen) +static void parse_host_arg(struct hostinfo *hi, char *extra_args, int buflen) { char *val; int vallen; char *end = extra_args + buflen; if (extra_args < end && *extra_args) { - saw_extended_args = 1; + hi->saw_extended_args = 1; if (strncasecmp("host=", extra_args, 5) == 0) { val = extra_args + 5; vallen = strlen(val) + 1; @@ -594,13 +581,10 @@ static void parse_host_arg(char *extra_args, int buflen) char *host; char *port; parse_host_and_port(val, &host, &port); - if (port) { - free(tcp_port); - tcp_port = sanitize_client(port); - } - free(hostname); - hostname = canonicalize_client(host); - hostname_lookup_done = 0; + if (port) + sanitize_client(&hi->tcp_port, port); + canonicalize_client(&hi->hostname, host); + hi->hostname_lookup_done = 0; } /* On to the next one */ @@ -614,9 +598,9 @@ static void parse_host_arg(char *extra_args, int buflen) /* * Locate canonical hostname and its IP address. */ -static void lookup_hostname(void) +static void lookup_hostname(struct hostinfo *hi) { - if (!hostname_lookup_done && hostname) { + if (!hi->hostname_lookup_done && hi->hostname.len) { #ifndef NO_IPV6 struct addrinfo hints; struct addrinfo *ai; @@ -626,19 +610,20 @@ static void lookup_hostname(void) memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_CANONNAME; - gai = getaddrinfo(hostname, NULL, &hints, &ai); + gai = getaddrinfo(hi->hostname.buf, NULL, &hints, &ai); if (!gai) { struct sockaddr_in *sin_addr = (void *)ai->ai_addr; inet_ntop(AF_INET, &sin_addr->sin_addr, addrbuf, sizeof(addrbuf)); - free(ip_address); - ip_address = xstrdup(addrbuf); + strbuf_addstr(&hi->ip_address, addrbuf); - free(canon_hostname); - canon_hostname = ai->ai_canonname ? - sanitize_client(ai->ai_canonname) : - xstrdup(ip_address); + if (ai->ai_canonname) + sanitize_client(&hi->canon_hostname, + ai->ai_canonname); + else + strbuf_addbuf(&hi->canon_hostname, + &hi->ip_address); freeaddrinfo(ai); } @@ -648,7 +633,7 @@ static void lookup_hostname(void) char **ap; static char addrbuf[HOST_NAME_MAX + 1]; - hent = gethostbyname(hostname); + hent = gethostbyname(hostname.buf); if (hent) { ap = hent->h_addr_list; memset(&sa, 0, sizeof sa); @@ -659,22 +644,39 @@ static void lookup_hostname(void) inet_ntop(hent->h_addrtype, &sa.sin_addr, addrbuf, sizeof(addrbuf)); - free(canon_hostname); - canon_hostname = sanitize_client(hent->h_name); - free(ip_address); - ip_address = xstrdup(addrbuf); + sanitize_client(&hi->canon_hostname, hent->h_name); + strbuf_addstr(&hi->ip_address, addrbuf); } #endif - hostname_lookup_done = 1; + hi->hostname_lookup_done = 1; } } +static void hostinfo_init(struct hostinfo *hi) +{ + memset(hi, 0, sizeof(*hi)); + strbuf_init(&hi->hostname, 0); + strbuf_init(&hi->canon_hostname, 0); + strbuf_init(&hi->ip_address, 0); + strbuf_init(&hi->tcp_port, 0); +} + +static void hostinfo_clear(struct hostinfo *hi) +{ + strbuf_release(&hi->hostname); + strbuf_release(&hi->canon_hostname); + strbuf_release(&hi->ip_address); + strbuf_release(&hi->tcp_port); +} static int execute(void) { char *line = packet_buffer; int pktlen, len, i; char *addr = getenv("REMOTE_ADDR"), *port = getenv("REMOTE_PORT"); + struct hostinfo hi; + + hostinfo_init(&hi); if (addr) loginfo("Connection from %s:%s", addr, port); @@ -693,14 +695,8 @@ static int execute(void) pktlen--; } - free(hostname); - free(canon_hostname); - free(ip_address); - free(tcp_port); - hostname = canon_hostname = ip_address = tcp_port = NULL; - if (len != pktlen) - parse_host_arg(line + len + 1, pktlen - len - 1); + parse_host_arg(&hi, line + len + 1, pktlen - len - 1); for (i = 0; i < ARRAY_SIZE(daemon_service); i++) { struct daemon_service *s = &(daemon_service[i]); @@ -713,10 +709,13 @@ static int execute(void) * Note: The directory here is probably context sensitive, * and might depend on the actual service being performed. */ - return run_service(arg, s); + int rc = run_service(arg, s, &hi); + hostinfo_clear(&hi); + return rc; } } + hostinfo_clear(&hi); logerror("Protocol error: '%s'", line); return -1; } diff --git a/diff-lib.c b/diff-lib.c index 875aff8643..a85c4971ac 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -101,6 +101,7 @@ int run_diff_files(struct rev_info *revs, unsigned int option) struct cache_entry *ce = active_cache[i]; int changed; unsigned dirty_submodule = 0; + const unsigned char *old_sha1, *new_sha1; if (diff_can_quit_early(&revs->diffopt)) break; @@ -224,9 +225,12 @@ int run_diff_files(struct rev_info *revs, unsigned int option) continue; } oldmode = ce->ce_mode; + old_sha1 = ce->sha1; + new_sha1 = changed ? null_sha1 : ce->sha1; diff_change(&revs->diffopt, oldmode, newmode, - ce->sha1, (changed ? null_sha1 : ce->sha1), - !is_null_sha1(ce->sha1), (changed ? 0 : !is_null_sha1(ce->sha1)), + old_sha1, new_sha1, + !is_null_sha1(old_sha1), + !is_null_sha1(new_sha1), ce->name, 0, dirty_submodule); } diff --git a/fast-import.c b/fast-import.c index 77fb2ff368..e78ca107b3 100644 --- a/fast-import.c +++ b/fast-import.c @@ -1717,7 +1717,7 @@ static int update_branch(struct branch *b) transaction = ref_transaction_begin(&err); if (!transaction || ref_transaction_update(transaction, b->name, b->sha1, old_sha1, - 0, 1, msg, &err) || + 0, msg, &err) || ref_transaction_commit(transaction, &err)) { ref_transaction_free(transaction); error("%s", err.buf); @@ -1757,8 +1757,8 @@ static void dump_tags(void) strbuf_reset(&ref_name); strbuf_addf(&ref_name, "refs/tags/%s", t->name); - if (ref_transaction_update(transaction, ref_name.buf, t->sha1, - NULL, 0, 0, msg, &err)) { + if (ref_transaction_update(transaction, ref_name.buf, + t->sha1, NULL, 0, msg, &err)) { failure |= error("%s", err.buf); goto cleanup; } @@ -18,6 +18,31 @@ # endif #endif +/* + * Guess the user's preferred languages from the value in LANGUAGE environment + * variable and LC_MESSAGES locale category if NO_GETTEXT is not defined. + * + * The result can be a colon-separated list like "ko:ja:en". + */ +const char *get_preferred_languages(void) +{ + const char *retval; + + retval = getenv("LANGUAGE"); + if (retval && *retval) + return retval; + +#ifndef NO_GETTEXT + retval = setlocale(LC_MESSAGES, NULL); + if (retval && *retval && + strcmp(retval, "C") && + strcmp(retval, "POSIX")) + return retval; +#endif + + return NULL; +} + #ifdef GETTEXT_POISON int use_gettext_poison(void) { @@ -63,6 +63,32 @@ const char *Q_(const char *msgid, const char *plu, unsigned long n) } /* Mark msgid for translation but do not translate it. */ +#if !USE_PARENS_AROUND_GETTEXT_N #define N_(msgid) msgid +#else +/* + * Strictly speaking, this will lead to invalid C when + * used this way: + * static const char s[] = N_("FOO"); + * which will expand to + * static const char s[] = ("FOO"); + * and in valid C, the initializer on the right hand side must + * be without the parentheses. But many compilers do accept it + * as a language extension and it will allow us to catch mistakes + * like: + * static const char *msgs[] = { + * N_("one") + * N_("two"), + * N_("three"), + * NULL + * }; + * (notice the missing comma on one of the lines) by forcing + * a compilation error, because parenthesised ("one") ("two") + * will not get silently turned into ("onetwo"). + */ +#define N_(msgid) (msgid) +#endif + +const char *get_preferred_languages(void); #endif diff --git a/git-bisect.sh b/git-bisect.sh index 2fc07acb0f..ae3fec22c4 100755 --- a/git-bisect.sh +++ b/git-bisect.sh @@ -127,7 +127,7 @@ bisect_start() { if test "z$mode" != "z--no-checkout" then git checkout "$start_head" -- || - die "$(eval_gettext "Checking out '\$start_head' failed. Try 'git bisect reset <validbranch>'.")" + die "$(eval_gettext "Checking out '\$start_head' failed. Try 'git bisect reset <valid-branch>'.")" fi else # Get rev from where we start. diff --git a/git-compat-util.h b/git-compat-util.h index 35b3fe0b3b..bc8fc8cf85 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -127,6 +127,9 @@ #else #include <poll.h> #endif +#ifdef HAVE_BSD_SYSCTL +#include <sys/sysctl.h> +#endif #if defined(__MINGW32__) /* pull in Windows compatibility stuff */ @@ -872,4 +875,12 @@ struct tm *git_gmtime_r(const time_t *, struct tm *); #define gmtime_r git_gmtime_r #endif +#if !defined(USE_PARENS_AROUND_GETTEXT_N) && defined(__GNUC__) +#define USE_PARENS_AROUND_GETTEXT_N 1 +#endif + +#ifndef SHELL_PATH +# define SHELL_PATH "/bin/sh" +#endif + #endif diff --git a/git-instaweb.sh b/git-instaweb.sh index 513efa662e..47e38f34c3 100755 --- a/git-instaweb.sh +++ b/git-instaweb.sh @@ -20,6 +20,7 @@ start start the web server restart restart the web server " +SUBDIRECTORY_OK=Yes . git-sh-setup fqgitdir="$GIT_DIR" @@ -204,7 +205,7 @@ webrick_conf () { # actual gitweb.cgi using a shell script to force it wrapper="$fqgitdir/gitweb/$httpd/wrapper.sh" cat > "$wrapper" <<EOF -#!/bin/sh +#!@SHELL_PATH@ # we use this shell script wrapper around the real gitweb.cgi since # there appears to be no other way to pass arbitrary environment variables # into the CGI process @@ -1442,7 +1442,7 @@ class P4Submit(Command, P4UserMap): print " " + self.clientPath print print "To submit, use \"p4 submit\" to write a new description," - print "or \"p4 submit -i %s\" to use the one prepared by" \ + print "or \"p4 submit -i <%s\" to use the one prepared by" \ " \"git p4\"." % fileName print "You can delete the file \"%s\" when finished." % fileName @@ -1915,7 +1915,10 @@ class P4Sync(Command, P4UserMap): optparse.make_option("--keep-path", dest="keepRepoPath", action='store_true', help="Keep entire BRANCH/DIR/SUBDIR prefix during import"), optparse.make_option("--use-client-spec", dest="useClientSpec", action='store_true', - help="Only sync files that are included in the Perforce Client Spec") + help="Only sync files that are included in the Perforce Client Spec"), + optparse.make_option("-/", dest="cloneExclude", + action="append", type="string", + help="exclude depot path"), ] self.description = """Imports from Perforce into a git repository.\n example: @@ -1950,6 +1953,12 @@ class P4Sync(Command, P4UserMap): if gitConfig("git-p4.syncFromOrigin") == "false": self.syncWithOrigin = False + # This is required for the "append" cloneExclude action + def ensure_value(self, attr, value): + if not hasattr(self, attr) or getattr(self, attr) is None: + setattr(self, attr, value) + return getattr(self, attr) + # Force a checkpoint in fast-import and wait for it to finish def checkpoint(self): self.gitStream.write("checkpoint\n\n") @@ -3101,9 +3110,6 @@ class P4Clone(P4Sync): optparse.make_option("--destination", dest="cloneDestination", action='store', default=None, help="where to leave result of the clone"), - optparse.make_option("-/", dest="cloneExclude", - action="append", type="string", - help="exclude depot path"), optparse.make_option("--bare", dest="cloneBare", action="store_true", default=False), ] @@ -3111,12 +3117,6 @@ class P4Clone(P4Sync): self.needsGit = False self.cloneBare = False - # This is required for the "append" cloneExclude action - def ensure_value(self, attr, value): - if not hasattr(self, attr) or getattr(self, attr) is None: - setattr(self, attr, value) - return getattr(self, attr) - def defaultDestination(self, args): ## TODO: use common prefix of args? depotPath = args[0] diff --git a/git-send-email.perl b/git-send-email.perl index a18a7959ed..e1e9b1460c 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -762,6 +762,7 @@ if (!defined $auto_8bit_encoding && scalar %broken_encoding) { print " $f\n"; } $auto_8bit_encoding = ask("Which 8bit encoding should I declare [UTF-8]? ", + valid_re => qr/.{4}/, confirm_only => 1, default => "UTF-8"); } diff --git a/git-svn.perl b/git-svn.perl index 32d109ebdf..36f7240c99 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -11,14 +11,10 @@ $AUTHOR = 'Eric Wong <normalperson@yhbt.net>'; $VERSION = '@@GIT_VERSION@@'; use Carp qw/croak/; -use Digest::MD5; -use IO::File qw//; use File::Basename qw/dirname basename/; use File::Path qw/mkpath/; use File::Spec; -use File::Find; use Getopt::Long qw/:config gnu_getopt no_ignore_case auto_abbrev/; -use IPC::Open3; use Memoize; use Git::SVN; @@ -298,7 +294,6 @@ my %cmd = ( {} ], ); -use Term::ReadLine; package FakeTerm; sub new { my ($class, $reason) = @_; @@ -313,6 +308,7 @@ package main; my $term; sub term_init { $term = eval { + require Term::ReadLine; $ENV{"GIT_SVN_NOTTY"} ? new Term::ReadLine 'git-svn', \*STDIN, \*STDOUT : new Term::ReadLine 'git-svn'; @@ -1173,6 +1169,7 @@ sub cmd_branch { } ::_req_svn(); + require SVN::Client; my $ctx = SVN::Client->new( config => SVN::Core::config_get_config( @@ -1693,11 +1690,13 @@ sub cmd_reset { } sub cmd_gc { + require File::Find; if (!can_compress()) { warn "Compress::Zlib could not be found; unhandled.log " . "files will not be compressed.\n"; } - find({ wanted => \&gc_directory, no_chdir => 1}, "$ENV{GIT_DIR}/svn"); + File::Find::find({ wanted => \&gc_directory, no_chdir => 1}, + "$ENV{GIT_DIR}/svn"); } ########################### utility functions ######################### @@ -2122,6 +2121,7 @@ sub find_file_type_and_diff_status { sub md5sum { my $arg = shift; my $ref = ref $arg; + require Digest::MD5; my $md5 = Digest::MD5->new(); if ($ref eq 'GLOB' || $ref eq 'IO::File' || $ref eq 'File::Temp') { $md5->addfile($arg) or croak $!; @@ -2148,6 +2148,7 @@ sub gc_directory { $gz->gzwrite($str) or die "Unable to write: ".$gz->gzerror()."!\n"; } + no warnings 'once'; # $File::Find::name would warn unlink $_ or die "unlink $File::Find::name: $!\n"; } elsif (-f $_ && basename($_) eq "index") { unlink $_ or die "unlink $_: $!\n"; @@ -6,7 +6,7 @@ const char git_usage_string[] = "git [--version] [--help] [-C <path>] [-c name=value]\n" " [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]\n" - " [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]\n" + " [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]\n" " [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]\n" " <command> [<args>]"; diff --git a/gitk-git/gitk b/gitk-git/gitk index 78358a712a..9a2daf3c55 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -2516,6 +2516,13 @@ proc makewindow {} { } else { bindall <ButtonRelease-4> "allcanvs yview scroll -5 units" bindall <ButtonRelease-5> "allcanvs yview scroll 5 units" + bind $ctext <Button> { + if {"%b" eq 6} { + $ctext xview scroll -5 units + } elseif {"%b" eq 7} { + $ctext xview scroll 5 units + } + } if {[tk windowingsystem] eq "aqua"} { bindall <MouseWheel> { set delta [expr {- (%D)}] @@ -2776,33 +2783,87 @@ proc doprogupdate {} { } } +proc config_check_tmp_exists {tries_left} { + global config_file_tmp + + if {[file exists $config_file_tmp]} { + incr tries_left -1 + if {$tries_left > 0} { + after 100 [list config_check_tmp_exists $tries_left] + } else { + error_popup "There appears to be a stale $config_file_tmp\ + file, which will prevent gitk from saving its configuration on exit.\ + Please remove it if it is not being used by any existing gitk process." + } + } +} + +proc config_init_trace {name} { + global config_variable_changed config_variable_original + + upvar #0 $name var + set config_variable_changed($name) 0 + set config_variable_original($name) $var +} + +proc config_variable_change_cb {name name2 op} { + global config_variable_changed config_variable_original + + upvar #0 $name var + if {$op eq "write" && + (![info exists config_variable_original($name)] || + $config_variable_original($name) ne $var)} { + set config_variable_changed($name) 1 + } +} + proc savestuff {w} { - global viewname viewfiles viewargs viewargscmd viewperm nextviewnum - global use_ttk global stuffsaved global config_file config_file_tmp - global config_variables + global config_variables config_variable_changed + global viewchanged + + upvar #0 viewname current_viewname + upvar #0 viewfiles current_viewfiles + upvar #0 viewargs current_viewargs + upvar #0 viewargscmd current_viewargscmd + upvar #0 viewperm current_viewperm + upvar #0 nextviewnum current_nextviewnum + upvar #0 use_ttk current_use_ttk if {$stuffsaved} return if {![winfo viewable .]} return - catch { - if {[file exists $config_file_tmp]} { - file delete -force $config_file_tmp + set remove_tmp 0 + if {[catch { + set try_count 0 + while {[catch {set f [open $config_file_tmp {WRONLY CREAT EXCL}]}]} { + if {[incr try_count] > 50} { + error "Unable to write config file: $config_file_tmp exists" + } + after 100 } - set f [open $config_file_tmp w] + set remove_tmp 1 if {$::tcl_platform(platform) eq {windows}} { file attributes $config_file_tmp -hidden true } + if {[file exists $config_file]} { + source $config_file + } foreach var_name $config_variables { upvar #0 $var_name var - puts $f [list set $var_name $var] + upvar 0 $var_name old_var + if {!$config_variable_changed($var_name) && [info exists old_var]} { + puts $f [list set $var_name $old_var] + } else { + puts $f [list set $var_name $var] + } } puts $f "set geometry(main) [wm geometry .]" puts $f "set geometry(state) [wm state .]" puts $f "set geometry(topwidth) [winfo width .tf]" puts $f "set geometry(topheight) [winfo height .tf]" - if {$use_ttk} { + if {$current_use_ttk} { puts $f "set geometry(pwsash0) \"[.tf.histframe.pwclist sashpos 0] 1\"" puts $f "set geometry(pwsash1) \"[.tf.histframe.pwclist sashpos 1] 1\"" } else { @@ -2812,15 +2873,43 @@ proc savestuff {w} { puts $f "set geometry(botwidth) [winfo width .bleft]" puts $f "set geometry(botheight) [winfo height .bleft]" + array set view_save {} + array set views {} + if {![info exists permviews]} { set permviews {} } + foreach view $permviews { + set view_save([lindex $view 0]) 1 + set views([lindex $view 0]) $view + } puts -nonewline $f "set permviews {" - for {set v 0} {$v < $nextviewnum} {incr v} { - if {$viewperm($v)} { - puts $f "{[list $viewname($v) $viewfiles($v) $viewargs($v) $viewargscmd($v)]}" + for {set v 1} {$v < $current_nextviewnum} {incr v} { + if {$viewchanged($v)} { + if {$current_viewperm($v)} { + set views($current_viewname($v)) [list $current_viewname($v) $current_viewfiles($v) $current_viewargs($v) $current_viewargscmd($v)] + } else { + set view_save($current_viewname($v)) 0 + } + } + } + # write old and updated view to their places and append remaining to the end + foreach view $permviews { + set view_name [lindex $view 0] + if {$view_save($view_name)} { + puts $f "{$views($view_name)}" } + unset views($view_name) + } + foreach view_name [array names views] { + puts $f "{$views($view_name)}" } puts $f "}" close $f file rename -force $config_file_tmp $config_file + set remove_tmp 0 + } err]} { + puts "Error saving config: $err" + } + if {$remove_tmp} { + file delete -force $config_file_tmp } set stuffsaved 1 } @@ -3977,6 +4066,7 @@ set known_view_options { {committer t15 . "--committer=*" {mc "Committer:"}} {loginfo t15 .. "--grep=*" {mc "Commit Message:"}} {allmatch b .. "--all-match" {mc "Matches all Commit Info criteria"}} + {igrep b .. "--invert-grep" {mc "Matches none Commit Info criteria"}} {changes_l l + {} {mc "Changes to Files:"}} {pickaxe_s r0 . {} {mc "Fixed String"}} {pickaxe_t r1 . "--pickaxe-regex" {mc "Regular Expression"}} @@ -4238,7 +4328,7 @@ proc allviewmenus {n op args} { proc newviewok {top n {apply 0}} { global nextviewnum newviewperm newviewname newishighlight - global viewname viewfiles viewperm selectedview curview + global viewname viewfiles viewperm viewchanged selectedview curview global viewargs viewargscmd newviewopts viewhlmenu if {[catch { @@ -4259,6 +4349,7 @@ proc newviewok {top n {apply 0}} { incr nextviewnum set viewname($n) $newviewname($n) set viewperm($n) $newviewopts($n,perm) + set viewchanged($n) 1 set viewfiles($n) $files set viewargs($n) $newargs set viewargscmd($n) $newviewopts($n,cmd) @@ -4271,6 +4362,7 @@ proc newviewok {top n {apply 0}} { } else { # editing an existing view set viewperm($n) $newviewopts($n,perm) + set viewchanged($n) 1 if {$newviewname($n) ne $viewname($n)} { set viewname($n) $newviewname($n) doviewmenu .bar.view 5 [list showview $n] \ @@ -4293,7 +4385,7 @@ proc newviewok {top n {apply 0}} { } proc delview {} { - global curview viewperm hlview selectedhlview + global curview viewperm hlview selectedhlview viewchanged if {$curview == 0} return if {[info exists hlview] && $hlview == $curview} { @@ -4302,6 +4394,7 @@ proc delview {} { } allviewmenus $curview delete set viewperm($curview) 0 + set viewchanged($curview) 1 showview 0 } @@ -11237,6 +11330,7 @@ proc prefspage_general {notebook} { ${NS}::label $page.maxwidthl -text [mc "Maximum graph width (lines)"] spinbox $page.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth grid $page.spacer $page.maxwidthl $page.maxwidth -sticky w + #xgettext:no-tcl-format ${NS}::label $page.maxpctl -text [mc "Maximum graph width (% of pane)"] spinbox $page.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct grid x $page.maxpctl $page.maxpct -sticky w @@ -11936,7 +12030,7 @@ if { [info exists ::env(GIT_TRACE)] } { } # defaults... -set wrcomcmd "git diff-tree --stdin -p --pretty" +set wrcomcmd "git diff-tree --stdin -p --pretty=email" set gitencoding {} catch { @@ -12109,6 +12203,7 @@ catch { } source $config_file } +config_check_tmp_exists 50 set config_variables { mainfont textfont uifont tabstop findmergefiles maxgraphpct maxwidth @@ -12122,6 +12217,10 @@ set config_variables { linehoveroutlinecolor mainheadcirclecolor workingfilescirclecolor indexcirclecolor circlecolors linkfgcolor circleoutlinecolor } +foreach var $config_variables { + config_init_trace $var + trace add variable $var write config_variable_change_cb +} parsefont mainfont $mainfont eval font create mainfont [fontflags mainfont] @@ -12249,6 +12348,7 @@ set highlight_related [mc "None"] set highlight_files {} set viewfiles(0) {} set viewperm(0) 0 +set viewchanged(0) 0 set viewargs(0) {} set viewargscmd(0) {} @@ -12307,6 +12407,7 @@ if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} { set viewargs(1) $revtreeargs set viewargscmd(1) $revtreeargscmd set viewperm(1) 0 + set viewchanged(1) 0 set vdatemode(1) 0 addviewmenu 1 .bar.view entryconf [mca "Edit view..."] -state normal @@ -12322,6 +12423,7 @@ if {[info exists permviews]} { set viewargs($n) [lindex $v 2] set viewargscmd($n) [lindex $v 3] set viewperm($n) 1 + set viewchanged($n) 0 addviewmenu $n } } diff --git a/gitk-git/po/bg.po b/gitk-git/po/bg.po index f86a161129..1df0716c38 100644 --- a/gitk-git/po/bg.po +++ b/gitk-git/po/bg.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gitk master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-08-03 11:17+0300\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2014-07-28 07:32+0300\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" @@ -22,28 +22,28 @@ msgstr "" msgid "Couldn't get list of unmerged files:" msgstr "Списъкът с неслети файлове не може да бъде получен:" -#: gitk:212 gitk:2379 +#: gitk:212 gitk:2381 msgid "Color words" msgstr "Оцветяване на думите" -#: gitk:217 gitk:2379 gitk:8155 gitk:8188 +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 msgid "Markup words" msgstr "Отбелязване на думите" -#: gitk:322 +#: gitk:324 msgid "Error parsing revisions:" msgstr "Грешка при разбор на версиите:" -#: gitk:378 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Грешка при изпълнение на командата с „--argscmd“." -#: gitk:391 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Не са избрани файлове — указана е опцията „--merge“, но няма неслети файлове." -#: gitk:394 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -51,306 +51,306 @@ msgstr "" "Не са избрани файлове — указана е опцията „--merge“, но няма неслети файлове " "в ограниченията." -#: gitk:416 gitk:564 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Грешка при изпълнение на „git log“:" -#: gitk:434 gitk:580 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Прочитане" -#: gitk:494 gitk:4470 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Прочитане на подаванията…" -#: gitk:497 gitk:1635 gitk:4473 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Не са избрани подавания" -#: gitk:1509 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Изходът от „git log“ не може да се анализира:" -#: gitk:1738 +#: gitk:1740 msgid "No commit information available" msgstr "Липсва информация за подавания" -#: gitk:1895 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1930 gitk:4263 gitk:9604 gitk:11174 gitk:11453 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "Добре" -#: gitk:1932 gitk:4265 gitk:9131 gitk:9210 gitk:9326 gitk:9375 gitk:9606 -#: gitk:11175 gitk:11454 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Отказ" -#: gitk:2067 +#: gitk:2069 msgid "Update" msgstr "Обновяване" -#: gitk:2068 +#: gitk:2070 msgid "Reload" msgstr "Презареждане" -#: gitk:2069 +#: gitk:2071 msgid "Reread references" msgstr "Наново прочитане на настройките" -#: gitk:2070 +#: gitk:2072 msgid "List references" msgstr "Изброяване на указателите" -#: gitk:2072 +#: gitk:2074 msgid "Start git gui" msgstr "Стартиране на „git gui“" -#: gitk:2074 +#: gitk:2076 msgid "Quit" msgstr "Спиране на програмата" -#: gitk:2066 +#: gitk:2068 msgid "File" msgstr "Файл" -#: gitk:2078 +#: gitk:2080 msgid "Preferences" msgstr "Настройки" -#: gitk:2077 +#: gitk:2079 msgid "Edit" msgstr "Редактиране" -#: gitk:2082 +#: gitk:2084 msgid "New view..." msgstr "Нов изглед…" -#: gitk:2083 +#: gitk:2085 msgid "Edit view..." msgstr "Редактиране на изгледа…" -#: gitk:2084 +#: gitk:2086 msgid "Delete view" msgstr "Изтриване на изгледа" -#: gitk:2086 +#: gitk:2088 msgid "All files" msgstr "Всички файлове" -#: gitk:2081 gitk:4016 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Изглед" -#: gitk:2091 gitk:2101 gitk:2976 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Относно gitk" -#: gitk:2092 gitk:2106 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Клавишни комбинации" -#: gitk:2090 gitk:2105 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Помощ" -#: gitk:2183 gitk:8587 +#: gitk:2185 gitk:8633 msgid "SHA1 ID:" msgstr "SHA1:" -#: gitk:2227 +#: gitk:2229 msgid "Row" msgstr "Ред" -#: gitk:2265 +#: gitk:2267 msgid "Find" msgstr "Търсене" -#: gitk:2293 +#: gitk:2295 msgid "commit" msgstr "подаване" -#: gitk:2297 gitk:2299 gitk:4631 gitk:4654 gitk:4678 gitk:6698 gitk:6770 -#: gitk:6855 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "съдържащо:" -#: gitk:2300 gitk:3488 gitk:3493 gitk:4707 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "засягащо пътищата:" -#: gitk:2301 gitk:4721 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "добавящо/премахващо низ" -#: gitk:2302 gitk:4723 +#: gitk:2304 gitk:4761 msgid "changing lines matching:" msgstr "променящо редове напасващи:" -#: gitk:2311 gitk:2313 gitk:4710 +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Точно" -#: gitk:2313 gitk:4798 gitk:6666 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "Без регистър" -#: gitk:2313 gitk:4680 gitk:4796 gitk:6662 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Рег. израз" -#: gitk:2315 gitk:2316 gitk:4818 gitk:4848 gitk:4855 gitk:6791 gitk:6859 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Всички полета" -#: gitk:2316 gitk:4815 gitk:4848 gitk:6729 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Първи ред" -#: gitk:2317 gitk:4815 gitk:6729 gitk:6859 gitk:7332 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Коментари" -#: gitk:2317 gitk:4815 gitk:4820 gitk:4855 gitk:6729 gitk:7267 gitk:8765 -#: gitk:8780 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Автор" -#: gitk:2317 gitk:4815 gitk:6729 gitk:7269 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Подаващ" -#: gitk:2348 +#: gitk:2350 msgid "Search" msgstr "Търсене" -#: gitk:2356 +#: gitk:2358 msgid "Diff" msgstr "Разлики" -#: gitk:2358 +#: gitk:2360 msgid "Old version" msgstr "Стара версия" -#: gitk:2360 +#: gitk:2362 msgid "New version" msgstr "Нова версия" -#: gitk:2362 +#: gitk:2364 msgid "Lines of context" msgstr "Контекст в редове" -#: gitk:2372 +#: gitk:2374 msgid "Ignore space change" msgstr "Празните знаци без значение" -#: gitk:2376 gitk:2378 gitk:7894 gitk:8141 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 msgid "Line diff" msgstr "Поредови разлики" -#: gitk:2443 +#: gitk:2445 msgid "Patch" msgstr "Кръпка" -#: gitk:2445 +#: gitk:2447 msgid "Tree" msgstr "Дърво" -#: gitk:2604 gitk:2624 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Разлики между това и избраното" -#: gitk:2605 gitk:2625 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Разлики между избраното и това" -#: gitk:2606 gitk:2626 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Създаване на кръпка" -#: gitk:2607 gitk:9189 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Създаване на етикет" -#: gitk:2608 gitk:9306 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Запазване на подаването във файл" -#: gitk:2609 gitk:9363 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Създаване на нов клон" -#: gitk:2610 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Отбиране на това подаване" -#: gitk:2611 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Привеждане на върха на клона към текущото подаване" -#: gitk:2612 +#: gitk:2624 msgid "Mark this commit" msgstr "Отбелязване на това подаване" -#: gitk:2613 +#: gitk:2625 msgid "Return to mark" msgstr "Връщане към отбелязаното подаване" -#: gitk:2614 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Откриване и отбелязване на наследниците" -#: gitk:2615 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Сравнение с отбелязаното подаване" -#: gitk:2616 gitk:2627 +#: gitk:2628 gitk:2639 msgid "Diff this -> marked commit" msgstr "Разлики между това и отбелязаното" -#: gitk:2617 gitk:2628 +#: gitk:2629 gitk:2640 msgid "Diff marked commit -> this" msgstr "Разлики между отбелязаното и това" -#: gitk:2618 +#: gitk:2630 msgid "Revert this commit" msgstr "Отмяна на това подаване" -#: gitk:2634 +#: gitk:2646 msgid "Check out this branch" msgstr "Изтегляне на този клон" -#: gitk:2635 +#: gitk:2647 msgid "Remove this branch" msgstr "Изтриване на този клон" -#: gitk:2642 +#: gitk:2654 msgid "Highlight this too" msgstr "Отбелязване и на това" -#: gitk:2643 +#: gitk:2655 msgid "Highlight this only" msgstr "Отбелязване само на това" -#: gitk:2644 +#: gitk:2656 msgid "External diff" msgstr "Външна програма за разлики" -#: gitk:2645 +#: gitk:2657 msgid "Blame parent commit" msgstr "Анотиране на родителското подаване" -#: gitk:2652 +#: gitk:2664 msgid "Show origin of this line" msgstr "Показване на произхода на този ред" -#: gitk:2653 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Изпълнение на „git gui blame“ върху този ред" -#: gitk:2978 +#: gitk:3011 msgid "" "\n" "Gitk - a commit viewer for git\n" @@ -366,303 +366,313 @@ msgstr "" "\n" "Използвайте и разпространявайте при условията на ОПЛ на ГНУ" -#: gitk:2986 gitk:3051 gitk:9790 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Затваряне" -#: gitk:3007 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Клавишни комбинации" -#: gitk:3010 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Клавишни комбинации:" -#: gitk:3012 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tСпиране на програмата" -#: gitk:3013 +#: gitk:3046 #, tcl-format msgid "<%s-W>\t\tClose window" msgstr "<%s-W>\t\tЗатваряне на прозореца" -#: gitk:3014 +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tКъм първото подаване" -#: gitk:3015 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tКъм последното подаване" -#: gitk:3016 +#: gitk:3049 msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, k\tЕдно подаване нагоре" -#: gitk:3017 +#: gitk:3050 msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, j\tЕдно подаване надолу" -#: gitk:3018 +#: gitk:3051 msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, h\tНазад в историята" -#: gitk:3019 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\tНапред в историята" -#: gitk:3020 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tСтраница нагоре в списъка с подаванията" -#: gitk:3021 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tСтраница надолу в списъка с подаванията" -#: gitk:3022 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tКъм началото на списъка с подаванията" -#: gitk:3023 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tКъм края на списъка с подаванията" -#: gitk:3024 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tРед нагоре в списъка с подавания" -#: gitk:3025 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tРед надолу в списъка с подавания" -#: gitk:3026 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tСтраница нагоре в списъка с подавания" -#: gitk:3027 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tСтраница надолу в списъка с подавания" -#: gitk:3028 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Up>\tТърсене назад (визуално нагоре, исторически — последващи)" -#: gitk:3029 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "" "<Shift-Down>\tТърсене напред (визуално надолу, исторически — предхождащи)" -#: gitk:3030 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tСтраница нагоре в изгледа за разлики" -#: gitk:3031 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tСтраница надолу в изгледа за разлики" -#: gitk:3032 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Space>\t\tСтраница надолу в изгледа за разлики" -#: gitk:3033 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\t18 реда нагоре в изгледа за разлики" -#: gitk:3034 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\t18 реда надолу в изгледа за разлики" -#: gitk:3035 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tТърсене" -#: gitk:3036 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tКъм следващата поява" -#: gitk:3037 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\tКъм следващата поява" -#: gitk:3038 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tФокус върху полето за търсене" -#: gitk:3039 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tКъм предишната поява" -#: gitk:3040 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tСледващ файл в изгледа за разлики" -#: gitk:3041 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tТърсене на следващата поява в изгледа за разлики" -#: gitk:3042 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tТърсене на предишната поява в изгледа за разлики" -#: gitk:3043 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tПо-голям размер на шрифта" -#: gitk:3044 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tПо-голям размер на шрифта" -#: gitk:3045 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tПо-малък размер на шрифта" -#: gitk:3046 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tПо-малък размер на шрифта" -#: gitk:3047 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tОбновяване" -#: gitk:3512 gitk:3521 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Грешка при създаването на временната директория „%s“:" -#: gitk:3534 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Грешка при получаването на „%s“ от %s:" -#: gitk:3597 +#: gitk:3631 msgid "command failed:" msgstr "неуспешно изпълнение на команда:" -#: gitk:3746 +#: gitk:3780 msgid "No such commit" msgstr "Такова подаване няма" -#: gitk:3760 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "„git gui blame“: неуспешно изпълнение на команда:" -#: gitk:3791 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Върхът за сливане не може да бъде прочетен: %s" -#: gitk:3799 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Грешка при прочитане на индекса: %s" -#: gitk:3824 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Командата „git blame“ не може да бъде стартирана: %s" -#: gitk:3827 gitk:6697 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Търсене" -#: gitk:3859 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Грешка при изпълнението на „git blame“: %s" -#: gitk:3887 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Този ред идва от подаването %s, което не е в изгледа" -#: gitk:3901 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Неуспешно изпълнение на външната програма за разлики:" -#: gitk:4019 +#: gitk:4053 msgid "Gitk view definition" msgstr "Дефиниция на изглед в Gitk" -#: gitk:4023 +#: gitk:4057 msgid "Remember this view" msgstr "Запазване на този изглед" -#: gitk:4024 +#: gitk:4058 msgid "References (space separated list):" msgstr "Указатели (списък с разделител интервал):" -#: gitk:4025 +#: gitk:4059 msgid "Branches & tags:" msgstr "Клони и етикети:" -#: gitk:4026 +#: gitk:4060 msgid "All refs" msgstr "Всички указатели" -#: gitk:4027 +#: gitk:4061 msgid "All (local) branches" msgstr "Всички (локални) клони" -#: gitk:4028 +#: gitk:4062 msgid "All tags" msgstr "Всички етикети" -#: gitk:4029 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Всички следящи клони" -#: gitk:4030 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Информация за подаване (рег. изр.):" -#: gitk:4031 +#: gitk:4065 msgid "Author:" msgstr "Автор:" -#: gitk:4032 +#: gitk:4066 msgid "Committer:" msgstr "Подал:" -#: gitk:4033 +#: gitk:4067 msgid "Commit Message:" msgstr "Съобщение при подаване:" -#: gitk:4034 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Съвпадение по коя да е информация за подаването" -#: gitk:4035 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Съвпадение по коя да е информация за подаването" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Промени по файловете:" -#: gitk:4036 +#: gitk:4071 msgid "Fixed String" msgstr "Дословен низ" -#: gitk:4037 +#: gitk:4072 msgid "Regular Expression" msgstr "Регулярен израз" -#: gitk:4038 +#: gitk:4073 msgid "Search string:" msgstr "Низ за търсене:" -#: gitk:4039 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -670,204 +680,204 @@ msgstr "" "Дата на подаване („2 weeks ago“ (преди 2 седмици), „2009-03-17 15:27:38“, " "„March 17, 2009 15:27:38“):" -#: gitk:4040 +#: gitk:4075 msgid "Since:" msgstr "От:" -#: gitk:4041 +#: gitk:4076 msgid "Until:" msgstr "До:" -#: gitk:4042 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "" "Ограничаване и/или прескачане на определен брой версии (неотрицателно цяло " "число):" -#: gitk:4043 +#: gitk:4078 msgid "Number to show:" msgstr "Брой показани:" -#: gitk:4044 +#: gitk:4079 msgid "Number to skip:" msgstr "Брой прескочени:" -#: gitk:4045 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Разни:" -#: gitk:4046 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Подреждане по дата" -#: gitk:4047 +#: gitk:4082 msgid "Mark branch sides" msgstr "Отбелязване на страните по клона" -#: gitk:4048 +#: gitk:4083 msgid "Limit to first parent" msgstr "Само първия родител" -#: gitk:4049 +#: gitk:4084 msgid "Simple history" msgstr "Опростена история" -#: gitk:4050 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Допълнителни аргументи към „git log“:" -#: gitk:4051 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Въведете файловете и директориите за включване, по елемент на ред" -#: gitk:4052 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "" "Команда за генерирането на допълнителни подавания, които да бъдат включени:" -#: gitk:4176 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: редактиране на изглед" -#: gitk:4184 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "— критерии за избор на версии" -#: gitk:4189 +#: gitk:4224 msgid "View Name" msgstr "Име на изглед" -#: gitk:4264 +#: gitk:4299 msgid "Apply (F5)" msgstr "Прилагане (F5)" -#: gitk:4302 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Грешка в аргументите за избор на подавания:" -#: gitk:4355 gitk:4407 gitk:4868 gitk:4882 gitk:6152 gitk:12281 gitk:12282 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Няма" -#: gitk:4965 gitk:4970 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Наследник" -#: gitk:4966 +#: gitk:5004 msgid "Not descendant" msgstr "Не е наследник" -#: gitk:4973 gitk:4978 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Предшественик" -#: gitk:4974 +#: gitk:5012 msgid "Not ancestor" msgstr "Не е предшественик" -#: gitk:5268 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Локални промени добавени към индекса, но неподадени" -#: gitk:5304 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Локални промени извън индекса" -#: gitk:7077 +#: gitk:7115 msgid "and many more" msgstr "и още много" -#: gitk:7080 +#: gitk:7118 msgid "many" msgstr "много" -#: gitk:7271 +#: gitk:7309 msgid "Tags:" msgstr "Етикети:" -#: gitk:7288 gitk:7294 gitk:8760 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Родител" -#: gitk:7299 +#: gitk:7337 msgid "Child" msgstr "Дете" -#: gitk:7308 +#: gitk:7346 msgid "Branch" msgstr "Клон" -#: gitk:7311 +#: gitk:7349 msgid "Follows" msgstr "Следва" -#: gitk:7314 +#: gitk:7352 msgid "Precedes" msgstr "Предшества" -#: gitk:7901 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Грешка при получаването на разликите: %s" -#: gitk:8585 +#: gitk:8631 msgid "Goto:" msgstr "Към ред:" -#: gitk:8606 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Съкратената сума по SHA1 %s не е еднозначна" -#: gitk:8613 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "Непозната версия %s" -#: gitk:8623 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "Непозната сума по SHA1 %s" -#: gitk:8625 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "Версия %s не е в текущия изглед" -#: gitk:8767 gitk:8782 +#: gitk:8813 gitk:8828 msgid "Date" msgstr "Дата" -#: gitk:8770 +#: gitk:8816 msgid "Children" msgstr "Деца" -#: gitk:8833 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Зануляване на клона „%s“ към текущото подаване" -#: gitk:8835 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Несвързан връх: невъзможно зануляване" -#: gitk:8940 gitk:8946 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Пропускане на подаването на сливането" -#: gitk:8955 gitk:8960 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Грешка при получаването на идентификатора на " -#: gitk:8956 gitk:8961 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " — спиране\n" -#: gitk:8966 gitk:8969 gitk:8977 gitk:8991 gitk:9000 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Подаване" -#: gitk:8970 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -875,7 +885,7 @@ msgstr "" " е същата кръпка като\n" " " -#: gitk:8978 +#: gitk:9024 msgid "" " differs from\n" " " @@ -883,7 +893,7 @@ msgstr "" " се различава от\n" " " -#: gitk:8980 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -891,130 +901,130 @@ msgstr "" "Разлика между подаванията:\n" "\n" -#: gitk:8992 gitk:9001 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " има %s деца — спиране\n" -#: gitk:9020 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Грешка при запазването на подаването във файл: %s" -#: gitk:9026 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "Грешка при изчисляването на разликите между подаванията: %s" -#: gitk:9072 +#: gitk:9118 msgid "Top" msgstr "Най-горе" -#: gitk:9073 +#: gitk:9119 msgid "From" msgstr "От" -#: gitk:9078 +#: gitk:9124 msgid "To" msgstr "До" -#: gitk:9102 +#: gitk:9148 msgid "Generate patch" msgstr "Генериране на кръпка" -#: gitk:9104 +#: gitk:9150 msgid "From:" msgstr "От:" -#: gitk:9113 +#: gitk:9159 msgid "To:" msgstr "До:" -#: gitk:9122 +#: gitk:9168 msgid "Reverse" msgstr "Обръщане" -#: gitk:9124 gitk:9320 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Запазване във файла:" -#: gitk:9130 +#: gitk:9176 msgid "Generate" msgstr "Генериране" -#: gitk:9168 +#: gitk:9214 msgid "Error creating patch:" msgstr "Грешка при създаването на кръпка:" -#: gitk:9191 gitk:9308 gitk:9365 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "Идентификатор:" -#: gitk:9200 +#: gitk:9246 msgid "Tag name:" msgstr "Име на етикет:" -#: gitk:9203 +#: gitk:9249 msgid "Tag message is optional" msgstr "Съобщението за етикет е незадължително" -#: gitk:9205 +#: gitk:9251 msgid "Tag message:" msgstr "Съобщение за етикет:" -#: gitk:9209 gitk:9374 +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Създаване" -#: gitk:9227 +#: gitk:9273 msgid "No tag name specified" msgstr "Липсва име на етикет" -#: gitk:9231 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Етикетът „%s“ вече съществува" -#: gitk:9241 +#: gitk:9287 msgid "Error creating tag:" msgstr "Грешка при създаването на етикет:" -#: gitk:9317 +#: gitk:9363 msgid "Command:" msgstr "Команда:" -#: gitk:9325 +#: gitk:9371 msgid "Write" msgstr "Запазване" -#: gitk:9343 +#: gitk:9389 msgid "Error writing commit:" msgstr "Грешка при запазването на подаването:" -#: gitk:9370 +#: gitk:9416 msgid "Name:" msgstr "Име:" -#: gitk:9393 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Укажете име за новия клон" -#: gitk:9398 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "Клонът „%s“ вече съществува. Да бъде ли презаписан?" -#: gitk:9465 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" "Подаването „%s“ вече е включено в клона „%s“ — да бъде ли приложено отново?" -#: gitk:9470 +#: gitk:9516 msgid "Cherry-picking" msgstr "Отбиране" -#: gitk:9479 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -1023,7 +1033,7 @@ msgstr "" "Неуспешно отбиране, защото във файла „%s“ има локални промени.\n" "Подайте, занулете или ги скатайте и пробвайте отново." -#: gitk:9485 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1031,20 +1041,20 @@ msgstr "" "Неуспешно отбиране поради конфликти при сливане.\n" "Искате ли да ги коригирате чрез „git citool“?" -#: gitk:9501 gitk:9559 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Не са подадени промени" -#: gitk:9528 +#: gitk:9574 #, tcl-format msgid "Commit %s is not included in branch %s -- really revert it?" msgstr "Подаването „%s“ не е включено в клона „%s“. Да бъде ли отменено?" -#: gitk:9533 +#: gitk:9579 msgid "Reverting" msgstr "Отмяна" -#: gitk:9541 +#: gitk:9587 #, tcl-format msgid "" "Revert failed because of local changes to the following files:%s Please " @@ -1053,7 +1063,7 @@ msgstr "" "Неуспешна отмяна, защото във файла „%s“ има локални промени.\n" "Подайте, занулете или ги скатайте и пробвайте отново.<" -#: gitk:9545 +#: gitk:9591 msgid "" "Revert failed because of merge conflict.\n" " Do you wish to run git citool to resolve it?" @@ -1061,28 +1071,28 @@ msgstr "" "Неуспешно отмяна поради конфликти при сливане.\n" "Искате ли да ги коригирате чрез „git citool“?" -#: gitk:9588 +#: gitk:9634 msgid "Confirm reset" msgstr "Потвърждаване на зануляването" -#: gitk:9590 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Да се занули ли клонът „%s“ към „%s“?" -#: gitk:9592 +#: gitk:9638 msgid "Reset type:" msgstr "Вид зануляване:" -#: gitk:9595 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Слабо: работното дърво и индекса остават същите" -#: gitk:9598 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Смесено: работното дърво остава същото, индексът се занулява" -#: gitk:9601 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1090,19 +1100,19 @@ msgstr "" "Силно: зануляване и на работното дърво, и на индекса\n" "(*ВСИЧКИ* локални промени ще бъдат безвъзвратно загубени)" -#: gitk:9618 +#: gitk:9664 msgid "Resetting" msgstr "Зануляване" -#: gitk:9678 +#: gitk:9724 msgid "Checking out" msgstr "Изтегляне" -#: gitk:9731 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Текущо изтегленият клон не може да бъде изтрит" -#: gitk:9737 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1111,16 +1121,16 @@ msgstr "" "Подаванията на клона „%s“ не са на никой друг клон.\n" "Наистина ли да се изтрие клонът „%s“?" -#: gitk:9768 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Етикети и върхове: %s" -#: gitk:9783 +#: gitk:9829 msgid "Filter" msgstr "Филтриране" -#: gitk:10079 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1128,213 +1138,213 @@ msgstr "" "Грешка при прочитането на топологията на подаванията. Информацията за клона " "и предшестващите/следващите етикети ще е непълна." -#: gitk:11056 +#: gitk:11102 msgid "Tag" msgstr "Етикет" -#: gitk:11060 +#: gitk:11106 msgid "Id" msgstr "Идентификатор" -#: gitk:11143 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Избор на шрифт за Gitk" -#: gitk:11160 +#: gitk:11206 msgid "B" msgstr "Ч" -#: gitk:11163 +#: gitk:11209 msgid "I" msgstr "К" -#: gitk:11281 +#: gitk:11327 msgid "Commit list display options" msgstr "Настройки на списъка с подавания" -#: gitk:11284 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Максимална широчина на графа (в редове)" -#: gitk:11287 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Максимална широчина на графа (% от панела)" -#: gitk:11290 +#: gitk:11337 msgid "Show local changes" msgstr "Показване на локалните промени" -#: gitk:11293 +#: gitk:11340 msgid "Auto-select SHA1 (length)" msgstr "Автоматично избиране на SHA1 (дължина)" -#: gitk:11297 +#: gitk:11344 msgid "Hide remote refs" msgstr "Скриване на отдалечените указатели" -#: gitk:11301 +#: gitk:11348 msgid "Diff display options" msgstr "Настройки на показването на разликите" -#: gitk:11303 +#: gitk:11350 msgid "Tab spacing" msgstr "Широчина на табулатора" -#: gitk:11306 +#: gitk:11353 msgid "Display nearby tags/heads" msgstr "Извеждане на близките етикети и върхове" -#: gitk:11309 +#: gitk:11356 msgid "Maximum # tags/heads to show" msgstr "Максимален брой етикети/върхове за показване" -#: gitk:11312 +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Разлика само в избраните пътища" -#: gitk:11315 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Поддръжка на различни кодирания за всеки файл" -#: gitk:11321 gitk:11468 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Външен инструмент за разлики" -#: gitk:11322 +#: gitk:11369 msgid "Choose..." msgstr "Избор…" -#: gitk:11327 +#: gitk:11374 msgid "General options" msgstr "Общи настройки" -#: gitk:11330 +#: gitk:11377 msgid "Use themed widgets" msgstr "Използване на тема за графичните обекти" -#: gitk:11332 +#: gitk:11379 msgid "(change requires restart)" msgstr "(промяната изисква рестартиране на Gitk)" -#: gitk:11334 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(в момента недостъпно)" -#: gitk:11345 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Цветове: избира се с натискане" -#: gitk:11348 +#: gitk:11395 msgid "Interface" msgstr "Интерфейс" -#: gitk:11349 +#: gitk:11396 msgid "interface" msgstr "интерфейс" -#: gitk:11352 +#: gitk:11399 msgid "Background" msgstr "Фон" -#: gitk:11353 gitk:11383 +#: gitk:11400 gitk:11430 msgid "background" msgstr "фон" -#: gitk:11356 +#: gitk:11403 msgid "Foreground" msgstr "Знаци" -#: gitk:11357 +#: gitk:11404 msgid "foreground" msgstr "знаци" -#: gitk:11360 +#: gitk:11407 msgid "Diff: old lines" msgstr "Разлика: стари редове" -#: gitk:11361 +#: gitk:11408 msgid "diff old lines" msgstr "разлика, стари редове" -#: gitk:11365 +#: gitk:11412 msgid "Diff: new lines" msgstr "Разлика: нови редове" -#: gitk:11366 +#: gitk:11413 msgid "diff new lines" msgstr "разлика, нови редове" -#: gitk:11370 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Разлика: начало на парче" -#: gitk:11372 +#: gitk:11419 msgid "diff hunk header" msgstr "разлика, начало на парче" -#: gitk:11376 +#: gitk:11423 msgid "Marked line bg" msgstr "Фон на отбелязан ред" -#: gitk:11378 +#: gitk:11425 msgid "marked line background" msgstr "фон на отбелязан ред" -#: gitk:11382 +#: gitk:11429 msgid "Select bg" msgstr "Избор на фон" -#: gitk:11391 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Шрифтове: избира се с натискане" -#: gitk:11393 +#: gitk:11440 msgid "Main font" msgstr "Основен шрифт" -#: gitk:11394 +#: gitk:11441 msgid "Diff display font" msgstr "Шрифт за разликите" -#: gitk:11395 +#: gitk:11442 msgid "User interface font" msgstr "Шрифт на интерфейса" -#: gitk:11417 +#: gitk:11464 msgid "Gitk preferences" msgstr "Настройки на Gitk" -#: gitk:11426 +#: gitk:11473 msgid "General" msgstr "Общи" -#: gitk:11427 +#: gitk:11474 msgid "Colors" msgstr "Цветове" -#: gitk:11428 +#: gitk:11475 msgid "Fonts" msgstr "Шрифтове" -#: gitk:11478 +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: избор на цвят на „%s“" -#: gitk:12177 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Тук липсва хранилище на Git." -#: gitk:12224 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Нееднозначен аргумент „%s“: има и такава версия, и такъв файл" -#: gitk:12236 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Неправилни аргументи на gitk:" -#: gitk:12339 +#: gitk:12405 msgid "Command line" msgstr "Команден ред" diff --git a/gitk-git/po/ca.po b/gitk-git/po/ca.po new file mode 100644 index 0000000000..2c1f60683c --- /dev/null +++ b/gitk-git/po/ca.po @@ -0,0 +1,1354 @@ +# Translation of gitk +# Copyright (C) 2005-2014 Paul Mackerras +# This file is distributed under the same license as the gitk package. +# Alex Henrie <alexhenrie24@gmail.com>, 2015. +# +# +msgid "" +msgstr "" +"Project-Id-Version: gitk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" +"PO-Revision-Date: 2015-02-01 22:49-0700\n" +"Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n" +"Language-Team: Catalan\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"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.7.3\n" + +#: gitk:140 +msgid "Couldn't get list of unmerged files:" +msgstr "No s'ha pogut obtenir la llista de fitxers no fusionats:" + +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "Colora les paraules" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "Marca les paraules" + +#: gitk:324 +msgid "Error parsing revisions:" +msgstr "Error en analitzar les revisions:" + +#: gitk:380 +msgid "Error executing --argscmd command:" +msgstr "Error en executar l'ordre --argscmd:" + +#: gitk:393 +msgid "No files selected: --merge specified but no files are unmerged." +msgstr "" +"No hi ha fitxers seleccionats: s'ha especificat --merge però cap fitxer està " +"sense fusionar." + +#: gitk:396 +msgid "" +"No files selected: --merge specified but no unmerged files are within file " +"limit." +msgstr "" +"No hi ha fitxers seleccionats: s'ha especificat --merge però cap fitxer " +"sense fusionar està dins del límit de fitxers." + +#: gitk:418 gitk:566 +msgid "Error executing git log:" +msgstr "Error en executar git log:" + +#: gitk:436 gitk:582 +msgid "Reading" +msgstr "Llegint" + +#: gitk:496 gitk:4508 +msgid "Reading commits..." +msgstr "Llegint les revisions..." + +#: gitk:499 gitk:1637 gitk:4511 +msgid "No commits selected" +msgstr "Cap comissió seleccionada" + +#: gitk:1511 +msgid "Can't parse git log output:" +msgstr "No es pot analitzar la sortida del git log:" + +#: gitk:1740 +msgid "No commit information available" +msgstr "Cap informació de comissió disponible" + +#: gitk:1897 +msgid "mc" +msgstr "mc" + +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 +msgid "OK" +msgstr "D'acord" + +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 +msgid "Cancel" +msgstr "Cancel·la" + +#: gitk:2069 +msgid "Update" +msgstr "Actualitza" + +#: gitk:2070 +msgid "Reload" +msgstr "Recarrega" + +#: gitk:2071 +msgid "Reread references" +msgstr "Rellegeix les referències" + +#: gitk:2072 +msgid "List references" +msgstr "Llista les referències" + +#: gitk:2074 +msgid "Start git gui" +msgstr "Inicia el git gui" + +#: gitk:2076 +msgid "Quit" +msgstr "Surt" + +#: gitk:2068 +msgid "File" +msgstr "Fitxer" + +#: gitk:2080 +msgid "Preferences" +msgstr "Preferències" + +#: gitk:2079 +msgid "Edit" +msgstr "Edita" + +#: gitk:2084 +msgid "New view..." +msgstr "Vista nova..." + +#: gitk:2085 +msgid "Edit view..." +msgstr "Edita la vista..." + +#: gitk:2086 +msgid "Delete view" +msgstr "Suprimeix vista" + +#: gitk:2088 +msgid "All files" +msgstr "Tots els fitxers" + +#: gitk:2083 gitk:4050 +msgid "View" +msgstr "Vista" + +#: gitk:2093 gitk:2103 gitk:3009 +msgid "About gitk" +msgstr "Quant al gitk" + +#: gitk:2094 gitk:2108 +msgid "Key bindings" +msgstr "Associacions de tecles" + +#: gitk:2092 gitk:2107 +msgid "Help" +msgstr "Ajuda" + +#: gitk:2185 gitk:8633 +msgid "SHA1 ID:" +msgstr "ID SHA1:" + +#: gitk:2229 +msgid "Row" +msgstr "Fila" + +#: gitk:2267 +msgid "Find" +msgstr "Cerca" + +#: gitk:2295 +msgid "commit" +msgstr "comissió" + +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 +msgid "containing:" +msgstr "que contingui:" + +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 +msgid "touching paths:" +msgstr "que toqui els camins:" + +#: gitk:2303 gitk:4759 +msgid "adding/removing string:" +msgstr "que afegeixi/elimini la cadena:" + +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "que tingui línies canviades coincidents amb:" + +#: gitk:2313 gitk:2315 gitk:4748 +msgid "Exact" +msgstr "Exacte" + +#: gitk:2315 gitk:4836 gitk:6704 +msgid "IgnCase" +msgstr "Ignora majúscula i minúscula" + +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 +msgid "Regexp" +msgstr "Regexp" + +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 +msgid "All fields" +msgstr "Tots els camps" + +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 +msgid "Headline" +msgstr "Titular" + +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 +msgid "Comments" +msgstr "Comentaris" + +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 +msgid "Author" +msgstr "Autor" + +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 +msgid "Committer" +msgstr "Comitent" + +#: gitk:2350 +msgid "Search" +msgstr "Cerca" + +#: gitk:2358 +msgid "Diff" +msgstr "Diferència" + +#: gitk:2360 +msgid "Old version" +msgstr "Versió antiga" + +#: gitk:2362 +msgid "New version" +msgstr "Versió nova" + +#: gitk:2364 +msgid "Lines of context" +msgstr "Línies de context" + +#: gitk:2374 +msgid "Ignore space change" +msgstr "Ignora canvis d'espai" + +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "Diferència de línies" + +#: gitk:2445 +msgid "Patch" +msgstr "Pedaç" + +#: gitk:2447 +msgid "Tree" +msgstr "Arbre" + +#: gitk:2616 gitk:2636 +msgid "Diff this -> selected" +msgstr "Diferencia aquesta -> la seleccionada" + +#: gitk:2617 gitk:2637 +msgid "Diff selected -> this" +msgstr "Diferencia la seleccionada -> aquesta" + +#: gitk:2618 gitk:2638 +msgid "Make patch" +msgstr "Fes pedaç" + +#: gitk:2619 gitk:9235 +msgid "Create tag" +msgstr "Crea etiqueta" + +#: gitk:2620 gitk:9352 +msgid "Write commit to file" +msgstr "Escriu la comissió a un fitxer" + +#: gitk:2621 gitk:9409 +msgid "Create new branch" +msgstr "Crea una branca nova" + +#: gitk:2622 +msgid "Cherry-pick this commit" +msgstr "Recull aquesta comissió com a cirera" + +#: gitk:2623 +msgid "Reset HEAD branch to here" +msgstr "Restableix la branca HEAD aquí" + +#: gitk:2624 +msgid "Mark this commit" +msgstr "Marca aquesta comissió" + +#: gitk:2625 +msgid "Return to mark" +msgstr "Torna a la marca" + +#: gitk:2626 +msgid "Find descendant of this and mark" +msgstr "Troba la descendent d'aquesta i marca-la" + +#: gitk:2627 +msgid "Compare with marked commit" +msgstr "Compara amb la comissió marcada" + +#: gitk:2628 gitk:2639 +msgid "Diff this -> marked commit" +msgstr "Diferencia aquesta -> la comissió marcada" + +#: gitk:2629 gitk:2640 +msgid "Diff marked commit -> this" +msgstr "Diferencia la comissió seleccionada -> aquesta" + +#: gitk:2630 +msgid "Revert this commit" +msgstr "Reverteix aquesta comissió" + +#: gitk:2646 +msgid "Check out this branch" +msgstr "Agafa aquesta branca" + +#: gitk:2647 +msgid "Remove this branch" +msgstr "Elimina aquesta branca" + +#: gitk:2654 +msgid "Highlight this too" +msgstr "Ressalta aquest també" + +#: gitk:2655 +msgid "Highlight this only" +msgstr "Ressalta només aquest" + +#: gitk:2656 +msgid "External diff" +msgstr "Diferència externa" + +#: gitk:2657 +msgid "Blame parent commit" +msgstr "Culpabilitat de la comissió mare" + +#: gitk:2664 +msgid "Show origin of this line" +msgstr "Mostra l'origen d'aquesta línia" + +#: gitk:2665 +msgid "Run git gui blame on this line" +msgstr "Executa git gui blame en aquesta línia" + +#: gitk:3011 +msgid "" +"\n" +"Gitk - a commit viewer for git\n" +"\n" +"Copyright © 2005-2014 Paul Mackerras\n" +"\n" +"Use and redistribute under the terms of the GNU General Public License" +msgstr "" +"\n" +"Gitk - visualitzador de comissions per al git\n" +"\n" +"Copyright © 2005-2014 Paul Mackerras\n" +"\n" +"Useu-lo i redistribuïu-lo sota els termes de la Llicència Pública General GNU" + +#: gitk:3019 gitk:3085 gitk:9836 +msgid "Close" +msgstr "Tanca" + +#: gitk:3040 +msgid "Gitk key bindings" +msgstr "Associacions de tecles del Gitk" + +#: gitk:3043 +msgid "Gitk key bindings:" +msgstr "Associacions de tecles del Gitk:" + +#: gitk:3045 +#, tcl-format +msgid "<%s-Q>\t\tQuit" +msgstr "<%s-Q>\t\tSurt" + +#: gitk:3046 +#, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-W>\t\tTanca la finestra" + +#: gitk:3047 +msgid "<Home>\t\tMove to first commit" +msgstr "<Inici>\t\tVés a la primera comissió" + +#: gitk:3048 +msgid "<End>\t\tMove to last commit" +msgstr "<Fi>\t\tVés a l'última comissió" + +#: gitk:3049 +msgid "<Up>, p, k\tMove up one commit" +msgstr "<Amunt>, p, k\tMou-te una comissió amunt" + +#: gitk:3050 +msgid "<Down>, n, j\tMove down one commit" +msgstr "<Avall>, n, j\tMou-te una comissió avall" + +#: gitk:3051 +msgid "<Left>, z, h\tGo back in history list" +msgstr "<Esquerra>, z, h\tRetrocedeix en la llista d'història" + +#: gitk:3052 +msgid "<Right>, x, l\tGo forward in history list" +msgstr "<Dreta>, x, l\tAvança en la llista d'història" + +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" +"<%s-n>\tVés a l'enèsima mare de la comissió actual en la llista d'història" + +#: gitk:3054 +msgid "<PageUp>\tMove up one page in commit list" +msgstr "<RePàg>\tBaixa una pàgina en la llista de comissions" + +#: gitk:3055 +msgid "<PageDown>\tMove down one page in commit list" +msgstr "<AvPàg>\tBaixa per una pàgina en la llista de comissions" + +#: gitk:3056 +#, tcl-format +msgid "<%s-Home>\tScroll to top of commit list" +msgstr "<%s-Inici>\tDesplaça't a la part superior de la llista de comissions" + +#: gitk:3057 +#, tcl-format +msgid "<%s-End>\tScroll to bottom of commit list" +msgstr "<%s-Fi>\tDesplaça't a la part inferior de la llista de comissions" + +#: gitk:3058 +#, tcl-format +msgid "<%s-Up>\tScroll commit list up one line" +msgstr "<%s-Amunt>\tDesplaça la llista de comissions una línia cap amunt" + +#: gitk:3059 +#, tcl-format +msgid "<%s-Down>\tScroll commit list down one line" +msgstr "<%s-Avall>\tDesplaça la llista de comissions una línia cap avall" + +#: gitk:3060 +#, tcl-format +msgid "<%s-PageUp>\tScroll commit list up one page" +msgstr "<%s-RePàg>\tDesplaça la llista de comissions amunt per una pàgina" + +#: gitk:3061 +#, tcl-format +msgid "<%s-PageDown>\tScroll commit list down one page" +msgstr "<%s-AvPàg>\tDesplaça la llista de comissions una pàgina cap avall" + +#: gitk:3062 +msgid "<Shift-Up>\tFind backwards (upwards, later commits)" +msgstr "<Maj-Amunt>\tCerca cap enrere (amunt, les comissions més noves)" + +#: gitk:3063 +msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" +msgstr "<Maj-Avall>\tCerca cap endavant (avall, les comissions més velles)" + +#: gitk:3064 +msgid "<Delete>, b\tScroll diff view up one page" +msgstr "<Supr>, b\tDesplaça la vista de diferència una pàgina cap amunt" + +#: gitk:3065 +msgid "<Backspace>\tScroll diff view up one page" +msgstr "<Retrocés>\tDesplaça la vista de diferència una pàgina cap amunt" + +#: gitk:3066 +msgid "<Space>\t\tScroll diff view down one page" +msgstr "<Espai>\t\tDesplaça la vista de diferència una pàgina cap avall" + +#: gitk:3067 +msgid "u\t\tScroll diff view up 18 lines" +msgstr "u\t\tDesplaça la vista de diferència 18 línies cap amunt" + +#: gitk:3068 +msgid "d\t\tScroll diff view down 18 lines" +msgstr "d\t\tDesplaça la vista de diferència 18 línies cap avall " + +#: gitk:3069 +#, tcl-format +msgid "<%s-F>\t\tFind" +msgstr "<%s-F>\t\tCerca" + +#: gitk:3070 +#, tcl-format +msgid "<%s-G>\t\tMove to next find hit" +msgstr "<%s-G>\t\tMou-te a la propera coincidència de la cerca" + +#: gitk:3071 +msgid "<Return>\tMove to next find hit" +msgstr "<Retorn>\tMou-te a la propera coincidència de la cerca" + +#: gitk:3072 +msgid "/\t\tFocus the search box" +msgstr "/\t\tPosa el focus a la caixa de cerca" + +#: gitk:3073 +msgid "?\t\tMove to previous find hit" +msgstr "?\t\tMou a la coincidència prèvia de la cerca" + +#: gitk:3074 +msgid "f\t\tScroll diff view to next file" +msgstr "f\t\tDesplaça la vista de diferència al proper fitxer" + +#: gitk:3075 +#, tcl-format +msgid "<%s-S>\t\tSearch for next hit in diff view" +msgstr "<%s-S>\t\tCerca la propera coincidència en la vista de diferència" + +#: gitk:3076 +#, tcl-format +msgid "<%s-R>\t\tSearch for previous hit in diff view" +msgstr "<%s-R>\t\tCerca la coincidència prèvia en la vista de diferència" + +#: gitk:3077 +#, tcl-format +msgid "<%s-KP+>\tIncrease font size" +msgstr "<%s-KP+>\tAugmenta la mida de lletra" + +#: gitk:3078 +#, tcl-format +msgid "<%s-plus>\tIncrease font size" +msgstr "<%s-més>\tAugmenta la mida de lletra" + +#: gitk:3079 +#, tcl-format +msgid "<%s-KP->\tDecrease font size" +msgstr "<%s-KP->\tDisminueix la mida de lletra" + +#: gitk:3080 +#, tcl-format +msgid "<%s-minus>\tDecrease font size" +msgstr "<%s-menys>\tDisminueix la mida de lletra" + +#: gitk:3081 +msgid "<F5>\t\tUpdate" +msgstr "<F5>\t\tActualitza" + +#: gitk:3546 gitk:3555 +#, tcl-format +msgid "Error creating temporary directory %s:" +msgstr "Error en crear el directori temporal %s:" + +#: gitk:3568 +#, tcl-format +msgid "Error getting \"%s\" from %s:" +msgstr "Error en obtenir \"%s\" de %s:" + +#: gitk:3631 +msgid "command failed:" +msgstr "l'ordre ha fallat:" + +#: gitk:3780 +msgid "No such commit" +msgstr "Cap comissió així" + +#: gitk:3794 +msgid "git gui blame: command failed:" +msgstr "git gui blame: l'ordre ha fallat:" + +#: gitk:3825 +#, tcl-format +msgid "Couldn't read merge head: %s" +msgstr "No s'ha pogut llegir el cap de fusió: %s" + +#: gitk:3833 +#, tcl-format +msgid "Error reading index: %s" +msgstr "Error en llegir l'índex: %s" + +#: gitk:3858 +#, tcl-format +msgid "Couldn't start git blame: %s" +msgstr "No s'ha pogut iniciar el git blame: %s" + +#: gitk:3861 gitk:6735 +msgid "Searching" +msgstr "Cercant" + +#: gitk:3893 +#, tcl-format +msgid "Error running git blame: %s" +msgstr "Error en executar el git blame: %s" + +#: gitk:3921 +#, tcl-format +msgid "That line comes from commit %s, which is not in this view" +msgstr "" +"Aquella línia ve de la comissió %s, la qual no és en aquesta visualització" + +#: gitk:3935 +msgid "External diff viewer failed:" +msgstr "El visualitzador de diferència extern ha fallat:" + +#: gitk:4053 +msgid "Gitk view definition" +msgstr "Definició de vista del Gitk" + +#: gitk:4057 +msgid "Remember this view" +msgstr "Recorda aquesta vista" + +#: gitk:4058 +msgid "References (space separated list):" +msgstr "Referències (llista separada per espais)" + +#: gitk:4059 +msgid "Branches & tags:" +msgstr "Branques i etiquetes:" + +#: gitk:4060 +msgid "All refs" +msgstr "Totes les referències" + +#: gitk:4061 +msgid "All (local) branches" +msgstr "Totes les branques (locals)" + +#: gitk:4062 +msgid "All tags" +msgstr "Totes les etiquetes" + +#: gitk:4063 +msgid "All remote-tracking branches" +msgstr "Totes les branques amb seguiment remot" + +#: gitk:4064 +msgid "Commit Info (regular expressions):" +msgstr "Informació de comissió (expressions regulars):" + +#: gitk:4065 +msgid "Author:" +msgstr "Autor:" + +#: gitk:4066 +msgid "Committer:" +msgstr "Comitent:" + +#: gitk:4067 +msgid "Commit Message:" +msgstr "Missatge de comissió:" + +#: gitk:4068 +msgid "Matches all Commit Info criteria" +msgstr "Coincideix amb tots els criteris d'informació de comissió" + +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Coincideix amb tots els criteris d'informació de comissió" + +#: gitk:4070 +msgid "Changes to Files:" +msgstr "Canvis als fitxers:" + +#: gitk:4071 +msgid "Fixed String" +msgstr "Cadena fixa" + +#: gitk:4072 +msgid "Regular Expression" +msgstr "Expressió regular" + +#: gitk:4073 +msgid "Search string:" +msgstr "Cadena de cerca:" + +#: gitk:4074 +msgid "" +"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " +"15:27:38\"):" +msgstr "" +"Dates de comissió (\"fa 2 setmanes\", \"2009-03-17 15:27:38\", \"17 abr 2009 " +"15:27:38\"):" + +#: gitk:4075 +msgid "Since:" +msgstr "Des de:" + +#: gitk:4076 +msgid "Until:" +msgstr "Fins:" + +#: gitk:4077 +msgid "Limit and/or skip a number of revisions (positive integer):" +msgstr "Limita o salta un nombre de revisions (nombre enter positiu)" + +#: gitk:4078 +msgid "Number to show:" +msgstr "Nombre a mostrar:" + +#: gitk:4079 +msgid "Number to skip:" +msgstr "Nombre a saltar:" + +#: gitk:4080 +msgid "Miscellaneous options:" +msgstr "Opcions miscel·lànies:" + +#: gitk:4081 +msgid "Strictly sort by date" +msgstr "Ordena estrictament per data" + +#: gitk:4082 +msgid "Mark branch sides" +msgstr "Marca els costats de les branques" + +#: gitk:4083 +msgid "Limit to first parent" +msgstr "Limita a la primera mare" + +#: gitk:4084 +msgid "Simple history" +msgstr "Història senzilla" + +#: gitk:4085 +msgid "Additional arguments to git log:" +msgstr "Paràmetres addicionals al git log:" + +#: gitk:4086 +msgid "Enter files and directories to include, one per line:" +msgstr "Introduïu els fitxers i directoris a incloure, un per línia:" + +#: gitk:4087 +msgid "Command to generate more commits to include:" +msgstr "Ordre per a generar més comissions a incloure:" + +#: gitk:4211 +msgid "Gitk: edit view" +msgstr "Gitk: vista d'edició" + +#: gitk:4219 +msgid "-- criteria for selecting revisions" +msgstr "-- criteris per a seleccionar les revisions" + +#: gitk:4224 +msgid "View Name" +msgstr "Nom de vista" + +#: gitk:4299 +msgid "Apply (F5)" +msgstr "Aplica (F5)" + +#: gitk:4337 +msgid "Error in commit selection arguments:" +msgstr "Error en els paràmetres de selecció de comissions:" + +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 +msgid "None" +msgstr "Cap" + +#: gitk:5003 gitk:5008 +msgid "Descendant" +msgstr "Descendent" + +#: gitk:5004 +msgid "Not descendant" +msgstr "No descendent" + +#: gitk:5011 gitk:5016 +msgid "Ancestor" +msgstr "Avantpassat" + +#: gitk:5012 +msgid "Not ancestor" +msgstr "No avantpassat" + +#: gitk:5306 +msgid "Local changes checked in to index but not committed" +msgstr "Canvis locals registrats en l'índex però no comesos" + +#: gitk:5342 +msgid "Local uncommitted changes, not checked in to index" +msgstr "Canvis locals sense cometre, no registrats en l'índex" + +#: gitk:7115 +msgid "and many more" +msgstr "i moltes més" + +#: gitk:7118 +msgid "many" +msgstr "moltes" + +#: gitk:7309 +msgid "Tags:" +msgstr "Etiquetes:" + +#: gitk:7326 gitk:7332 gitk:8806 +msgid "Parent" +msgstr "Mare" + +#: gitk:7337 +msgid "Child" +msgstr "Filla" + +#: gitk:7346 +msgid "Branch" +msgstr "Branca" + +#: gitk:7349 +msgid "Follows" +msgstr "Segueix" + +#: gitk:7352 +msgid "Precedes" +msgstr "Precedeix" + +#: gitk:7947 +#, tcl-format +msgid "Error getting diffs: %s" +msgstr "Error en obtenir les diferències: %s" + +#: gitk:8631 +msgid "Goto:" +msgstr "Vés a:" + +#: gitk:8652 +#, tcl-format +msgid "Short SHA1 id %s is ambiguous" +msgstr "L'id SHA1 curta %s és ambigua" + +#: gitk:8659 +#, tcl-format +msgid "Revision %s is not known" +msgstr "La revisió %s és desconeguda" + +#: gitk:8669 +#, tcl-format +msgid "SHA1 id %s is not known" +msgstr "L'id SHA1 %s és desconeguda" + +#: gitk:8671 +#, tcl-format +msgid "Revision %s is not in the current view" +msgstr "La revisió %s no és en la vista actual" + +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Data" + +#: gitk:8816 +msgid "Children" +msgstr "Filles" + +#: gitk:8879 +#, tcl-format +msgid "Reset %s branch to here" +msgstr "Restableix la branca %s aquí" + +#: gitk:8881 +msgid "Detached head: can't reset" +msgstr "Cap separat: no es pot restablir" + +#: gitk:8986 gitk:8992 +msgid "Skipping merge commit " +msgstr "Saltant la comissió de fusió " + +#: gitk:9001 gitk:9006 +msgid "Error getting patch ID for " +msgstr "Error en obtenir l'ID de pedaç de " + +#: gitk:9002 gitk:9007 +msgid " - stopping\n" +msgstr " - aturant\n" + +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 +msgid "Commit " +msgstr "Comissió " + +#: gitk:9016 +msgid "" +" is the same patch as\n" +" " +msgstr "" +" és el mateix pedaç que\n" +" " + +#: gitk:9024 +msgid "" +" differs from\n" +" " +msgstr "" +" difereix de\n" +" " + +#: gitk:9026 +msgid "" +"Diff of commits:\n" +"\n" +msgstr "" +"Diferència entre comissions:\n" +"\n" + +#: gitk:9038 gitk:9047 +#, tcl-format +msgid " has %s children - stopping\n" +msgstr " té %s filles - aturant\n" + +#: gitk:9066 +#, tcl-format +msgid "Error writing commit to file: %s" +msgstr "Error en escriure la comissió al fitxer: %s" + +#: gitk:9072 +#, tcl-format +msgid "Error diffing commits: %s" +msgstr "Error en diferenciar les comissions: %s" + +#: gitk:9118 +msgid "Top" +msgstr "Part superior" + +#: gitk:9119 +msgid "From" +msgstr "De" + +#: gitk:9124 +msgid "To" +msgstr "A" + +#: gitk:9148 +msgid "Generate patch" +msgstr "Genera pedaç" + +#: gitk:9150 +msgid "From:" +msgstr "De:" + +#: gitk:9159 +msgid "To:" +msgstr "A:" + +#: gitk:9168 +msgid "Reverse" +msgstr "Inverteix" + +#: gitk:9170 gitk:9366 +msgid "Output file:" +msgstr "Fitxer de sortida:" + +#: gitk:9176 +msgid "Generate" +msgstr "Genera" + +#: gitk:9214 +msgid "Error creating patch:" +msgstr "Error en crear el pedaç:" + +#: gitk:9237 gitk:9354 gitk:9411 +msgid "ID:" +msgstr "ID:" + +#: gitk:9246 +msgid "Tag name:" +msgstr "Nom d'etiqueta:" + +#: gitk:9249 +msgid "Tag message is optional" +msgstr "El missatge d'etiqueta és opcional" + +#: gitk:9251 +msgid "Tag message:" +msgstr "Missatge d'etiqueta:" + +#: gitk:9255 gitk:9420 +msgid "Create" +msgstr "Crea" + +#: gitk:9273 +msgid "No tag name specified" +msgstr "No s'ha especificat cap nom d'etiqueta" + +#: gitk:9277 +#, tcl-format +msgid "Tag \"%s\" already exists" +msgstr "L'etiqueta \"%s\" ja existeix" + +#: gitk:9287 +msgid "Error creating tag:" +msgstr "Error en crear l'etiqueta:" + +#: gitk:9363 +msgid "Command:" +msgstr "Ordre:" + +#: gitk:9371 +msgid "Write" +msgstr "Escriu" + +#: gitk:9389 +msgid "Error writing commit:" +msgstr "Error en escriure la comissió:" + +#: gitk:9416 +msgid "Name:" +msgstr "Nom:" + +#: gitk:9439 +msgid "Please specify a name for the new branch" +msgstr "Si us plau, especifiqueu un nom per a la branca nova" + +#: gitk:9444 +#, tcl-format +msgid "Branch '%s' already exists. Overwrite?" +msgstr "La branca '%s' ja existeix. Voleu sobreescriure?" + +#: gitk:9511 +#, tcl-format +msgid "Commit %s is already included in branch %s -- really re-apply it?" +msgstr "" +"La comissió %s ja està inclosa en la branca %s -- realment voleu tornar a " +"aplicar-la?" + +#: gitk:9516 +msgid "Cherry-picking" +msgstr "Recollint cireres" + +#: gitk:9525 +#, 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 "" +"El recull de cireres ha fallat a causa de canvis locals al fitxer '%s'.\n" +"Si us plau, cometeu, restabliu o emmagatzemeu els vostres canvis i torneu a " +"intentar." + +#: gitk:9531 +msgid "" +"Cherry-pick failed because of merge conflict.\n" +"Do you wish to run git citool to resolve it?" +msgstr "" +"El recull de cireres ha fallat a causa d'un conflicte de fusió.\n" +"Voleu executar el git citool per a resoldre'l?" + +#: gitk:9547 gitk:9605 +msgid "No changes committed" +msgstr "Cap canvi comès" + +#: gitk:9574 +#, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "" +"La comissió %s no s'inclou en la branca %s -- realment voleu revertir-la?" + +#: gitk:9579 +msgid "Reverting" +msgstr "Revertint" + +#: gitk:9587 +#, 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 reversió ha fallat a causa de canvis locals als fitxers següents:%s Si us " +"plau, cometeu, restabliu o emmagatzemeu els vostres canvis i torneu-ho a " +"intentar." + +#: gitk:9591 +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" +"La reversió ha fallat a causa d'un conflicte de fusió.\n" +" Voleu executar el git citool per a resoldre'l?" + +#: gitk:9634 +msgid "Confirm reset" +msgstr "Confirma el restabliment" + +#: gitk:9636 +#, tcl-format +msgid "Reset branch %s to %s?" +msgstr "Voleu restablir la branca %s a %s?" + +#: gitk:9638 +msgid "Reset type:" +msgstr "Tipus de restabliment:" + +#: gitk:9641 +msgid "Soft: Leave working tree and index untouched" +msgstr "Suau: Deixa l'arbre de treball i l'índex sense tocar" + +#: gitk:9644 +msgid "Mixed: Leave working tree untouched, reset index" +msgstr "Mixt: Deixa l'arbre de treball sense tocar, restableix l'índex" + +#: gitk:9647 +msgid "" +"Hard: Reset working tree and index\n" +"(discard ALL local changes)" +msgstr "" +"Dur: Restableix l'arbre de treball i l'índex\n" +"(descarta TOTS els canvis locals)" + +#: gitk:9664 +msgid "Resetting" +msgstr "Restablint" + +#: gitk:9724 +msgid "Checking out" +msgstr "Agafant" + +#: gitk:9777 +msgid "Cannot delete the currently checked-out branch" +msgstr "No es pot suprimir la branca actualment agafada" + +#: gitk:9783 +#, tcl-format +msgid "" +"The commits on branch %s aren't on any other branch.\n" +"Really delete branch %s?" +msgstr "" +"Les comissions en la branca %s no són en cap altra branca.\n" +"Realment voleu suprimir la branca %s?" + +#: gitk:9814 +#, tcl-format +msgid "Tags and heads: %s" +msgstr "Etiquetes i caps: %s" + +#: gitk:9829 +msgid "Filter" +msgstr "Filtre" + +#: gitk:10125 +msgid "" +"Error reading commit topology information; branch and preceding/following " +"tag information will be incomplete." +msgstr "" +"Error en llegir la informació de topologia de comissió; la informació sobre " +"branques i etiquetes precedents/següents serà incompleta." + +#: gitk:11102 +msgid "Tag" +msgstr "Etiqueta" + +#: gitk:11106 +msgid "Id" +msgstr "Id" + +#: gitk:11189 +msgid "Gitk font chooser" +msgstr "Selector de tipus de lletra del Gitk" + +#: gitk:11206 +msgid "B" +msgstr "B" + +#: gitk:11209 +msgid "I" +msgstr "I" + +#: gitk:11327 +msgid "Commit list display options" +msgstr "Opcions de visualització de la llista de comissions" + +#: gitk:11330 +msgid "Maximum graph width (lines)" +msgstr "Amplada màxima del gràfic (línies)" + +#: gitk:11334 +#, no-tcl-format +msgid "Maximum graph width (% of pane)" +msgstr "Amplada màxima del gràfic (% del panell)" + +#: gitk:11337 +msgid "Show local changes" +msgstr "Mostra els canvis locals" + +#: gitk:11340 +msgid "Auto-select SHA1 (length)" +msgstr "Selecciona automàticament l'SHA1 (longitud)" + +#: gitk:11344 +msgid "Hide remote refs" +msgstr "Amaga les referències remotes" + +#: gitk:11348 +msgid "Diff display options" +msgstr "Opcions de visualització de diferència" + +#: gitk:11350 +msgid "Tab spacing" +msgstr "Espaiat de tabulació" + +#: gitk:11353 +msgid "Display nearby tags/heads" +msgstr "Mostra etiquetes/caps propers" + +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "Nombre màxim d'etiquetes/caps a mostrar" + +#: gitk:11359 +msgid "Limit diffs to listed paths" +msgstr "Limita les diferències als camins llistats" + +#: gitk:11362 +msgid "Support per-file encodings" +msgstr "Admet codificacions específiques per a cada fitxer" + +#: gitk:11368 gitk:11515 +msgid "External diff tool" +msgstr "Eina de diferència externa" + +#: gitk:11369 +msgid "Choose..." +msgstr "Trieu..." + +#: gitk:11374 +msgid "General options" +msgstr "Opcions generals" + +#: gitk:11377 +msgid "Use themed widgets" +msgstr "Usa els ginys tematitzats" + +#: gitk:11379 +msgid "(change requires restart)" +msgstr "(el canvi requereix reiniciar)" + +#: gitk:11381 +msgid "(currently unavailable)" +msgstr "(actualment no disponible)" + +#: gitk:11392 +msgid "Colors: press to choose" +msgstr "Colors: pressiona per a triar" + +#: gitk:11395 +msgid "Interface" +msgstr "Interfície" + +#: gitk:11396 +msgid "interface" +msgstr "interfície" + +#: gitk:11399 +msgid "Background" +msgstr "Fons" + +#: gitk:11400 gitk:11430 +msgid "background" +msgstr "fons" + +#: gitk:11403 +msgid "Foreground" +msgstr "Primer pla" + +#: gitk:11404 +msgid "foreground" +msgstr "primer pla" + +#: gitk:11407 +msgid "Diff: old lines" +msgstr "Diferència: línies velles" + +#: gitk:11408 +msgid "diff old lines" +msgstr "diferencia les línies velles" + +#: gitk:11412 +msgid "Diff: new lines" +msgstr "Diferència: línies noves" + +#: gitk:11413 +msgid "diff new lines" +msgstr "diferencia les línies noves" + +#: gitk:11417 +msgid "Diff: hunk header" +msgstr "Diferència: capçalera de tros" + +#: gitk:11419 +msgid "diff hunk header" +msgstr "diferencia la capçalera de tros" + +#: gitk:11423 +msgid "Marked line bg" +msgstr "Fons de la línia marcada" + +#: gitk:11425 +msgid "marked line background" +msgstr "fons de la línia marcada" + +#: gitk:11429 +msgid "Select bg" +msgstr "fons de la selecció" + +#: gitk:11438 +msgid "Fonts: press to choose" +msgstr "Tipus de lletra: pressiona per a triar" + +#: gitk:11440 +msgid "Main font" +msgstr "Tipus de lletra principal" + +#: gitk:11441 +msgid "Diff display font" +msgstr "Tipus de lletra de visualització de diferència" + +#: gitk:11442 +msgid "User interface font" +msgstr "Tipus de lletra de la interfície d'usuari" + +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Preferències del Gitk" + +#: gitk:11473 +msgid "General" +msgstr "General" + +#: gitk:11474 +msgid "Colors" +msgstr "Colors" + +#: gitk:11475 +msgid "Fonts" +msgstr "Tipus de lletra" + +#: gitk:11525 +#, tcl-format +msgid "Gitk: choose color for %s" +msgstr "Gitk: tria el color per a %s" + +#: gitk:12242 +msgid "Cannot find a git repository here." +msgstr "No es pot trobar cap dipòsit de git aquí." + +#: gitk:12289 +#, tcl-format +msgid "Ambiguous argument '%s': both revision and filename" +msgstr "Paràmetre ambigu '%s': és tant revisió com nom de fitxer" + +#: gitk:12301 +msgid "Bad arguments to gitk:" +msgstr "Paràmetres dolents al gitk:" + +#: gitk:12405 +msgid "Command line" +msgstr "Línia d'ordres" diff --git a/gitk-git/po/de.po b/gitk-git/po/de.po index bd194a3dff..dabd4eefb5 100644 --- a/gitk-git/po/de.po +++ b/gitk-git/po/de.po @@ -8,33 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-27 20:21+0100\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2010-01-27 20:27+0100\n" "Last-Translator: Christian Stimming <stimming@tuhh.de>\n" "Language-Team: German\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: gitk:115 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "Liste der nicht zusammengeführten Dateien nicht gefunden:" -#: gitk:274 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 msgid "Error parsing revisions:" msgstr "Fehler beim Laden der Versionen:" -#: gitk:329 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Fehler beim Ausführen des --argscmd-Kommandos:" -#: gitk:342 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Keine Dateien ausgewählt: Es wurde --merge angegeben, aber es existieren " "keine nicht zusammengeführten Dateien." -#: gitk:345 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -42,299 +51,315 @@ msgstr "" "Keine Dateien ausgewählt: Es wurde --merge angegeben, aber es sind keine " "nicht zusammengeführten Dateien in der Dateiauswahl." -#: gitk:367 gitk:514 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Fehler beim Ausführen von »git log«:" -#: gitk:385 gitk:530 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Lesen" -#: gitk:445 gitk:4261 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Versionen werden gelesen ..." -#: gitk:448 gitk:1578 gitk:4264 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Keine Versionen ausgewählt" -#: gitk:1454 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Ausgabe von »git log« kann nicht erkannt werden:" -#: gitk:1674 +#: gitk:1740 msgid "No commit information available" msgstr "Keine Versionsinformation verfügbar" -#: gitk:1816 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1851 gitk:4054 gitk:9044 gitk:10585 gitk:10804 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "Ok" -#: gitk:1853 gitk:4056 gitk:8634 gitk:8713 gitk:8828 gitk:8877 gitk:9046 -#: gitk:10586 gitk:10805 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Abbrechen" -#: gitk:1975 +#: gitk:2069 msgid "Update" msgstr "Aktualisieren" -#: gitk:1976 +#: gitk:2070 msgid "Reload" msgstr "Neu laden" -#: gitk:1977 +#: gitk:2071 msgid "Reread references" msgstr "Zweige neu laden" -#: gitk:1978 +#: gitk:2072 msgid "List references" msgstr "Zweige/Markierungen auflisten" -#: gitk:1980 +#: gitk:2074 msgid "Start git gui" msgstr "»git gui« starten" -#: gitk:1982 +#: gitk:2076 msgid "Quit" msgstr "Beenden" -#: gitk:1974 +#: gitk:2068 msgid "File" msgstr "Datei" -#: gitk:1986 +#: gitk:2080 msgid "Preferences" msgstr "Einstellungen" -#: gitk:1985 +#: gitk:2079 msgid "Edit" msgstr "Bearbeiten" -#: gitk:1990 +#: gitk:2084 msgid "New view..." msgstr "Neue Ansicht ..." -#: gitk:1991 +#: gitk:2085 msgid "Edit view..." msgstr "Ansicht bearbeiten ..." -#: gitk:1992 +#: gitk:2086 msgid "Delete view" msgstr "Ansicht entfernen" -#: gitk:1994 +#: gitk:2088 msgid "All files" msgstr "Alle Dateien" -#: gitk:1989 gitk:3808 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Ansicht" -#: gitk:1999 gitk:2009 gitk:2780 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Über gitk" -#: gitk:2000 gitk:2014 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Tastenkürzel" -#: gitk:1998 gitk:2013 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Hilfe" -#: gitk:2091 gitk:8110 +#: gitk:2185 gitk:8633 msgid "SHA1 ID:" msgstr "SHA1 ID:" -#: gitk:2122 +#: gitk:2229 msgid "Row" msgstr "Zeile" -#: gitk:2160 +#: gitk:2267 msgid "Find" msgstr "Suche" -#: gitk:2161 -msgid "next" -msgstr "nächste" - -#: gitk:2162 -msgid "prev" -msgstr "vorige" - -#: gitk:2163 +#: gitk:2295 msgid "commit" msgstr "Version nach" -#: gitk:2166 gitk:2168 gitk:4422 gitk:4445 gitk:4469 gitk:6410 gitk:6482 -#: gitk:6566 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "Beschreibung:" -#: gitk:2169 gitk:3290 gitk:3295 gitk:4497 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "Dateien:" -#: gitk:2170 gitk:4502 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "Änderungen:" -#: gitk:2179 gitk:2181 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Exakt" -#: gitk:2181 gitk:4577 gitk:6378 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "Kein Groß/Klein" -#: gitk:2181 gitk:4471 gitk:4575 gitk:6374 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Regexp" -#: gitk:2183 gitk:2184 gitk:4596 gitk:4626 gitk:4633 gitk:6502 gitk:6570 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Alle Felder" -#: gitk:2184 gitk:4594 gitk:4626 gitk:6441 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Überschrift" -#: gitk:2185 gitk:4594 gitk:6441 gitk:6570 gitk:7003 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Beschreibung" -#: gitk:2185 gitk:4594 gitk:4598 gitk:4633 gitk:6441 gitk:6938 gitk:8285 -#: gitk:8300 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Autor" -#: gitk:2185 gitk:4594 gitk:6441 gitk:6940 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Eintragender" -#: gitk:2216 +#: gitk:2350 msgid "Search" msgstr "Suchen" -#: gitk:2224 +#: gitk:2358 msgid "Diff" msgstr "Vergleich" -#: gitk:2226 +#: gitk:2360 msgid "Old version" msgstr "Alte Version" -#: gitk:2228 +#: gitk:2362 msgid "New version" msgstr "Neue Version" -#: gitk:2230 +#: gitk:2364 msgid "Lines of context" msgstr "Kontextzeilen" -#: gitk:2240 +#: gitk:2374 msgid "Ignore space change" msgstr "Leerzeichenänderungen ignorieren" -#: gitk:2299 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Patch" -#: gitk:2301 +#: gitk:2447 msgid "Tree" msgstr "Baum" -#: gitk:2456 gitk:2473 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Vergleich: diese -> gewählte" -#: gitk:2457 gitk:2474 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Vergleich: gewählte -> diese" -#: gitk:2458 gitk:2475 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Patch erstellen" -#: gitk:2459 gitk:8692 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Markierung erstellen" -#: gitk:2460 gitk:8808 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Version in Datei schreiben" -#: gitk:2461 gitk:8865 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Neuen Zweig erstellen" -#: gitk:2462 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Diese Version pflücken" -#: gitk:2463 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "HEAD-Zweig auf diese Version zurücksetzen" -#: gitk:2464 +#: gitk:2624 msgid "Mark this commit" msgstr "Lesezeichen setzen" -#: gitk:2465 +#: gitk:2625 msgid "Return to mark" msgstr "Zum Lesezeichen" -#: gitk:2466 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Abkömmling von Lesezeichen und dieser Version finden" -#: gitk:2467 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Mit Lesezeichen vergleichen" -#: gitk:2481 +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Vergleich: diese -> gewählte" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Vergleich: gewählte -> diese" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Lesezeichen setzen" + +#: gitk:2646 msgid "Check out this branch" msgstr "Auf diesen Zweig umstellen" -#: gitk:2482 +#: gitk:2647 msgid "Remove this branch" msgstr "Zweig löschen" -#: gitk:2489 +#: gitk:2654 msgid "Highlight this too" msgstr "Diesen auch hervorheben" -#: gitk:2490 +#: gitk:2655 msgid "Highlight this only" msgstr "Nur diesen hervorheben" -#: gitk:2491 +#: gitk:2656 msgid "External diff" msgstr "Externes Diff-Programm" -#: gitk:2492 +#: gitk:2657 msgid "Blame parent commit" msgstr "Annotieren der Elternversion" -#: gitk:2499 +#: gitk:2664 msgid "Show origin of this line" msgstr "Herkunft dieser Zeile anzeigen" -#: gitk:2500 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Diese Zeile annotieren (»git gui blame«)" -#: gitk:2782 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -343,500 +368,520 @@ msgstr "" "\n" "Copyright \\u00a9 2005-2010 Paul Mackerras\n" "\n" -"Benutzung und Weiterverbreitung gemäß den Bedingungen der GNU General Public License" +"Benutzung und Weiterverbreitung gemäß den Bedingungen der GNU General Public " +"License" -#: gitk:2790 gitk:2854 gitk:9230 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Schließen" -#: gitk:2811 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Gitk-Tastaturbelegung" -#: gitk:2814 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Gitk-Tastaturbelegung:" -#: gitk:2816 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tBeenden" -#: gitk:2817 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\tSuchen" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Pos1>\t\tZur neuesten Version springen" -#: gitk:2818 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<Ende>\t\tZur ältesten Version springen" -#: gitk:2819 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Hoch>, p, i\tNächste neuere Version" -#: gitk:2820 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Runter>, n, k\tNächste ältere Version" -#: gitk:2821 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Links>, z, j\tEine Version zurückgehen" -#: gitk:2822 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Rechts>, x, l\tEine Version weitergehen" -#: gitk:2823 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<BildHoch>\tEine Seite nach oben blättern" -#: gitk:2824 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<BildRunter>\tEine Seite nach unten blättern" -#: gitk:2825 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Pos1>\tZum oberen Ende der Versionsliste blättern" -#: gitk:2826 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-Ende>\tZum unteren Ende der Versionsliste blättern" -#: gitk:2827 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Hoch>\tVersionsliste eine Zeile nach oben blättern" -#: gitk:2828 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Runter>\tVersionsliste eine Zeile nach unten blättern" -#: gitk:2829 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-BildHoch>\tVersionsliste eine Seite nach oben blättern" -#: gitk:2830 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-BildRunter>\tVersionsliste eine Seite nach unten blättern" -#: gitk:2831 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Umschalt-Hoch>\tRückwärts suchen (nach oben; neuere Versionen)" -#: gitk:2832 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Umschalt-Runter> Suchen (nach unten; ältere Versionen)" -#: gitk:2833 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Entf>, b\t\tVergleich eine Seite nach oben blättern" -#: gitk:2834 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Löschtaste>\tVergleich eine Seite nach oben blättern" -#: gitk:2835 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Leertaste>\tVergleich eine Seite nach unten blättern" -#: gitk:2836 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tVergleich um 18 Zeilen nach oben blättern" -#: gitk:2837 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tVergleich um 18 Zeilen nach unten blättern" -#: gitk:2838 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tSuchen" -#: gitk:2839 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tWeitersuchen" -#: gitk:2840 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Eingabetaste>\tWeitersuchen" -#: gitk:2841 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tTastaturfokus ins Suchfeld" -#: gitk:2842 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tRückwärts weitersuchen" -#: gitk:2843 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tVergleich zur nächsten Datei blättern" -#: gitk:2844 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tWeitersuchen im Vergleich" -#: gitk:2845 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tRückwärts weitersuchen im Vergleich" -#: gitk:2846 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-Nummerblock-Plus>\tSchrift vergrößern" -#: gitk:2847 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-Plus>\tSchrift vergrößern" -#: gitk:2848 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-Nummernblock-Minus> Schrift verkleinern" -#: gitk:2849 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-Minus>\tSchrift verkleinern" -#: gitk:2850 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tAktualisieren" -#: gitk:3305 gitk:3314 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Fehler beim Erzeugen des temporären Verzeichnisses »%s«:" -#: gitk:3327 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Fehler beim Holen von »%s« von »%s«:" -#: gitk:3390 +#: gitk:3631 msgid "command failed:" msgstr "Kommando fehlgeschlagen:" -#: gitk:3539 +#: gitk:3780 msgid "No such commit" msgstr "Version nicht gefunden" -#: gitk:3553 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: Kommando fehlgeschlagen:" -#: gitk:3584 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Zusammenführungs-Spitze konnte nicht gelesen werden: %s" -#: gitk:3592 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Fehler beim Lesen der Bereitstellung (»index«): %s" -#: gitk:3617 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "»git blame« konnte nicht gestartet werden: %s" -#: gitk:3620 gitk:6409 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Suchen" -#: gitk:3652 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Fehler beim Ausführen von »git blame«: %s" -#: gitk:3680 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "" "Diese Zeile stammt aus Version %s, die nicht in dieser Ansicht gezeigt wird" -#: gitk:3694 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Externes Diff-Programm fehlgeschlagen:" -#: gitk:3812 +#: gitk:4053 msgid "Gitk view definition" msgstr "Gitk-Ansichten" -#: gitk:3816 +#: gitk:4057 msgid "Remember this view" msgstr "Diese Ansicht speichern" -#: gitk:3817 +#: gitk:4058 msgid "References (space separated list):" msgstr "Zweige/Markierungen (durch Leerzeichen getrennte Liste):" -#: gitk:3818 +#: gitk:4059 msgid "Branches & tags:" msgstr "Zweige/Markierungen:" -#: gitk:3819 +#: gitk:4060 msgid "All refs" msgstr "Alle Markierungen und Zweige" -#: gitk:3820 +#: gitk:4061 msgid "All (local) branches" msgstr "Alle (lokalen) Zweige" -#: gitk:3821 +#: gitk:4062 msgid "All tags" msgstr "Alle Markierungen" -#: gitk:3822 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Alle Übernahmezweige" -#: gitk:3823 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Versionsinformationen (reguläre Ausdrücke):" -#: gitk:3824 +#: gitk:4065 msgid "Author:" msgstr "Autor:" -#: gitk:3825 +#: gitk:4066 msgid "Committer:" msgstr "Eintragender:" -#: gitk:3826 +#: gitk:4067 msgid "Commit Message:" msgstr "Versionsbeschreibung:" -#: gitk:3827 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Alle Versionsinformationen-Kriterien erfüllen" -#: gitk:3828 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Alle Versionsinformationen-Kriterien erfüllen" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Dateien:" -#: gitk:3829 +#: gitk:4071 msgid "Fixed String" msgstr "Zeichenkette" -#: gitk:3830 +#: gitk:4072 msgid "Regular Expression" msgstr "Regulärer Ausdruck" -#: gitk:3831 +#: gitk:4073 msgid "Search string:" msgstr "Suchausdruck:" -#: gitk:3832 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -msgstr "Datum (»2 weeks ago«, »2009-03-17 15:27:38«, »March 17, 2009 15:27:38«)" +msgstr "" +"Datum (»2 weeks ago«, »2009-03-17 15:27:38«, »March 17, 2009 15:27:38«)" -#: gitk:3833 +#: gitk:4075 msgid "Since:" msgstr "Von:" -#: gitk:3834 +#: gitk:4076 msgid "Until:" msgstr "Bis:" -#: gitk:3835 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Versionsanzahl begrenzen oder einige überspringen (ganzzahliger Wert):" -#: gitk:3836 +#: gitk:4078 msgid "Number to show:" msgstr "Anzeigen:" -#: gitk:3837 +#: gitk:4079 msgid "Number to skip:" msgstr "Überspringen:" -#: gitk:3838 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Sonstiges:" -#: gitk:3839 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Streng nach Datum sortieren" -#: gitk:3840 +#: gitk:4082 msgid "Mark branch sides" msgstr "Zweig-Seiten markieren" -#: gitk:3841 +#: gitk:4083 msgid "Limit to first parent" msgstr "Auf erste Elternversion beschränken" -#: gitk:3842 +#: gitk:4084 msgid "Simple history" msgstr "Einfache Historie" -#: gitk:3843 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Zusätzliche Argumente für »git log«:" -#: gitk:3844 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Folgende Dateien und Verzeichnisse anzeigen (eine pro Zeile):" -#: gitk:3845 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Versionsliste durch folgendes Kommando erzeugen lassen:" -#: gitk:3967 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: Ansicht bearbeiten" -#: gitk:3975 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "-- Auswahl der angezeigten Versionen" -#: gitk:3980 +#: gitk:4224 msgid "View Name" msgstr "Ansichtsname" -#: gitk:4055 +#: gitk:4299 msgid "Apply (F5)" msgstr "Anwenden (F5)" -#: gitk:4093 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Fehler in den ausgewählten Versionen:" -#: gitk:4146 gitk:4198 gitk:4646 gitk:4660 gitk:5921 gitk:11534 gitk:11535 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Keine" -#: gitk:4594 gitk:6441 gitk:8287 gitk:8302 -msgid "Date" -msgstr "Datum" - -#: gitk:4594 gitk:6441 -msgid "CDate" -msgstr "Eintragedatum" - -#: gitk:4743 gitk:4748 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Abkömmling" -#: gitk:4744 +#: gitk:5004 msgid "Not descendant" msgstr "Kein Abkömmling" -#: gitk:4751 gitk:4756 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Vorgänger" -#: gitk:4752 +#: gitk:5012 msgid "Not ancestor" msgstr "Kein Vorgänger" -#: gitk:5042 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Lokale Änderungen bereitgestellt, aber nicht eingetragen" -#: gitk:5078 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Lokale Änderungen, nicht bereitgestellt" -#: gitk:6759 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 msgid "many" msgstr "viele" -#: gitk:6942 +#: gitk:7309 msgid "Tags:" msgstr "Markierungen:" -#: gitk:6959 gitk:6965 gitk:8280 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Eltern" -#: gitk:6970 +#: gitk:7337 msgid "Child" msgstr "Kind" -#: gitk:6979 +#: gitk:7346 msgid "Branch" msgstr "Zweig" -#: gitk:6982 +#: gitk:7349 msgid "Follows" msgstr "Folgt auf" -#: gitk:6985 +#: gitk:7352 msgid "Precedes" msgstr "Vorgänger von" -#: gitk:7522 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Fehler beim Laden des Vergleichs: %s" -#: gitk:8108 +#: gitk:8631 msgid "Goto:" msgstr "Gehe zu:" -#: gitk:8129 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Kurzer SHA1-Hashwert »%s« ist mehrdeutig" -#: gitk:8136 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "Version »%s« ist unbekannt" -#: gitk:8146 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "SHA1-Hashwert »%s« ist unbekannt" -#: gitk:8148 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "Version »%s« wird in der aktuellen Ansicht nicht angezeigt" -#: gitk:8290 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Datum" + +#: gitk:8816 msgid "Children" msgstr "Kinder" -#: gitk:8348 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Zweig »%s« hierher zurücksetzen" -#: gitk:8350 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Zweigspitze ist abgetrennt: Zurücksetzen nicht möglich" -#: gitk:8459 gitk:8465 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Überspringe Zusammenführungs-Version " -#: gitk:8474 gitk:8479 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Fehler beim Holen der Patch-ID für " -#: gitk:8475 gitk:8480 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - Abbruch.\n" -#: gitk:8485 gitk:8488 gitk:8496 gitk:8510 gitk:8519 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Version " -#: gitk:8489 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -844,7 +889,7 @@ msgstr "" " ist das gleiche Patch wie\n" " " -#: gitk:8497 +#: gitk:9024 msgid "" " differs from\n" " " @@ -852,7 +897,7 @@ msgstr "" " ist unterschiedlich von\n" " " -#: gitk:8499 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -860,130 +905,131 @@ msgstr "" "Vergleich der Versionen:\n" "\n" -#: gitk:8511 gitk:8520 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " hat %s Kinder. Abbruch\n" -#: gitk:8539 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Fehler beim Schreiben der Version in Datei: %s" -#: gitk:8545 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "Fehler beim Vergleichen der Versionen: %s" -#: gitk:8575 +#: gitk:9118 msgid "Top" msgstr "Oben" -#: gitk:8576 +#: gitk:9119 msgid "From" msgstr "Von" -#: gitk:8581 +#: gitk:9124 msgid "To" msgstr "bis" -#: gitk:8605 +#: gitk:9148 msgid "Generate patch" msgstr "Patch erstellen" -#: gitk:8607 +#: gitk:9150 msgid "From:" msgstr "Von:" -#: gitk:8616 +#: gitk:9159 msgid "To:" msgstr "bis:" -#: gitk:8625 +#: gitk:9168 msgid "Reverse" msgstr "Umgekehrt" -#: gitk:8627 gitk:8822 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Ausgabedatei:" -#: gitk:8633 +#: gitk:9176 msgid "Generate" msgstr "Erzeugen" -#: gitk:8671 +#: gitk:9214 msgid "Error creating patch:" msgstr "Fehler beim Erzeugen des Patches:" -#: gitk:8694 gitk:8810 gitk:8867 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:8703 +#: gitk:9246 msgid "Tag name:" msgstr "Markierungsname:" -#: gitk:8706 +#: gitk:9249 msgid "Tag message is optional" msgstr "Eine Markierungsbeschreibung ist optional" -#: gitk:8708 +#: gitk:9251 msgid "Tag message:" msgstr "Markierungsbeschreibung:" -#: gitk:8712 gitk:8876 +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Erstellen" -#: gitk:8730 +#: gitk:9273 msgid "No tag name specified" msgstr "Kein Markierungsname angegeben" -#: gitk:8734 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Markierung »%s« existiert bereits." -#: gitk:8744 +#: gitk:9287 msgid "Error creating tag:" msgstr "Fehler beim Erstellen der Markierung:" -#: gitk:8819 +#: gitk:9363 msgid "Command:" msgstr "Kommando:" -#: gitk:8827 +#: gitk:9371 msgid "Write" msgstr "Schreiben" -#: gitk:8845 +#: gitk:9389 msgid "Error writing commit:" msgstr "Fehler beim Schreiben der Version:" -#: gitk:8872 +#: gitk:9416 msgid "Name:" msgstr "Name:" -#: gitk:8895 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Bitte geben Sie einen Namen für den neuen Zweig an." -#: gitk:8900 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "Zweig »%s« existiert bereits. Soll er überschrieben werden?" -#: gitk:8966 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" -"Version »%s« ist bereits im Zweig »%s« enthalten -- trotzdem erneut eintragen?" +"Version »%s« ist bereits im Zweig »%s« enthalten -- trotzdem erneut " +"eintragen?" -#: gitk:8971 +#: gitk:9516 msgid "Cherry-picking" msgstr "Version pflücken" -#: gitk:8980 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -993,7 +1039,7 @@ msgstr "" "vorliegen. Bitte diese Änderungen eintragen, zurücksetzen oder\n" "zwischenspeichern (»git stash«) und dann erneut versuchen." -#: gitk:8986 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1002,34 +1048,66 @@ msgstr "" "ist. Soll das Zusammenführungs-Werkzeug (»git citool«) aufgerufen\n" "werden, um diesen Konflikt aufzulösen?" -#: gitk:9002 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Keine Änderungen eingetragen" -#: gitk:9028 +#: gitk:9574 +#, fuzzy, 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?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "Zurücksetzen" + +#: gitk:9587 +#, fuzzy, 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" +"vorliegen. Bitte diese Änderungen eintragen, zurücksetzen oder\n" +"zwischenspeichern (»git stash«) und dann erneut versuchen." + +#: gitk:9591 +#, 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" +"ist. Soll das Zusammenführungs-Werkzeug (»git citool«) aufgerufen\n" +"werden, um diesen Konflikt aufzulösen?" + +#: gitk:9634 msgid "Confirm reset" msgstr "Zurücksetzen bestätigen" -#: gitk:9030 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Zweig »%s« auf »%s« zurücksetzen?" -#: gitk:9032 +#: gitk:9638 msgid "Reset type:" msgstr "Art des Zurücksetzens:" -#: gitk:9035 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Harmlos: Arbeitskopie und Bereitstellung unverändert" -#: gitk:9038 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "" "Gemischt: Arbeitskopie unverändert,\n" "Bereitstellung zurückgesetzt" -#: gitk:9041 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1037,21 +1115,21 @@ msgstr "" "Hart: Arbeitskopie und Bereitstellung\n" "(Alle lokalen Änderungen werden gelöscht)" -#: gitk:9058 +#: gitk:9664 msgid "Resetting" msgstr "Zurücksetzen" -#: gitk:9118 +#: gitk:9724 msgid "Checking out" msgstr "Umstellen" -#: gitk:9171 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "" "Der Zweig, auf den die Arbeitskopie momentan umgestellt ist, kann nicht " "gelöscht werden." -#: gitk:9177 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1060,16 +1138,16 @@ msgstr "" "Die Versionen auf Zweig »%s« existieren auf keinem anderen Zweig.\n" "Zweig »%s« trotzdem löschen?" -#: gitk:9208 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Markierungen und Zweige: %s" -#: gitk:9223 +#: gitk:9829 msgid "Filter" msgstr "Filtern" -#: gitk:9518 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1077,202 +1155,228 @@ msgstr "" "Fehler beim Lesen der Strukturinformationen; Zweige und Informationen zu " "Vorgänger/Nachfolger werden unvollständig sein." -#: gitk:10504 +#: gitk:11102 msgid "Tag" msgstr "Markierung" -#: gitk:10504 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:10554 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Gitk-Schriften wählen" -#: gitk:10571 +#: gitk:11206 msgid "B" msgstr "F" -#: gitk:10574 +#: gitk:11209 msgid "I" msgstr "K" -#: gitk:10692 -msgid "Gitk preferences" -msgstr "Gitk-Einstellungen" - -#: gitk:10694 +#: gitk:11327 msgid "Commit list display options" msgstr "Anzeige der Versionsliste" -#: gitk:10697 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Maximale Graphenbreite (Zeilen)" -#: gitk:10700 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Maximale Graphenbreite (% des Fensters)" -#: gitk:10703 +#: gitk:11337 msgid "Show local changes" msgstr "Lokale Änderungen anzeigen" -#: gitk:10706 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "SHA1-Hashwert automatisch auswählen" -#: gitk:10709 +#: gitk:11344 msgid "Hide remote refs" msgstr "Entfernte Zweige/Markierungen ausblenden" -#: gitk:10713 +#: gitk:11348 msgid "Diff display options" msgstr "Anzeige des Vergleichs" -#: gitk:10715 +#: gitk:11350 msgid "Tab spacing" msgstr "Tabulatorbreite" -#: gitk:10718 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Naheliegende Markierungen anzeigen" -#: gitk:10721 +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" + +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Vergleich nur für angezeigte Pfade" -#: gitk:10724 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Zeichenkodierung pro Datei ermitteln" -#: gitk:10730 gitk:10819 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Externes Diff-Programm" -#: gitk:10731 +#: gitk:11369 msgid "Choose..." msgstr "Wählen ..." -#: gitk:10736 +#: gitk:11374 msgid "General options" msgstr "Allgemeine Optionen" -#: gitk:10739 +#: gitk:11377 msgid "Use themed widgets" msgstr "Aussehen der Benutzeroberfläche durch Thema bestimmen" -#: gitk:10741 +#: gitk:11379 msgid "(change requires restart)" msgstr "(Änderungen werden erst nach Neustart wirksam)" -#: gitk:10743 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(Momentan nicht verfügbar)" -#: gitk:10747 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Farben: Klicken zum Wählen" -#: gitk:10750 +#: gitk:11395 msgid "Interface" msgstr "Benutzeroberfläche" -#: gitk:10751 +#: gitk:11396 msgid "interface" msgstr "Benutzeroberfläche" -#: gitk:10754 +#: gitk:11399 msgid "Background" msgstr "Hintergrund" -#: gitk:10755 gitk:10785 +#: gitk:11400 gitk:11430 msgid "background" msgstr "Hintergrund" -#: gitk:10758 +#: gitk:11403 msgid "Foreground" msgstr "Vordergrund" -#: gitk:10759 +#: gitk:11404 msgid "foreground" msgstr "Vordergrund" -#: gitk:10762 +#: gitk:11407 msgid "Diff: old lines" msgstr "Vergleich: Alte Zeilen" -#: gitk:10763 +#: gitk:11408 msgid "diff old lines" msgstr "Vergleich - Alte Zeilen" -#: gitk:10767 +#: gitk:11412 msgid "Diff: new lines" msgstr "Vergleich: Neue Zeilen" -#: gitk:10768 +#: gitk:11413 msgid "diff new lines" msgstr "Vergleich - Neue Zeilen" -#: gitk:10772 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Vergleich: Änderungstitel" -#: gitk:10774 +#: gitk:11419 msgid "diff hunk header" msgstr "Vergleich - Änderungstitel" -#: gitk:10778 +#: gitk:11423 msgid "Marked line bg" msgstr "Hintergrund für markierte Zeile" -#: gitk:10780 +#: gitk:11425 msgid "marked line background" msgstr "Hintergrund für markierte Zeile" -#: gitk:10784 +#: gitk:11429 msgid "Select bg" msgstr "Hintergrundfarbe auswählen" -#: gitk:10788 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Schriftart: Klicken zum Wählen" -#: gitk:10790 +#: gitk:11440 msgid "Main font" msgstr "Programmschriftart" -#: gitk:10791 +#: gitk:11441 msgid "Diff display font" msgstr "Schriftart für Vergleich" -#: gitk:10792 +#: gitk:11442 msgid "User interface font" msgstr "Beschriftungen" -#: gitk:10829 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Gitk-Einstellungen" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Erzeugen" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: Farbe wählen für %s" -#: gitk:11433 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Kein Git-Projektarchiv gefunden." -#: gitk:11437 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "Git-Verzeichnis »%s« wurde nicht gefunden." - -#: gitk:11484 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Mehrdeutige Angabe »%s«: Sowohl Version als auch Dateiname existiert." -#: gitk:11496 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Falsche Kommandozeilen-Parameter für gitk:" -#: gitk:11587 +#: gitk:12405 msgid "Command line" msgstr "Kommandozeile" + +#~ msgid "next" +#~ msgstr "nächste" + +#~ msgid "prev" +#~ msgstr "vorige" + +#~ msgid "CDate" +#~ msgstr "Eintragedatum" + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "Git-Verzeichnis »%s« wurde nicht gefunden." diff --git a/gitk-git/po/es.po b/gitk-git/po/es.po index 0471dd0672..cfc10e13ea 100644 --- a/gitk-git/po/es.po +++ b/gitk-git/po/es.po @@ -8,25 +8,43 @@ msgid "" msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-10-18 22:03+1100\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2008-03-25 11:20+0100\n" "Last-Translator: Santiago Gala <santiago.gala@gmail.com>\n" "Language-Team: Spanish\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: gitk:113 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "Imposible obtener la lista de archivos pendientes de fusión:" -#: gitk:340 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 +#, fuzzy +msgid "Error parsing revisions:" +msgstr "Error al leer las diferencias de fusión:" + +#: gitk:380 +msgid "Error executing --argscmd command:" +msgstr "" + +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "No hay archivos seleccionados: se seleccionó la opción --merge pero no hay " "archivos pendientes de fusión." -#: gitk:343 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -34,254 +52,317 @@ msgstr "" "No hay archivos seleccionados: se seleccionó la opción --merge pero los " "archivos especificados no necesitan fusión." -#: gitk:378 +#: gitk:418 gitk:566 +#, fuzzy +msgid "Error executing git log:" +msgstr "Error al crear la etiqueta:" + +#: gitk:436 gitk:582 msgid "Reading" msgstr "Leyendo" -#: gitk:438 gitk:3462 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Leyendo revisiones..." -#: gitk:441 gitk:1528 gitk:3465 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "No se seleccionaron revisiones" -#: gitk:1399 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Error analizando la salida de git log:" -#: gitk:1605 +#: gitk:1740 msgid "No commit information available" msgstr "Falta información sobre las revisiones" -#: gitk:1709 gitk:1731 gitk:3259 gitk:7764 gitk:9293 gitk:9466 +#: gitk:1897 +msgid "mc" +msgstr "" + +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "Aceptar" -#: gitk:1733 gitk:3260 gitk:7439 gitk:7510 gitk:7613 gitk:7660 gitk:7766 -#: gitk:9294 gitk:9467 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Cancelar" -#: gitk:1811 +#: gitk:2069 msgid "Update" msgstr "Actualizar" -#: gitk:1813 +#: gitk:2070 +msgid "Reload" +msgstr "" + +#: gitk:2071 msgid "Reread references" msgstr "Releer referencias" -#: gitk:1814 +#: gitk:2072 msgid "List references" msgstr "Lista de referencias" -#: gitk:1815 +#: gitk:2074 +msgid "Start git gui" +msgstr "" + +#: gitk:2076 msgid "Quit" msgstr "Salir" -#: gitk:1810 +#: gitk:2068 msgid "File" msgstr "Archivo" -#: gitk:1818 +#: gitk:2080 msgid "Preferences" msgstr "Preferencias" -#: gitk:1817 +#: gitk:2079 msgid "Edit" msgstr "Editar" -#: gitk:1821 +#: gitk:2084 msgid "New view..." msgstr "Nueva vista..." -#: gitk:1822 +#: gitk:2085 msgid "Edit view..." msgstr "Modificar vista..." -#: gitk:1823 +#: gitk:2086 msgid "Delete view" msgstr "Eliminar vista" -#: gitk:1825 +#: gitk:2088 msgid "All files" msgstr "Todos los archivos" -#: gitk:1820 gitk:3196 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Vista" -#: gitk:1828 gitk:2487 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Acerca de gitk" -#: gitk:1829 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Combinaciones de teclas" -#: gitk:1827 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Ayuda" -#: gitk:1887 -msgid "SHA1 ID: " -msgstr "SHA1 ID: " +#: gitk:2185 gitk:8633 +msgid "SHA1 ID:" +msgstr "SHA1 ID:" -#: gitk:1918 +#: gitk:2229 msgid "Row" msgstr "" -#: gitk:1949 +#: gitk:2267 msgid "Find" msgstr "Buscar" -#: gitk:1950 -msgid "next" -msgstr "<<" - -#: gitk:1951 -msgid "prev" -msgstr ">>" - -#: gitk:1952 +#: gitk:2295 msgid "commit" msgstr "revisión" -#: gitk:1955 gitk:1957 gitk:3617 gitk:3640 gitk:3664 gitk:5550 gitk:5621 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "que contiene:" -#: gitk:1958 gitk:2954 gitk:2959 gitk:3692 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "que modifica la ruta:" -#: gitk:1959 gitk:3697 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "que añade/elimina cadena:" -#: gitk:1968 gitk:1970 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Exacto" -#: gitk:1970 gitk:3773 gitk:5518 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "NoMayús" -#: gitk:1970 gitk:3666 gitk:3771 gitk:5514 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Regex" -#: gitk:1972 gitk:1973 gitk:3792 gitk:3822 gitk:3829 gitk:5641 gitk:5708 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Todos los campos" -#: gitk:1973 gitk:3790 gitk:3822 gitk:5580 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Título" -#: gitk:1974 gitk:3790 gitk:5580 gitk:5708 gitk:6109 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Comentarios" -#: gitk:1974 gitk:3790 gitk:3794 gitk:3829 gitk:5580 gitk:6045 gitk:7285 -#: gitk:7300 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Autor" -#: gitk:1974 gitk:3790 gitk:5580 gitk:6047 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "" -#: gitk:2003 +#: gitk:2350 msgid "Search" msgstr "Buscar" -#: gitk:2010 +#: gitk:2358 msgid "Diff" msgstr "Diferencia" -#: gitk:2012 +#: gitk:2360 msgid "Old version" msgstr "Versión antigua" -#: gitk:2014 +#: gitk:2362 msgid "New version" msgstr "Versión nueva" -#: gitk:2016 +#: gitk:2364 msgid "Lines of context" msgstr "Líneas de contexto" -#: gitk:2026 +#: gitk:2374 msgid "Ignore space change" msgstr "Ignora cambios de espaciado" -#: gitk:2084 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Parche" -#: gitk:2086 +#: gitk:2447 msgid "Tree" msgstr "Árbol" -#: gitk:2213 gitk:2226 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Diferencia de esta -> seleccionada" -#: gitk:2214 gitk:2227 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Diferencia de seleccionada -> esta" -#: gitk:2215 gitk:2228 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Crear patch" -#: gitk:2216 gitk:7494 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Crear etiqueta" -#: gitk:2217 gitk:7593 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Escribir revisiones a archivo" -#: gitk:2218 gitk:7647 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Crear nueva rama" -#: gitk:2219 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Añadir esta revisión a la rama actual (cherry-pick)" -#: gitk:2220 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Traer la rama HEAD aquí" -#: gitk:2234 +#: gitk:2624 +#, fuzzy +msgid "Mark this commit" +msgstr "Añadir esta revisión a la rama actual (cherry-pick)" + +#: gitk:2625 +msgid "Return to mark" +msgstr "" + +#: gitk:2626 +msgid "Find descendant of this and mark" +msgstr "" + +#: gitk:2627 +msgid "Compare with marked commit" +msgstr "" + +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Diferencia de esta -> seleccionada" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Diferencia de seleccionada -> esta" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Añadir esta revisión a la rama actual (cherry-pick)" + +#: gitk:2646 msgid "Check out this branch" msgstr "Cambiar a esta rama" -#: gitk:2235 +#: gitk:2647 msgid "Remove this branch" msgstr "Eliminar esta rama" -#: gitk:2242 +#: gitk:2654 msgid "Highlight this too" msgstr "Seleccionar también" -#: gitk:2243 +#: gitk:2655 msgid "Highlight this only" msgstr "Seleccionar sólo" -#: gitk:2245 +#: gitk:2656 +msgid "External diff" +msgstr "" + +#: gitk:2657 msgid "Blame parent commit" msgstr "" -#: gitk:2488 +#: gitk:2664 +msgid "Show origin of this line" +msgstr "" + +#: gitk:2665 +msgid "Run git gui blame on this line" +msgstr "" + +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -293,425 +374,728 @@ msgstr "" "Uso y redistribución permitidos según los términos de la Licencia Pública " "General de GNU (GNU GPL)" -#: gitk:2496 gitk:2557 gitk:7943 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Cerrar" -#: gitk:2515 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Combinaciones de tecla de Gitk" -#: gitk:2517 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Combinaciones de tecla de Gitk:" -#: gitk:2519 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tSalir" -#: gitk:2520 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\tBuscar" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tIr a la primera revisión" -#: gitk:2521 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tIr a la última revisión" -#: gitk:2522 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, i\tSubir una revisión" -#: gitk:2523 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, k\tBajar una revisión" -#: gitk:2524 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, j\tRetroceder en la historia" -#: gitk:2525 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\tAvanzar en la historia" -#: gitk:2526 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tSubir una página en la lista de revisiones" -#: gitk:2527 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tBajar una página en la lista de revisiones" -#: gitk:2528 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tDesplazarse al inicio de la lista de revisiones" -#: gitk:2529 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tDesplazarse al final de la lista de revisiones" -#: gitk:2530 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tDesplazar una línea hacia arriba la lista de revisiones" -#: gitk:2531 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tDesplazar una línea hacia abajo la lista de revisiones" -#: gitk:2532 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tDesplazar una página hacia arriba la lista de revisiones" -#: gitk:2533 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tDesplazar una página hacia abajo la lista de revisiones" -#: gitk:2534 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Up>\tBuscar hacia atrás (arriba, revisiones siguientes)" -#: gitk:2535 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Shift-Down>\tBuscar hacia adelante (abajo, revisiones anteriores)" -#: gitk:2536 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tDesplaza hacia arriba una página la vista de diferencias" -#: gitk:2537 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tDesplaza hacia arriba una página la vista de diferencias" -#: gitk:2538 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Space>\t\tDesplaza hacia abajo una página la vista de diferencias" -#: gitk:2539 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tDesplaza hacia arriba 18 líneas la vista de diferencias" -#: gitk:2540 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tDesplaza hacia abajo 18 líneas la vista de diferencias" -#: gitk:2541 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tBuscar" -#: gitk:2542 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tBuscar el siguiente" -#: gitk:2543 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\tBuscar el siguiente" -#: gitk:2544 -msgid "/\t\tMove to next find hit, or redo find" -msgstr "/\t\tBuscar el siguiente, o reiniciar la búsqueda" +#: gitk:3072 +msgid "/\t\tFocus the search box" +msgstr "" -#: gitk:2545 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tBuscar el anterior" -#: gitk:2546 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tDesplazar la vista de diferencias al archivo siguiente" -#: gitk:2547 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tBuscar siguiente en la vista de diferencias" -#: gitk:2548 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tBuscar anterior en la vista de diferencias" -#: gitk:2549 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tAumentar tamaño del texto" -#: gitk:2550 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tAumentar tamaño del texto" -#: gitk:2551 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tDisminuir tamaño del texto" -#: gitk:2552 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tDisminuir tamaño del texto" -#: gitk:2553 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tActualizar" -#: gitk:3200 +#: gitk:3546 gitk:3555 +#, fuzzy, tcl-format +msgid "Error creating temporary directory %s:" +msgstr "Error en la creación del parche:" + +#: gitk:3568 +#, fuzzy, tcl-format +msgid "Error getting \"%s\" from %s:" +msgstr "Error al leer las diferencias de fusión:" + +#: gitk:3631 +#, fuzzy +msgid "command failed:" +msgstr "Línea de comandos" + +#: gitk:3780 +#, fuzzy +msgid "No such commit" +msgstr "No se han guardado cambios" + +#: gitk:3794 +msgid "git gui blame: command failed:" +msgstr "" + +#: gitk:3825 +#, tcl-format +msgid "Couldn't read merge head: %s" +msgstr "" + +#: gitk:3833 +#, fuzzy, tcl-format +msgid "Error reading index: %s" +msgstr "Error al crear la etiqueta:" + +#: gitk:3858 +#, tcl-format +msgid "Couldn't start git blame: %s" +msgstr "" + +#: gitk:3861 gitk:6735 +msgid "Searching" +msgstr "Buscando" + +#: gitk:3893 +#, fuzzy, tcl-format +msgid "Error running git blame: %s" +msgstr "Error al crear la etiqueta:" + +#: gitk:3921 +#, tcl-format +msgid "That line comes from commit %s, which is not in this view" +msgstr "" + +#: gitk:3935 +#, fuzzy +msgid "External diff viewer failed:" +msgstr "f\t\tDesplazar la vista de diferencias al archivo siguiente" + +#: gitk:4053 msgid "Gitk view definition" msgstr "Definición de vistas de Gitk" -#: gitk:3225 -msgid "Name" -msgstr "Nombre" - -#: gitk:3228 +#: gitk:4057 msgid "Remember this view" msgstr "Recordar esta vista" -#: gitk:3232 -msgid "Commits to include (arguments to git log):" +#: gitk:4058 +msgid "References (space separated list):" +msgstr "" + +#: gitk:4059 +msgid "Branches & tags:" +msgstr "" + +#: gitk:4060 +#, fuzzy +msgid "All refs" +msgstr "Todos los archivos" + +#: gitk:4061 +msgid "All (local) branches" +msgstr "" + +#: gitk:4062 +msgid "All tags" +msgstr "" + +#: gitk:4063 +msgid "All remote-tracking branches" +msgstr "" + +#: gitk:4064 +msgid "Commit Info (regular expressions):" +msgstr "" + +#: gitk:4065 +#, fuzzy +msgid "Author:" +msgstr "Autor" + +#: gitk:4066 +#, fuzzy +msgid "Committer:" +msgstr "revisión" + +#: gitk:4067 +msgid "Commit Message:" +msgstr "" + +#: gitk:4068 +msgid "Matches all Commit Info criteria" +msgstr "" + +#: gitk:4069 +msgid "Matches none Commit Info criteria" +msgstr "" + +#: gitk:4070 +msgid "Changes to Files:" +msgstr "" + +#: gitk:4071 +msgid "Fixed String" +msgstr "" + +#: gitk:4072 +msgid "Regular Expression" +msgstr "" + +#: gitk:4073 +#, fuzzy +msgid "Search string:" +msgstr "Buscando" + +#: gitk:4074 +msgid "" +"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " +"15:27:38\"):" +msgstr "" + +#: gitk:4075 +msgid "Since:" +msgstr "" + +#: gitk:4076 +msgid "Until:" +msgstr "" + +#: gitk:4077 +msgid "Limit and/or skip a number of revisions (positive integer):" +msgstr "" + +#: gitk:4078 +msgid "Number to show:" +msgstr "" + +#: gitk:4079 +msgid "Number to skip:" +msgstr "" + +#: gitk:4080 +msgid "Miscellaneous options:" +msgstr "" + +#: gitk:4081 +msgid "Strictly sort by date" +msgstr "" + +#: gitk:4082 +msgid "Mark branch sides" +msgstr "" + +#: gitk:4083 +#, fuzzy +msgid "Limit to first parent" +msgstr "Limitar las diferencias a las rutas seleccionadas" + +#: gitk:4084 +msgid "Simple history" +msgstr "" + +#: gitk:4085 +#, fuzzy +msgid "Additional arguments to git log:" msgstr "Revisiones a incluir (argumentos a git log):" -#: gitk:3239 +#: gitk:4086 +msgid "Enter files and directories to include, one per line:" +msgstr "Introducir archivos y directorios a incluir, uno por línea:" + +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Comando que genera más revisiones a incluir:" -#: gitk:3246 -msgid "Enter files and directories to include, one per line:" -msgstr "Introducir archivos y directorios a incluir, uno por línea:" +#: gitk:4211 +msgid "Gitk: edit view" +msgstr "" + +#: gitk:4219 +msgid "-- criteria for selecting revisions" +msgstr "" + +#: gitk:4224 +#, fuzzy +msgid "View Name" +msgstr "Vista" + +#: gitk:4299 +msgid "Apply (F5)" +msgstr "" -#: gitk:3293 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Error en los argumentos de selección de las revisiones:" -#: gitk:3347 gitk:3399 gitk:3842 gitk:3856 gitk:5060 gitk:10141 gitk:10142 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Ninguno" -#: gitk:3790 gitk:5580 gitk:7287 gitk:7302 -msgid "Date" -msgstr "Fecha" - -#: gitk:3790 gitk:5580 -msgid "CDate" -msgstr "Fecha de creación" - -#: gitk:3939 gitk:3944 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Descendiente" -#: gitk:3940 +#: gitk:5004 msgid "Not descendant" msgstr "No descendiente" -#: gitk:3947 gitk:3952 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Antepasado" -#: gitk:3948 +#: gitk:5012 msgid "Not ancestor" msgstr "No antepasado" -#: gitk:4187 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Cambios locales añadidos al índice pero sin completar revisión" -#: gitk:4220 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Cambios locales sin añadir al índice" -#: gitk:5549 -msgid "Searching" -msgstr "Buscando" +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 +msgid "many" +msgstr "" -#: gitk:6049 +#: gitk:7309 msgid "Tags:" msgstr "Etiquetas:" -#: gitk:6066 gitk:6072 gitk:7280 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Padre" -#: gitk:6077 +#: gitk:7337 msgid "Child" msgstr "Hija" -#: gitk:6086 +#: gitk:7346 msgid "Branch" msgstr "Rama" -#: gitk:6089 +#: gitk:7349 msgid "Follows" msgstr "Sigue-a" -#: gitk:6092 +#: gitk:7352 msgid "Precedes" msgstr "Precede-a" -#: gitk:6378 -msgid "Error getting merge diffs:" +#: gitk:7947 +#, fuzzy, tcl-format +msgid "Error getting diffs: %s" msgstr "Error al leer las diferencias de fusión:" -#: gitk:7113 +#: gitk:8631 msgid "Goto:" msgstr "Ir a:" -#: gitk:7115 -msgid "SHA1 ID:" -msgstr "SHA1 ID:" - -#: gitk:7134 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "La id SHA1 abreviada %s es ambigua" -#: gitk:7146 +#: gitk:8659 +#, fuzzy, tcl-format +msgid "Revision %s is not known" +msgstr "La id SHA1 %s es desconocida" + +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "La id SHA1 %s es desconocida" -#: gitk:7148 +#: gitk:8671 #, tcl-format -msgid "Tag/Head %s is not known" -msgstr "La etiqueta/rama %s es deconocida" +msgid "Revision %s is not in the current view" +msgstr "" -#: gitk:7290 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Fecha" + +#: gitk:8816 msgid "Children" msgstr "Hijas" -#: gitk:7347 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Poner la rama %s en esta revisión" -#: gitk:7349 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "" -#: gitk:7381 +#: gitk:8986 gitk:8992 +msgid "Skipping merge commit " +msgstr "" + +#: gitk:9001 gitk:9006 +#, fuzzy +msgid "Error getting patch ID for " +msgstr "Error en la creación del parche:" + +#: gitk:9002 gitk:9007 +msgid " - stopping\n" +msgstr "" + +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 +#, fuzzy +msgid "Commit " +msgstr "revisión" + +#: gitk:9016 +msgid "" +" is the same patch as\n" +" " +msgstr "" + +#: gitk:9024 +msgid "" +" differs from\n" +" " +msgstr "" + +#: gitk:9026 +msgid "" +"Diff of commits:\n" +"\n" +msgstr "" + +#: gitk:9038 gitk:9047 +#, tcl-format +msgid " has %s children - stopping\n" +msgstr "" + +#: gitk:9066 +#, fuzzy, tcl-format +msgid "Error writing commit to file: %s" +msgstr "Error al escribir revisión:" + +#: gitk:9072 +#, fuzzy, tcl-format +msgid "Error diffing commits: %s" +msgstr "Error al escribir revisión:" + +#: gitk:9118 msgid "Top" msgstr "Origen" -#: gitk:7382 +#: gitk:9119 msgid "From" msgstr "De" -#: gitk:7387 +#: gitk:9124 msgid "To" msgstr "A" -#: gitk:7410 +#: gitk:9148 msgid "Generate patch" msgstr "Generar parche" -#: gitk:7412 +#: gitk:9150 msgid "From:" msgstr "De:" -#: gitk:7421 +#: gitk:9159 msgid "To:" msgstr "Para:" -#: gitk:7430 +#: gitk:9168 msgid "Reverse" msgstr "Invertir" -#: gitk:7432 gitk:7607 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Escribir a archivo:" -#: gitk:7438 +#: gitk:9176 msgid "Generate" msgstr "Generar" -#: gitk:7474 +#: gitk:9214 msgid "Error creating patch:" msgstr "Error en la creación del parche:" -#: gitk:7496 gitk:7595 gitk:7649 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:7505 +#: gitk:9246 msgid "Tag name:" msgstr "Nombre de etiqueta:" -#: gitk:7509 gitk:7659 +#: gitk:9249 +msgid "Tag message is optional" +msgstr "" + +#: gitk:9251 +#, fuzzy +msgid "Tag message:" +msgstr "Nombre de etiqueta:" + +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Crear" -#: gitk:7524 +#: gitk:9273 msgid "No tag name specified" msgstr "No se ha especificado etiqueta" -#: gitk:7528 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "La etiqueta \"%s\" ya existe" -#: gitk:7534 +#: gitk:9287 msgid "Error creating tag:" msgstr "Error al crear la etiqueta:" -#: gitk:7604 +#: gitk:9363 msgid "Command:" msgstr "Comando:" -#: gitk:7612 +#: gitk:9371 msgid "Write" msgstr "Escribir" -#: gitk:7628 +#: gitk:9389 msgid "Error writing commit:" msgstr "Error al escribir revisión:" -#: gitk:7654 +#: gitk:9416 msgid "Name:" msgstr "Nombre:" -#: gitk:7674 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Especifique un nombre para la nueva rama" -#: gitk:7703 +#: gitk:9444 +#, fuzzy, tcl-format +msgid "Branch '%s' already exists. Overwrite?" +msgstr "La etiqueta \"%s\" ya existe" + +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "La revisión %s ya está incluida en la rama %s -- ¿Volver a aplicarla?" -#: gitk:7708 +#: gitk:9516 msgid "Cherry-picking" msgstr "Eligiendo revisiones (cherry-picking)" -#: gitk:7720 +#: gitk:9525 +#, 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 "" + +#: gitk:9531 +msgid "" +"Cherry-pick failed because of merge conflict.\n" +"Do you wish to run git citool to resolve it?" +msgstr "" + +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "No se han guardado cambios" -#: gitk:7745 +#: gitk:9574 +#, fuzzy, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "La revisión %s ya está incluida en la rama %s -- ¿Volver a aplicarla?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "Reponiendo" + +#: gitk:9587 +#, 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 "" + +#: gitk:9591 +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" + +#: gitk:9634 msgid "Confirm reset" msgstr "Confirmar git reset" -#: gitk:7747 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "¿Reponer la rama %s a %s?" -#: gitk:7751 +#: gitk:9638 msgid "Reset type:" msgstr "Tipo de reposición:" -#: gitk:7755 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Suave: No altera la copia de trabajo ni el índice" -#: gitk:7758 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Mixta: Actualiza el índice, no altera la copia de trabajo" -#: gitk:7761 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -719,19 +1103,19 @@ msgstr "" "Dura: Actualiza el índice y la copia de trabajo\n" "(abandona TODAS las modificaciones locales)" -#: gitk:7777 +#: gitk:9664 msgid "Resetting" msgstr "Reponiendo" -#: gitk:7834 +#: gitk:9724 msgid "Checking out" msgstr "Creando copia de trabajo" -#: gitk:7885 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "No se puede borrar la rama actual" -#: gitk:7891 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -740,16 +1124,16 @@ msgstr "" "Las revisiones de la rama %s no están presentes en otras ramas.\n" "¿Borrar la rama %s?" -#: gitk:7922 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Etiquetas y ramas: %s" -#: gitk:7936 +#: gitk:9829 msgid "Filter" msgstr "Filtro" -#: gitk:8230 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -757,155 +1141,255 @@ msgstr "" "Error al leer la topología de revisiones: la información sobre las ramas y " "etiquetas precedentes y siguientes será incompleta." -#: gitk:9216 +#: gitk:11102 msgid "Tag" msgstr "Etiqueta" -#: gitk:9216 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:9262 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Selector de tipografías gitk" -#: gitk:9279 +#: gitk:11206 msgid "B" msgstr "B" -#: gitk:9282 +#: gitk:11209 msgid "I" msgstr "I" -#: gitk:9375 -msgid "Gitk preferences" -msgstr "Preferencias de gitk" - -#: gitk:9376 +#: gitk:11327 msgid "Commit list display options" msgstr "Opciones de visualización de la lista de revisiones" -#: gitk:9379 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Ancho máximo del gráfico (en líneas)" -#: gitk:9383 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Ancho máximo del gráfico (en % del panel)" -#: gitk:9388 +#: gitk:11337 msgid "Show local changes" msgstr "Mostrar cambios locales" -#: gitk:9393 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "Seleccionar automáticamente SHA1 hash" -#: gitk:9398 +#: gitk:11344 +msgid "Hide remote refs" +msgstr "" + +#: gitk:11348 msgid "Diff display options" msgstr "Opciones de visualización de diferencias" -#: gitk:9400 +#: gitk:11350 msgid "Tab spacing" msgstr "Espaciado de tabulador" -#: gitk:9404 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Mostrar etiquetas cercanas" -#: gitk:9409 +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" + +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Limitar las diferencias a las rutas seleccionadas" -#: gitk:9414 +#: gitk:11362 msgid "Support per-file encodings" msgstr "" -#: gitk:9421 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "" -#: gitk:9423 +#: gitk:11369 msgid "Choose..." msgstr "" -#: gitk:9428 +#: gitk:11374 +#, fuzzy +msgid "General options" +msgstr "Generar parche" + +#: gitk:11377 +msgid "Use themed widgets" +msgstr "" + +#: gitk:11379 +msgid "(change requires restart)" +msgstr "" + +#: gitk:11381 +msgid "(currently unavailable)" +msgstr "" + +#: gitk:11392 msgid "Colors: press to choose" msgstr "Colores: pulse para seleccionar" -#: gitk:9431 +#: gitk:11395 +msgid "Interface" +msgstr "" + +#: gitk:11396 +#, fuzzy +msgid "interface" +msgstr "Tipografía para interfaz de usuario" + +#: gitk:11399 msgid "Background" msgstr "Fondo" -#: gitk:9435 +#: gitk:11400 gitk:11430 +#, fuzzy +msgid "background" +msgstr "Fondo" + +#: gitk:11403 msgid "Foreground" msgstr "Primer plano" -#: gitk:9439 +#: gitk:11404 +#, fuzzy +msgid "foreground" +msgstr "Primer plano" + +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff: líneas viejas" -#: gitk:9444 +#: gitk:11408 +#, fuzzy +msgid "diff old lines" +msgstr "Diff: líneas viejas" + +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff: líneas nuevas" -#: gitk:9449 +#: gitk:11413 +#, fuzzy +msgid "diff new lines" +msgstr "Diff: líneas nuevas" + +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff: cabecera de fragmento" -#: gitk:9455 +#: gitk:11419 +#, fuzzy +msgid "diff hunk header" +msgstr "Diff: cabecera de fragmento" + +#: gitk:11423 +msgid "Marked line bg" +msgstr "" + +#: gitk:11425 +msgid "marked line background" +msgstr "" + +#: gitk:11429 msgid "Select bg" msgstr "Color de fondo de la selección" -#: gitk:9459 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Tipografías: pulse para elegir" -#: gitk:9461 +#: gitk:11440 msgid "Main font" msgstr "Tipografía principal" -#: gitk:9462 +#: gitk:11441 msgid "Diff display font" msgstr "Tipografía para diferencias" -#: gitk:9463 +#: gitk:11442 msgid "User interface font" msgstr "Tipografía para interfaz de usuario" -#: gitk:9488 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Preferencias de gitk" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Generar" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: elegir color para %s" -#: gitk:9934 -msgid "" -"Sorry, gitk cannot run with this version of Tcl/Tk.\n" -" Gitk requires at least Tcl/Tk 8.4." -msgstr "" -"Esta versión de Tcl/Tk es demasiado antigua.\n" -" Gitk requiere Tcl/Tk versión 8.4 o superior." - -#: gitk:10047 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "No hay un repositorio git aquí." -#: gitk:10051 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "No hay directorio git \"%s\"." - -#: gitk:10098 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "" "Argumento ambiguo: '%s' es tanto una revisión como un nombre de archivo" -#: gitk:10110 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Argumentos incorrectos a Gitk:" -#: gitk:10170 +#: gitk:12405 msgid "Command line" msgstr "Línea de comandos" + +#~ msgid "SHA1 ID: " +#~ msgstr "SHA1 ID: " + +#~ msgid "next" +#~ msgstr "<<" + +#~ msgid "prev" +#~ msgstr ">>" + +#~ msgid "/\t\tMove to next find hit, or redo find" +#~ msgstr "/\t\tBuscar el siguiente, o reiniciar la búsqueda" + +#~ msgid "Name" +#~ msgstr "Nombre" + +#~ msgid "CDate" +#~ msgstr "Fecha de creación" + +#~ msgid "Tag/Head %s is not known" +#~ msgstr "La etiqueta/rama %s es deconocida" + +#~ msgid "" +#~ "Sorry, gitk cannot run with this version of Tcl/Tk.\n" +#~ " Gitk requires at least Tcl/Tk 8.4." +#~ msgstr "" +#~ "Esta versión de Tcl/Tk es demasiado antigua.\n" +#~ " Gitk requiere Tcl/Tk versión 8.4 o superior." + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "No hay directorio git \"%s\"." diff --git a/gitk-git/po/fr.po b/gitk-git/po/fr.po index 5370ddc393..747ee190f2 100644 --- a/gitk-git/po/fr.po +++ b/gitk-git/po/fr.po @@ -8,36 +8,45 @@ msgid "" msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-10-05 15:16+0200\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2009-11-19 22:13+0100\n" "Last-Translator: Emmanuel Trillaud <etrillaud@gmail.com>\n" "Language-Team: git@vger.kernel.org\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: French\n" "X-Poedit-Country: FRANCE\n" -#: gitk:113 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "Impossible de récupérer la liste des fichiers non fusionnés :" -#: gitk:269 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 msgid "Error parsing revisions:" msgstr "Erreur lors du parcours des révisions :" -#: gitk:324 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Erreur à l'exécution de la commande --argscmd :" -#: gitk:337 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Aucun fichier sélectionné : --merge précisé, mais tous les fichiers sont " "fusionnés." # FIXME : améliorer la traduction de 'file limite' -#: gitk:340 +#: gitk:396 #, fuzzy msgid "" "No files selected: --merge specified but no unmerged files are within file " @@ -46,295 +55,315 @@ msgstr "" "Aucun fichier sélectionné : --merge précisé mais aucun fichier non fusionné " "n'est dans la limite des fichiers." -#: gitk:362 gitk:509 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Erreur à l'exécution de git log :" -#: gitk:380 gitk:525 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Lecture en cours" -#: gitk:440 gitk:4123 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Lecture des commits..." -#: gitk:443 gitk:1561 gitk:4126 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Aucun commit sélectionné" -#: gitk:1437 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Impossible de lire la sortie de git log :" -#: gitk:1657 +#: gitk:1740 msgid "No commit information available" msgstr "Aucune information disponible sur le commit" -#: gitk:1793 gitk:1817 gitk:3916 gitk:8786 gitk:10322 gitk:10498 +#: gitk:1897 +msgid "mc" +msgstr "" + +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "OK" -#: gitk:1819 gitk:3918 gitk:8383 gitk:8457 gitk:8567 gitk:8616 gitk:8788 -#: gitk:10323 gitk:10499 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Annuler" -#: gitk:1919 +#: gitk:2069 msgid "Update" msgstr "Mise à jour" -#: gitk:1920 +#: gitk:2070 msgid "Reload" msgstr "Recharger" -#: gitk:1921 +#: gitk:2071 msgid "Reread references" msgstr "Relire les références" -#: gitk:1922 +#: gitk:2072 msgid "List references" msgstr "Lister les références" -#: gitk:1924 +#: gitk:2074 msgid "Start git gui" msgstr "Démarrer git gui" -#: gitk:1926 +#: gitk:2076 msgid "Quit" msgstr "Quitter" -#: gitk:1918 +#: gitk:2068 msgid "File" msgstr "Fichier" -#: gitk:1930 +#: gitk:2080 msgid "Preferences" msgstr "Préférences" -#: gitk:1929 +#: gitk:2079 msgid "Edit" msgstr "Éditer" -#: gitk:1934 +#: gitk:2084 msgid "New view..." msgstr "Nouvelle vue..." -#: gitk:1935 +#: gitk:2085 msgid "Edit view..." msgstr "Éditer la vue..." -#: gitk:1936 +#: gitk:2086 msgid "Delete view" msgstr "Supprimer la vue" -#: gitk:1938 +#: gitk:2088 msgid "All files" msgstr "Tous les fichiers" -#: gitk:1933 gitk:3670 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Vue" -#: gitk:1943 gitk:1953 gitk:2654 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "À propos de gitk" -#: gitk:1944 gitk:1958 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Raccourcis clavier" -#: gitk:1942 gitk:1957 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Aide" -#: gitk:2018 -msgid "SHA1 ID: " -msgstr "ID SHA1 :" +#: gitk:2185 gitk:8633 +msgid "SHA1 ID:" +msgstr "Id SHA1 :" -#: gitk:2049 +#: gitk:2229 msgid "Row" msgstr "Colonne" -#: gitk:2080 +#: gitk:2267 msgid "Find" msgstr "Recherche" -#: gitk:2081 -msgid "next" -msgstr "suivant" - -#: gitk:2082 -msgid "prev" -msgstr "précédent" - -#: gitk:2083 +#: gitk:2295 msgid "commit" msgstr "commit" -#: gitk:2086 gitk:2088 gitk:4284 gitk:4307 gitk:4331 gitk:6272 gitk:6344 -#: gitk:6428 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "contient :" -#: gitk:2089 gitk:3162 gitk:3167 gitk:4359 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "chemins modifiés :" -#: gitk:2090 gitk:4364 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "ajoute/supprime la chaîne :" -#: gitk:2099 gitk:2101 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Exact" -#: gitk:2101 gitk:4439 gitk:6240 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "Ignorer la casse" -#: gitk:2101 gitk:4333 gitk:4437 gitk:6236 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Expression régulière" -#: gitk:2103 gitk:2104 gitk:4458 gitk:4488 gitk:4495 gitk:6364 gitk:6432 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Tous les champs" -#: gitk:2104 gitk:4456 gitk:4488 gitk:6303 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Surligner" -#: gitk:2105 gitk:4456 gitk:6303 gitk:6432 gitk:6866 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Commentaires" -#: gitk:2105 gitk:4456 gitk:4460 gitk:4495 gitk:6303 gitk:6801 gitk:8063 -#: gitk:8078 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Auteur" -#: gitk:2105 gitk:4456 gitk:6303 gitk:6803 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Auteur du commit" -#: gitk:2134 +#: gitk:2350 msgid "Search" msgstr "Rechercher" -#: gitk:2141 +#: gitk:2358 msgid "Diff" msgstr "Diff" -#: gitk:2143 +#: gitk:2360 msgid "Old version" msgstr "Ancienne version" -#: gitk:2145 +#: gitk:2362 msgid "New version" msgstr "Nouvelle version" -#: gitk:2147 +#: gitk:2364 msgid "Lines of context" msgstr "Lignes de contexte" -#: gitk:2157 +#: gitk:2374 msgid "Ignore space change" msgstr "Ignorer les modifications d'espace" -#: gitk:2215 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Patch" -#: gitk:2217 +#: gitk:2447 msgid "Tree" msgstr "Arbre" -#: gitk:2361 gitk:2378 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Diff entre ceci et la sélection" -#: gitk:2362 gitk:2379 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Diff entre sélection et ceci" -#: gitk:2363 gitk:2380 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Créer patch" -#: gitk:2364 gitk:8441 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Créer tag" -#: gitk:2365 gitk:8547 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Écrire le commit dans un fichier" -#: gitk:2366 gitk:8604 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Créer une nouvelle branche" -#: gitk:2367 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Cueillir (cherry-pick) ce commit" -#: gitk:2368 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Réinitialiser la branche HEAD vers cet état" -#: gitk:2369 +#: gitk:2624 msgid "Mark this commit" msgstr "Marquer ce commit" -#: gitk:2370 +#: gitk:2625 msgid "Return to mark" msgstr "Retourner à la marque" -#: gitk:2371 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Chercher le descendant de ceci et le marquer" -#: gitk:2372 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Comparer avec le commit marqué" -#: gitk:2386 +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Diff entre ceci et la sélection" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Diff entre sélection et ceci" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Marquer ce commit" + +#: gitk:2646 msgid "Check out this branch" msgstr "Récupérer cette branche" -#: gitk:2387 +#: gitk:2647 msgid "Remove this branch" msgstr "Supprimer cette branche" -#: gitk:2394 +#: gitk:2654 msgid "Highlight this too" msgstr "Surligner également ceci" -#: gitk:2395 +#: gitk:2655 msgid "Highlight this only" msgstr "Surligner seulement ceci" -#: gitk:2396 +#: gitk:2656 msgid "External diff" msgstr "Diff externe" -#: gitk:2397 +#: gitk:2657 msgid "Blame parent commit" msgstr "Blâmer le commit parent" -#: gitk:2404 +#: gitk:2664 msgid "Show origin of this line" msgstr "Montrer l'origine de cette ligne" -#: gitk:2405 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Exécuter git gui blame sur cette ligne" -#: gitk:2656 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -346,299 +375,317 @@ msgstr "" "Utilisation et redistribution soumises aux termes de la GNU General Public " "License" -#: gitk:2664 gitk:2726 gitk:8969 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Fermer" -#: gitk:2683 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Raccourcis clavier de Gitk" -#: gitk:2686 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Raccourcis clavier de Gitk :" -#: gitk:2688 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tQuitter" -#: gitk:2689 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\tRechercher" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Début>\t\tAller au premier commit" -#: gitk:2690 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<Fin>\t\tAller au dernier commit" -#: gitk:2691 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Haut>, p, i\t Aller au commit suivant" -#: gitk:2692 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Bas>, n, k\t Aller au commit précédent" -#: gitk:2693 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Gauche>, z, j\tReculer dans l'historique" -#: gitk:2694 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Droite>, x, l\tAvancer dans l'historique" -#: gitk:2695 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tMonter d'une page dans la liste des commits" -#: gitk:2696 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tDescendre d'une page dans la liste des commits" -#: gitk:2697 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Début>\tAller en haut de la liste des commits" -#: gitk:2698 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tAller en bas de la liste des commits" -#: gitk:2699 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tMonter d'une ligne dans la liste des commits" -#: gitk:2700 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tDescendre d'une ligne dans la liste des commits" -#: gitk:2701 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tMonter d'une page dans la liste des commits" -#: gitk:2702 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tDescendre d'une page dans la liste des commits" -#: gitk:2703 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "" "<Shift-Up>\tRecherche en arrière (vers l'avant, commits les plus anciens)" -#: gitk:2704 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "" "<Shift-Down>\tRecherche en avant (vers l'arrière, commit les plus récents)" -#: gitk:2705 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Supprimer>, b\tMonter d'une page dans la vue des diff" -#: gitk:2706 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tMonter d'une page dans la vue des diff" -#: gitk:2707 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Espace>\t\tDescendre d'une page dans la vue des diff" -#: gitk:2708 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tMonter de 18 lignes dans la vue des diff" -#: gitk:2709 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tDescendre de 18 lignes dans la vue des diff" -#: gitk:2710 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tRechercher" -#: gitk:2711 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tAller au résultat de recherche suivant" -#: gitk:2712 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\t\tAller au résultat de recherche suivant" -#: gitk:2713 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tFocus sur la zone de recherche" -#: gitk:2714 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tAller au résultat de recherche précédent" -#: gitk:2715 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tAller au prochain fichier dans la vue des diff" -#: gitk:2716 +#: gitk:3075 #, 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:2717 +#: gitk:3076 #, 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:2718 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tAugmenter la taille de la police" -#: gitk:2719 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tAugmenter la taille de la police" -#: gitk:2720 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tDiminuer la taille de la police" -#: gitk:2721 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tDiminuer la taille de la police" -#: gitk:2722 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tMise à jour" -#: gitk:3177 -#, tcl-format -msgid "Error getting \"%s\" from %s:" -msgstr "Erreur en obtenant \"%s\" de %s:" - -#: gitk:3234 gitk:3243 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Erreur lors de la création du répertoire temporaire %s :" -#: gitk:3255 +#: gitk:3568 +#, tcl-format +msgid "Error getting \"%s\" from %s:" +msgstr "Erreur en obtenant \"%s\" de %s:" + +#: gitk:3631 msgid "command failed:" msgstr "échec de la commande :" -#: gitk:3401 +#: gitk:3780 msgid "No such commit" msgstr "Commit inexistant" -#: gitk:3415 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame : échec de la commande :" -#: gitk:3446 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Impossible de lire le head de la fusion : %s" -#: gitk:3454 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Erreur à la lecture de l'index : %s" -#: gitk:3479 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Impossible de démarrer git blame : %s" -#: gitk:3482 gitk:6271 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Recherche en cours" -#: gitk:3514 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Erreur à l'exécution de git blame : %s" -#: gitk:3542 +#: gitk:3921 #, 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:3556 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Échec de l'outil externe de visualisation des diff" -#: gitk:3674 +#: gitk:4053 msgid "Gitk view definition" msgstr "Définition des vues de Gitk" -#: gitk:3678 +#: gitk:4057 msgid "Remember this view" msgstr "Se souvenir de cette vue" -#: gitk:3679 +#: gitk:4058 msgid "References (space separated list):" msgstr "Références (liste d'éléments séparés par des espaces) :" -#: gitk:3680 +#: gitk:4059 msgid "Branches & tags:" msgstr "Branches & tags :" -#: gitk:3681 +#: gitk:4060 msgid "All refs" msgstr "Toutes les références" -#: gitk:3682 +#: gitk:4061 msgid "All (local) branches" msgstr "Toutes les branches (locales)" -#: gitk:3683 +#: gitk:4062 msgid "All tags" msgstr "Tous les tags" -#: gitk:3684 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Toutes les branches de suivi à distance" -#: gitk:3685 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Info sur les commits (expressions régulières) :" -#: gitk:3686 +#: gitk:4065 msgid "Author:" msgstr "Auteur :" -#: gitk:3687 +#: gitk:4066 msgid "Committer:" msgstr "Commiteur :" -#: gitk:3688 +#: gitk:4067 msgid "Commit Message:" msgstr "Message de commit :" -#: gitk:3689 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Correspond à tous les critères d'Info sur les commits" -#: gitk:3690 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Correspond à tous les critères d'Info sur les commits" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Changements des fichiers :" -#: gitk:3691 +#: gitk:4071 msgid "Fixed String" msgstr "Chaîne Figée" -#: gitk:3692 +#: gitk:4072 msgid "Regular Expression" msgstr "Expression Régulière" -#: gitk:3693 +#: gitk:4073 msgid "Search string:" msgstr "Recherche de la chaîne :" -#: gitk:3694 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -646,207 +693,204 @@ msgstr "" "Dates des commits (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, " "2009 15:27:38\") :" -#: gitk:3695 +#: gitk:4075 msgid "Since:" msgstr "De :" -#: gitk:3696 +#: gitk:4076 msgid "Until:" msgstr "Jusqu'au :" -#: gitk:3697 +#: gitk:4077 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:3698 +#: gitk:4078 msgid "Number to show:" msgstr "Nombre à afficher :" -#: gitk:3699 +#: gitk:4079 msgid "Number to skip:" msgstr "Nombre à sauter :" -#: gitk:3700 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Options diverses :" -#: gitk:3701 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Trier par date" # FIXME : traduction de "branch sides" -#: gitk:3702 +#: gitk:4082 #, fuzzy msgid "Mark branch sides" msgstr "Marquer les extrémités des branches" -#: gitk:3703 +#: gitk:4083 msgid "Limit to first parent" msgstr "Limiter au premier ancêtre" -#: gitk:3704 +#: gitk:4084 msgid "Simple history" msgstr "Historique simple" -#: gitk:3705 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Arguments supplémentaires de git log :" -#: gitk:3706 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Saisir les fichiers et répertoires à inclure, un par ligne :" -#: gitk:3707 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Commande pour générer plus de commits à inclure :" -#: gitk:3829 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk : éditer la vue" -#: gitk:3837 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "-- critère pour la sélection des révisions" -#: gitk:3842 -msgid "View Name:" +#: gitk:4224 +#, fuzzy +msgid "View Name" msgstr "Nom de la vue :" -#: gitk:3917 +#: gitk:4299 msgid "Apply (F5)" msgstr "Appliquer (F5)" -#: gitk:3955 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Erreur dans les arguments de sélection des commits :" -#: gitk:4008 gitk:4060 gitk:4508 gitk:4522 gitk:5783 gitk:11196 gitk:11197 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Aucun" -#: gitk:4456 gitk:6303 gitk:8065 gitk:8080 -msgid "Date" -msgstr "Date" - -#: gitk:4456 gitk:6303 -msgid "CDate" -msgstr "CDate" - -#: gitk:4605 gitk:4610 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Descendant" -#: gitk:4606 +#: gitk:5004 msgid "Not descendant" msgstr "Pas un descendant" -#: gitk:4613 gitk:4618 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Ancêtre" -#: gitk:4614 +#: gitk:5012 msgid "Not ancestor" msgstr "Pas un ancêtre" -#: gitk:4904 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Modifications locales enregistrées dans l'index mais non commitées" -#: gitk:4940 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Modifications locales non enregistrées dans l'index et non commitées" -#: gitk:6621 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 msgid "many" msgstr "nombreux" -#: gitk:6805 +#: gitk:7309 msgid "Tags:" msgstr "Tags :" -#: gitk:6822 gitk:6828 gitk:8058 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Parent" -#: gitk:6833 +#: gitk:7337 msgid "Child" msgstr "Enfant" -#: gitk:6842 +#: gitk:7346 msgid "Branch" msgstr "Branche" -#: gitk:6845 +#: gitk:7349 msgid "Follows" msgstr "Suit" -#: gitk:6848 +#: gitk:7352 msgid "Precedes" msgstr "Précède" -#: gitk:7346 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Erreur lors de la récupération des diff : %s" -#: gitk:7886 +#: gitk:8631 msgid "Goto:" msgstr "Aller à :" -#: gitk:7888 -msgid "SHA1 ID:" -msgstr "Id SHA1 :" - -#: gitk:7907 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Id SHA1 court %s est ambigu" -#: gitk:7914 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "Id SHA1 %s est inconnu" -#: gitk:7924 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "Id SHA1 %s est inconnu" -#: gitk:7926 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "La révision %s n'est pas dans la vue courante" -#: gitk:8068 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Date" + +#: gitk:8816 msgid "Children" msgstr "Enfants" -#: gitk:8125 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Réinitialiser la branche %s vers cet état" -#: gitk:8127 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Head détaché : impossible de réinitialiser" -#: gitk:8236 gitk:8242 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Éviter le commit de la fusion " -#: gitk:8251 gitk:8256 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Erreur à l'obtention de l'ID du patch pour " -#: gitk:8252 gitk:8257 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - arrêt en cours\n" -#: gitk:8262 gitk:8265 gitk:8273 gitk:8283 gitk:8292 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Commit " -#: gitk:8266 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -854,7 +898,7 @@ msgstr "" "est le même patch que \n" " " -#: gitk:8274 +#: gitk:9024 msgid "" " differs from\n" " " @@ -862,117 +906,138 @@ msgstr "" " diffère de\n" " " -#: gitk:8276 -msgid "- stopping\n" -msgstr "- arrêt en cours\n" +#: gitk:9026 +msgid "" +"Diff of commits:\n" +"\n" +msgstr "" -#: gitk:8284 gitk:8293 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr "a %s enfants - arrêt en cours\n" -#: gitk:8324 +#: gitk:9066 +#, fuzzy, tcl-format +msgid "Error writing commit to file: %s" +msgstr "Erreur à l'ecriture du commit :" + +#: gitk:9072 +#, fuzzy, tcl-format +msgid "Error diffing commits: %s" +msgstr "Erreur à l'ecriture du commit :" + +#: gitk:9118 msgid "Top" msgstr "Haut" -#: gitk:8325 +#: gitk:9119 msgid "From" msgstr "De" -#: gitk:8330 +#: gitk:9124 msgid "To" msgstr "À" -#: gitk:8354 +#: gitk:9148 msgid "Generate patch" msgstr "Générer le patch" -#: gitk:8356 +#: gitk:9150 msgid "From:" msgstr "De :" -#: gitk:8365 +#: gitk:9159 msgid "To:" msgstr "À :" -#: gitk:8374 +#: gitk:9168 msgid "Reverse" msgstr "Inverser" -#: gitk:8376 gitk:8561 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Fichier de sortie :" -#: gitk:8382 +#: gitk:9176 msgid "Generate" msgstr "Générer" -#: gitk:8420 +#: gitk:9214 msgid "Error creating patch:" msgstr "Erreur à la création du patch :" -#: gitk:8443 gitk:8549 gitk:8606 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID :" -#: gitk:8452 +#: gitk:9246 msgid "Tag name:" msgstr "Nom du Tag :" -#: gitk:8456 gitk:8615 +#: gitk:9249 +msgid "Tag message is optional" +msgstr "" + +#: gitk:9251 +#, fuzzy +msgid "Tag message:" +msgstr "Nom du Tag :" + +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Créer" -#: gitk:8473 +#: gitk:9273 msgid "No tag name specified" msgstr "Aucun nom de tag spécifié" -#: gitk:8477 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Le tag \"%s\" existe déjà" -#: gitk:8483 +#: gitk:9287 msgid "Error creating tag:" msgstr "Erreur à la création du tag :" -#: gitk:8558 +#: gitk:9363 msgid "Command:" msgstr "Commande :" -#: gitk:8566 +#: gitk:9371 msgid "Write" msgstr "Écrire" -#: gitk:8584 +#: gitk:9389 msgid "Error writing commit:" msgstr "Erreur à l'ecriture du commit :" -#: gitk:8611 +#: gitk:9416 msgid "Name:" msgstr "Nom :" -#: gitk:8634 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Veuillez spécifier un nom pour la nouvelle branche" -#: gitk:8639 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "La branche '%s' existe déjà. Écraser?" -#: gitk:8705 +#: gitk:9511 #, 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:8710 +#: gitk:9516 msgid "Cherry-picking" msgstr "Cueillir (Cherry-picking)" -#: gitk:8719 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -983,7 +1048,7 @@ msgstr "" "Veuillez commiter, réinitialiser ou stasher vos changements et essayer de " "nouveau." -#: gitk:8725 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -992,34 +1057,67 @@ msgstr "" "fusion.\n" "Souhaitez-vous exécuter git citool pour le résoudre ?" -#: gitk:8741 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Aucun changement commité" -#: gitk:8767 +#: gitk:9574 +#, fuzzy, 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?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "Réinitialisation" + +#: gitk:9587 +#, fuzzy, 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." + +#: gitk:9591 +#, fuzzy +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" +"Souhaitez-vous exécuter git citool pour le résoudre ?" + +#: gitk:9634 msgid "Confirm reset" msgstr "Confirmer la réinitialisation" -#: gitk:8769 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Réinitialiser la branche %s à %s?" -#: gitk:8773 +#: gitk:9638 msgid "Reset type:" msgstr "Type de réinitialisation :" -#: gitk:8777 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Douce : Laisse le répertoire de travail et l'index intacts" -#: gitk:8780 +#: gitk:9644 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:8783 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1027,21 +1125,21 @@ msgstr "" "Dure : Réinitialise le répertoire de travail et l'index\n" "(abandonne TOUS les changements locaux)" -#: gitk:8800 +#: gitk:9664 msgid "Resetting" msgstr "Réinitialisation" # Fixme: Récupération est-il vraiment une mauvaise traduction? -#: gitk:8857 +#: gitk:9724 #, fuzzy msgid "Checking out" msgstr "Récupération" -#: gitk:8910 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Impossible de supprimer la branche en cours" -#: gitk:8916 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1050,16 +1148,16 @@ msgstr "" "Les commits de la branche %s ne sont dans aucune autre branche.\n" "Voulez-vous vraiment supprimer cette branche %s ?" -#: gitk:8947 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Tags et heads : %s" -#: gitk:8962 +#: gitk:9829 msgid "Filter" msgstr "Filtrer" -#: gitk:9257 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1068,187 +1166,244 @@ msgstr "" "informations sur les branches et les tags précédents/suivants seront " "incomplètes." -#: gitk:10243 +#: gitk:11102 msgid "Tag" msgstr "Tag" -#: gitk:10243 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:10291 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Sélecteur de police de Gitk" -#: gitk:10308 +#: gitk:11206 msgid "B" msgstr "B" -#: gitk:10311 +#: gitk:11209 msgid "I" msgstr "I" -#: gitk:10407 -msgid "Gitk preferences" -msgstr "Préférences de Gitk" - -#: gitk:10409 +#: gitk:11327 msgid "Commit list display options" msgstr "Options d'affichage de la liste des commits" -#: gitk:10412 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Longueur maximum du graphe (lignes)" # FIXME : Traduction standard de "pane"? -#: gitk:10416 -#, fuzzy, tcl-format +#: gitk:11334 +#, fuzzy, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Longueur maximum du graphe (% du panneau)" -#: gitk:10420 +#: gitk:11337 msgid "Show local changes" msgstr "Montrer les changements locaux" -#: gitk:10423 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "Sélection auto. du SHA1" -#: gitk:10427 +#: gitk:11344 +msgid "Hide remote refs" +msgstr "Cacher les refs distantes" + +#: gitk:11348 msgid "Diff display options" msgstr "Options d'affichage des diff" -#: gitk:10429 +#: gitk:11350 msgid "Tab spacing" msgstr "Taille des tabulations" -#: gitk:10432 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Afficher les tags les plus proches" -#: gitk:10435 -msgid "Hide remote refs" -msgstr "Cacher les refs distantes" +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" -#: gitk:10438 +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Limiter les différences aux chemins listés" -#: gitk:10441 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Support pour un encodage des caractères par fichier" -#: gitk:10447 gitk:10512 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Outil diff externe" -#: gitk:10449 +#: gitk:11369 msgid "Choose..." msgstr "Choisir..." -#: gitk:10454 +#: gitk:11374 +#, fuzzy +msgid "General options" +msgstr "Générer le patch" + +#: gitk:11377 +msgid "Use themed widgets" +msgstr "" + +#: gitk:11379 +msgid "(change requires restart)" +msgstr "" + +#: gitk:11381 +msgid "(currently unavailable)" +msgstr "" + +#: gitk:11392 msgid "Colors: press to choose" msgstr "Couleurs : cliquer pour choisir" -#: gitk:10457 +#: gitk:11395 +msgid "Interface" +msgstr "" + +#: gitk:11396 +#, fuzzy +msgid "interface" +msgstr "Police de l'interface utilisateur" + +#: gitk:11399 msgid "Background" msgstr "Arrière-plan" -#: gitk:10458 gitk:10488 +#: gitk:11400 gitk:11430 msgid "background" msgstr "arrière-plan" -#: gitk:10461 +#: gitk:11403 msgid "Foreground" msgstr "Premier plan" -#: gitk:10462 +#: gitk:11404 msgid "foreground" msgstr "premier plan" -#: gitk:10465 +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff : anciennes lignes" -#: gitk:10466 +#: gitk:11408 msgid "diff old lines" msgstr "diff anciennes lignes" -#: gitk:10470 +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff : nouvelles lignes" -#: gitk:10471 +#: gitk:11413 msgid "diff new lines" msgstr "diff nouvelles lignes" -#: gitk:10475 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff : entête du hunk" -#: gitk:10477 +#: gitk:11419 msgid "diff hunk header" msgstr "diff : entête du hunk" -#: gitk:10481 +#: gitk:11423 msgid "Marked line bg" msgstr "Arrière-plan de la ligne marquée" -#: gitk:10483 +#: gitk:11425 msgid "marked line background" msgstr "Arrière-plan de la ligne marquée" -#: gitk:10487 +#: gitk:11429 msgid "Select bg" msgstr "Sélectionner l'arrière-plan" -#: gitk:10491 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Polices : cliquer pour choisir" -#: gitk:10493 +#: gitk:11440 msgid "Main font" msgstr "Police principale" -#: gitk:10494 +#: gitk:11441 msgid "Diff display font" msgstr "Police d'affichage des diff" -#: gitk:10495 +#: gitk:11442 msgid "User interface font" msgstr "Police de l'interface utilisateur" -#: gitk:10522 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Préférences de Gitk" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Générer" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk : choisir la couleur de %s" -#: gitk:10973 -msgid "" -"Sorry, gitk cannot run with this version of Tcl/Tk.\n" -" Gitk requires at least Tcl/Tk 8.4." -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:11101 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Impossible de trouver un dépôt git ici." -#: gitk:11105 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "Impossible de trouver le répertoire git \"%s\"." - -#: gitk:11152 +#: gitk:12289 #, 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:11164 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Arguments invalides pour gitk :" -#: gitk:11249 +#: gitk:12405 msgid "Command line" msgstr "Ligne de commande" + +#~ msgid "SHA1 ID: " +#~ msgstr "ID SHA1 :" + +#~ msgid "next" +#~ msgstr "suivant" + +#~ msgid "prev" +#~ msgstr "précédent" + +#~ msgid "CDate" +#~ msgstr "CDate" + +#~ msgid "- stopping\n" +#~ msgstr "- arrêt en cours\n" + +#~ msgid "" +#~ "Sorry, gitk cannot run with this version of Tcl/Tk.\n" +#~ " Gitk requires at least Tcl/Tk 8.4." +#~ 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." + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "Impossible de trouver le répertoire git \"%s\"." diff --git a/gitk-git/po/hu.po b/gitk-git/po/hu.po index 7262b610dc..5e3e9468c0 100644 --- a/gitk-git/po/hu.po +++ b/gitk-git/po/hu.po @@ -8,32 +8,41 @@ msgid "" msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-12-14 13:33+0100\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2009-12-14 14:04+0100\n" "Last-Translator: Laszlo Papp <djszapi@archlinux.us>\n" "Language-Team: Hungarian\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: gitk:115 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "Nem sikerült letölteni az unmerged fájl listát:" -#: gitk:271 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 msgid "Error parsing revisions:" msgstr "Hiba történt értelmezés közben:" -#: gitk:326 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Hiba történt a végrehajtáskor --argscmd parancs:" -#: gitk:339 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Nincsen fájl kiválasztva: --merge megadve, de egyetlen fájl sem unmerged." -#: gitk:342 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -41,299 +50,315 @@ msgstr "" "Nincsen fájl kiválasztva: --merge megadva, de nincsenek unmerged fájlok a " "fájlon belül limit." -#: gitk:364 gitk:511 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Hiba történt a git log végrehajtása közben:" -#: gitk:382 gitk:527 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Olvasás" -#: gitk:442 gitk:4258 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Commitok olvasása ..." -#: gitk:445 gitk:1575 gitk:4261 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Nincsen commit kiválasztva" -#: gitk:1451 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Nem lehet értelmezni a git log kimenetét:" -#: gitk:1671 +#: gitk:1740 msgid "No commit information available" msgstr "Nincsen elérhető commit információ" -#: gitk:1813 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1848 gitk:4051 gitk:9029 gitk:10570 gitk:10789 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "OK" -#: gitk:1850 gitk:4053 gitk:8629 gitk:8703 gitk:8813 gitk:8862 gitk:9031 -#: gitk:10571 gitk:10790 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Visszavonás" -#: gitk:1972 +#: gitk:2069 msgid "Update" msgstr "Frissités" -#: gitk:1973 +#: gitk:2070 msgid "Reload" msgstr "Újratöltés" -#: gitk:1974 +#: gitk:2071 msgid "Reread references" msgstr "Referenciák újraolvasása" -#: gitk:1975 +#: gitk:2072 msgid "List references" msgstr "Referenciák listázása" -#: gitk:1977 +#: gitk:2074 msgid "Start git gui" msgstr "Git gui indítása" -#: gitk:1979 +#: gitk:2076 msgid "Quit" msgstr "Kilépés" -#: gitk:1971 +#: gitk:2068 msgid "File" msgstr "Fájl" -#: gitk:1983 +#: gitk:2080 msgid "Preferences" msgstr "Beállítások" -#: gitk:1982 +#: gitk:2079 msgid "Edit" msgstr "Szerkesztés" -#: gitk:1987 +#: gitk:2084 msgid "New view..." msgstr "Új nézet ..." -#: gitk:1988 +#: gitk:2085 msgid "Edit view..." msgstr "Nézet szerkesztése ..." -#: gitk:1989 +#: gitk:2086 msgid "Delete view" msgstr "Nézet törlése" -#: gitk:1991 +#: gitk:2088 msgid "All files" msgstr "Minden fájl" -#: gitk:1986 gitk:3805 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Nézet" -#: gitk:1996 gitk:2006 gitk:2777 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Gitk névjegy" -#: gitk:1997 gitk:2011 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Billentyűkombináció" -#: gitk:1995 gitk:2010 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Segítség" -#: gitk:2088 -msgid "SHA1 ID: " -msgstr "SHA1 ID: " +#: gitk:2185 gitk:8633 +msgid "SHA1 ID:" +msgstr "SHA1 ID:" -#: gitk:2119 +#: gitk:2229 msgid "Row" msgstr "Sor" -#: gitk:2157 +#: gitk:2267 msgid "Find" msgstr "Keresés" -#: gitk:2158 -msgid "next" -msgstr "következő" - -#: gitk:2159 -msgid "prev" -msgstr "előző" - -#: gitk:2160 +#: gitk:2295 msgid "commit" msgstr "commit" -#: gitk:2163 gitk:2165 gitk:4419 gitk:4442 gitk:4466 gitk:6407 gitk:6479 -#: gitk:6563 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "tartalmazás:" -#: gitk:2166 gitk:3287 gitk:3292 gitk:4494 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "érintendő útvonalak:" -#: gitk:2167 gitk:4499 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "string hozzáadása/törlése:" -#: gitk:2176 gitk:2178 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Pontos" -#: gitk:2178 gitk:4574 gitk:6375 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "Kis/nagy betű nem számít" -#: gitk:2178 gitk:4468 gitk:4572 gitk:6371 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Regexp" -#: gitk:2180 gitk:2181 gitk:4593 gitk:4623 gitk:4630 gitk:6499 gitk:6567 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Minden mező" -#: gitk:2181 gitk:4591 gitk:4623 gitk:6438 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Főcím" -#: gitk:2182 gitk:4591 gitk:6438 gitk:6567 gitk:7000 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Megjegyzések" -#: gitk:2182 gitk:4591 gitk:4595 gitk:4630 gitk:6438 gitk:6935 gitk:8280 -#: gitk:8295 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Szerző" -#: gitk:2182 gitk:4591 gitk:6438 gitk:6937 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Commitoló" -#: gitk:2213 +#: gitk:2350 msgid "Search" msgstr "Keresés" -#: gitk:2221 +#: gitk:2358 msgid "Diff" msgstr "Diff" -#: gitk:2223 +#: gitk:2360 msgid "Old version" msgstr "Régi verzió" -#: gitk:2225 +#: gitk:2362 msgid "New version" msgstr "Új verzió" -#: gitk:2227 +#: gitk:2364 msgid "Lines of context" msgstr "Tartalmi sorok" -#: gitk:2237 +#: gitk:2374 msgid "Ignore space change" msgstr "Space váltás mellőzése" -#: gitk:2296 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Patch" -#: gitk:2298 +#: gitk:2447 msgid "Tree" msgstr "Tree" -#: gitk:2453 gitk:2470 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Diff ezeket -> kiválasztott" -#: gitk:2454 gitk:2471 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Diff kiválasztottakat -> ezt" -#: gitk:2455 gitk:2472 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Patch készítése" -#: gitk:2456 gitk:8687 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Tag készítése" -#: gitk:2457 gitk:8793 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Commit fáljba írása" -#: gitk:2458 gitk:8850 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Új branch készítése" -#: gitk:2459 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Cherry-pick erre a commitra" -#: gitk:2460 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "HEAD branch újraindítása ide" -#: gitk:2461 +#: gitk:2624 msgid "Mark this commit" msgstr "Ezen commit megjelölése" -#: gitk:2462 +#: gitk:2625 msgid "Return to mark" msgstr "Visszatérés a megjelöléshez" -#: gitk:2463 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Találd meg ezen utódokat és jelöld meg" -#: gitk:2464 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Összehasonlítás a megjelölt commit-tal" -#: gitk:2478 +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Diff ezeket -> kiválasztott" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Diff kiválasztottakat -> ezt" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Ezen commit megjelölése" + +#: gitk:2646 msgid "Check out this branch" msgstr "Check out ezt a branchot" -#: gitk:2479 +#: gitk:2647 msgid "Remove this branch" msgstr "Töröld ezt a branch-ot" -#: gitk:2486 +#: gitk:2654 msgid "Highlight this too" msgstr "Emeld ki ezt is" -#: gitk:2487 +#: gitk:2655 msgid "Highlight this only" msgstr "Csak ezt emeld ki" -#: gitk:2488 +#: gitk:2656 msgid "External diff" msgstr "Külső diff" -#: gitk:2489 +#: gitk:2657 msgid "Blame parent commit" msgstr "Blame szülő kommitra" -#: gitk:2496 +#: gitk:2664 msgid "Show origin of this line" msgstr "Mutasd meg ennek a sornak az eredetét" -#: gitk:2497 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Futtasd a git gui blame-t ezen a soron" -#: gitk:2779 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -344,298 +369,316 @@ msgstr "" "\n" "Használd és terjeszd a GNU General Public License feltételei mellett" -#: gitk:2787 gitk:2851 gitk:9215 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Bezárás" -#: gitk:2808 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Gitk-billentyű hozzárendelés" -#: gitk:2811 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Gitk-billentyű hozzaárendelés:" -#: gitk:2813 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tKilépés" -#: gitk:2814 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\tKeresés" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Pos1>\t\tElső commithoz" -#: gitk:2815 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<Ende>\t\tUtolsó commithoz" -#: gitk:2816 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Hoch>, p, i\tEgy committal feljebb" -#: gitk:2817 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Runter>, n, k\tEgy committal lejjebb" -#: gitk:2818 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Links>, z, j\tVissza a history listába" -#: gitk:2819 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Rechts>, x, l\tElőre a history listába" -#: gitk:2820 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<BildHoch>\tEgy lappal feljebb a commit listába" -#: gitk:2821 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<BildRunter>\tEgy lappal lejjebb a commit listába" -#: gitk:2822 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Pos1>\tGörgetés a commit lista tetejéhez" -#: gitk:2823 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-Ende>\tGörgetés a commit lista aljához" -#: gitk:2824 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Hoch>\tEgy sorral feljebb görgetés a commit listában" -#: gitk:2825 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Runter>\tEgy sorral lejjebb görgetés a commit listában" -#: gitk:2826 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-BildHoch>\tEgy lappal feljebb görgetés a commit listában" -#: gitk:2827 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-BildRunter>\tEgy sorral lejjebb görgetés a commit listában" -#: gitk:2828 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Umschalt-Hoch>\tKeresés visszafele (felfele, utolsó commitok)" -#: gitk:2829 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Umschalt-Runter>\tKeresés előre (lefelé; korábbi commitok)" -#: gitk:2830 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Entf>, b\t\tEgy lappal feljebb görgetés a diff nézetben" -#: gitk:2831 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Löschtaste>\tEgy lappal feljebb görgetés a diff nézetben" -#: gitk:2832 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Leertaste>\tEgy lappal lejjebb görgetés a diff nézetben" -#: gitk:2833 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\t18 sorral felfelé görgetés diff nézetben" -#: gitk:2834 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\t18 sorral lejjebb görgetés a diff nézetben" -#: gitk:2835 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tKeresés" -#: gitk:2836 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tKövetkező találathoz" -#: gitk:2837 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Eingabetaste>\tKövetkező találathoz" -#: gitk:2838 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tLépj a keresési mezőre" -#: gitk:2839 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tElőző találathoz" -#: gitk:2840 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tKövetkező fájlra görgetés diff nézetben" -#: gitk:2841 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tKövetkező találatra keresés diff nézetben" -#: gitk:2842 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tElőző találatra keresés diff nézetben" -#: gitk:2843 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-Nummerblock-Plus>\tBetűméret növelése" -#: gitk:2844 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-Plus>\tBetűméret növelése" -#: gitk:2845 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-Nummernblock-Minus> Betűméret csökkentése" -#: gitk:2846 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-Minus>\tBetűméret csökkentése" -#: gitk:2847 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tFrissítés" -#: gitk:3302 gitk:3311 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Hiba történt az ideiglenes könyvtár létrehozása közben %s:" -#: gitk:3324 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Hiba történt \"%s\" letöltése közben %s-ről:" -#: gitk:3387 +#: gitk:3631 msgid "command failed:" msgstr "parancs hiba:" -#: gitk:3536 +#: gitk:3780 msgid "No such commit" msgstr "Nincs ilyen commit" -#: gitk:3550 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: parancs hiba:" -#: gitk:3581 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Nem sikerült a Merge head olvasása: %s" -#: gitk:3589 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Hiba történt az index olvasása közben: %s" -#: gitk:3614 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Nem sikerült a git blame indítása: %s" -#: gitk:3617 gitk:6406 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Keresés" -#: gitk:3649 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Hiba történt a git blame futtatása közben: %s" -#: gitk:3677 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "" "A %s commitból származik az a sor, amelyik nem található ebben a nézetben" -#: gitk:3691 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Külső diff nézegető hiba:" -#: gitk:3809 +#: gitk:4053 msgid "Gitk view definition" msgstr "Gitk nézet meghatározása" -#: gitk:3813 +#: gitk:4057 msgid "Remember this view" msgstr "Maradj ennél a nézetnél" -#: gitk:3814 +#: gitk:4058 msgid "References (space separated list):" msgstr "Referenciák (szóközzel tagolt lista" -#: gitk:3815 +#: gitk:4059 msgid "Branches & tags:" msgstr "Branch-ek & tagek:" -#: gitk:3816 +#: gitk:4060 msgid "All refs" msgstr "Minden ref" -#: gitk:3817 +#: gitk:4061 msgid "All (local) branches" msgstr "Minden (helyi) branch" -#: gitk:3818 +#: gitk:4062 msgid "All tags" msgstr "Minden tag" -#: gitk:3819 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Minden távoli követő branch" -#: gitk:3820 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Commit Infó (reguláris kifejezés):" -#: gitk:3821 +#: gitk:4065 msgid "Author:" msgstr "Szerző:" -#: gitk:3822 +#: gitk:4066 msgid "Committer:" msgstr "Commitoló:" -#: gitk:3823 +#: gitk:4067 msgid "Commit Message:" msgstr "Commit üzenet:" -#: gitk:3824 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Egyezik minen Commit Infó feltétellel" -#: gitk:3825 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Egyezik minen Commit Infó feltétellel" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Fájl változások:" -#: gitk:3826 +#: gitk:4071 msgid "Fixed String" msgstr "Fix String" -#: gitk:3827 +#: gitk:4072 msgid "Regular Expression" msgstr "Reguláris kifejezés" -#: gitk:3828 +#: gitk:4073 msgid "Search string:" msgstr "Keresés szöveg:" -#: gitk:3829 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -643,206 +686,203 @@ msgstr "" "Commit Dátumok (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -#: gitk:3830 +#: gitk:4075 msgid "Since:" msgstr "Ettől:" -#: gitk:3831 +#: gitk:4076 msgid "Until:" msgstr "Eddig:" -#: gitk:3832 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Limitálva és/vagy kihagyva egy adott számú revíziót (pozitív egész):" -#: gitk:3833 +#: gitk:4078 msgid "Number to show:" msgstr "Mutatandó szám:" -#: gitk:3834 +#: gitk:4079 msgid "Number to skip:" msgstr "Kihagyandó szám:" -#: gitk:3835 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Különféle opciók:" -#: gitk:3836 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Szigorú rendezás dátum alapján" -#: gitk:3837 +#: gitk:4082 msgid "Mark branch sides" msgstr "Jelölje meg az ágakat" -#: gitk:3838 +#: gitk:4083 msgid "Limit to first parent" msgstr "Korlátozás az első szülőre" -#: gitk:3839 +#: gitk:4084 msgid "Simple history" msgstr "Egyszerű history" -#: gitk:3840 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "További argumentok a git log-hoz:" -#: gitk:3841 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Fájlok és könyvtárak bejegyzése amiket tartalmaz, soronként:" -#: gitk:3842 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Parancs több tartalmazó commit generálására:" -#: gitk:3964 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: szerkesztés nézet" -#: gitk:3972 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "-- kritériumok a revíziók kiválasztásához" -#: gitk:3977 +#: gitk:4224 msgid "View Name" msgstr "Nézet neve" -#: gitk:4052 +#: gitk:4299 msgid "Apply (F5)" msgstr "Alkalmaz (F5)" -#: gitk:4090 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Hiba történt a commit argumentumok kiválasztása közben:" -#: gitk:4143 gitk:4195 gitk:4643 gitk:4657 gitk:5918 gitk:11519 gitk:11520 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Keine" -#: gitk:4591 gitk:6438 gitk:8282 gitk:8297 -msgid "Date" -msgstr "Dátum" - -#: gitk:4591 gitk:6438 -msgid "CDate" -msgstr "Dátum" - -#: gitk:4740 gitk:4745 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Leszármazott" -#: gitk:4741 +#: gitk:5004 msgid "Not descendant" msgstr "Nem leszármazott" -#: gitk:4748 gitk:4753 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Előd" -#: gitk:4749 +#: gitk:5012 msgid "Not ancestor" msgstr "Nem előd" -#: gitk:5039 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "" "Lokális változtatások, melyek be vannak téve az indexbe, de még nincsenek " "commitolva" -#: gitk:5075 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Lokális nem commitolt változások, nincsenek betéve az indexbe" -#: gitk:6756 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 msgid "many" msgstr "sok" -#: gitk:6939 +#: gitk:7309 msgid "Tags:" msgstr "Tagek:" -#: gitk:6956 gitk:6962 gitk:8275 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Eltern" -#: gitk:6967 +#: gitk:7337 msgid "Child" msgstr "Gyerek" -#: gitk:6976 +#: gitk:7346 msgid "Branch" msgstr "Ág" -#: gitk:6979 +#: gitk:7349 msgid "Follows" msgstr "Következők" -#: gitk:6982 +#: gitk:7352 msgid "Precedes" msgstr "Megelőzők" -#: gitk:7519 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Hiba történt a diff-ek letöltése közben: %s" -#: gitk:8103 +#: gitk:8631 msgid "Goto:" msgstr "Menj:" -#: gitk:8105 -msgid "SHA1 ID:" -msgstr "SHA1 ID:" - -#: gitk:8124 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Rövid SHA1 id %s félreérthető" -#: gitk:8131 +#: gitk:8659 +#, tcl-format msgid "Revision %s is not known" msgstr "A(z) %s revízió nem ismert" -#: gitk:8141 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "SHA1 id %s nem ismert" -#: gitk:8143 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "A(z) %s revízió nincs a jelenlegi nézetben" -#: gitk:8285 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Dátum" + +#: gitk:8816 msgid "Children" msgstr "Gyerekek" -#: gitk:8343 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Állítsd vissza a %s branch-ot ide" -#: gitk:8345 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Elkülönített head: nem lehet visszaállítani" -#: gitk:8454 gitk:8460 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Merge commit kihagyása " -#: gitk:8469 gitk:8474 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Hiba történt a patch ID megszerzése közben a következőnél " -#: gitk:8470 gitk:8475 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - abbahagyás\n" -#: gitk:8480 gitk:8483 gitk:8491 gitk:8505 gitk:8514 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Commit " -#: gitk:8484 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -850,7 +890,7 @@ msgstr "" " Ugyanaz a patch mint\n" " " -#: gitk:8492 +#: gitk:9024 msgid "" " differs from\n" " " @@ -858,7 +898,7 @@ msgstr "" " különbözik innentől\n" " " -#: gitk:8494 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -866,121 +906,132 @@ msgstr "" "A commitok diffje:\n" "\n" -#: gitk:8506 gitk:8515 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " %s gyereke van. abbahagyás\n" -#: gitk:8534 +#: gitk:9066 +#, tcl-format msgid "Error writing commit to file: %s" msgstr "Hiba történt a commit fájlba írása közben: %s" -#: gitk:8540 +#: gitk:9072 +#, tcl-format msgid "Error diffing commits: %s" msgstr "Hiba történt a commitok diffelése közben: %s" -#: gitk:8570 +#: gitk:9118 msgid "Top" msgstr "Teteje" -#: gitk:8571 +#: gitk:9119 msgid "From" msgstr "Innen" -#: gitk:8576 +#: gitk:9124 msgid "To" msgstr "Ide" -#: gitk:8600 +#: gitk:9148 msgid "Generate patch" msgstr "Patch generálása" -#: gitk:8602 +#: gitk:9150 msgid "From:" msgstr "Innen:" -#: gitk:8611 +#: gitk:9159 msgid "To:" msgstr "Ide:" -#: gitk:8620 +#: gitk:9168 msgid "Reverse" msgstr "Visszafele" -#: gitk:8622 gitk:8807 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Kimeneti fájl:" -#: gitk:8628 +#: gitk:9176 msgid "Generate" msgstr "Generálás" -#: gitk:8666 +#: gitk:9214 msgid "Error creating patch:" msgstr "Hiba törtét a patch készítése közben:" -#: gitk:8689 gitk:8795 gitk:8852 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:8698 +#: gitk:9246 msgid "Tag name:" msgstr "Tag név:" -#: gitk:8702 gitk:8861 +#: gitk:9249 +msgid "Tag message is optional" +msgstr "" + +#: gitk:9251 +#, fuzzy +msgid "Tag message:" +msgstr "Tag név:" + +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Létrehozás" -#: gitk:8719 +#: gitk:9273 msgid "No tag name specified" msgstr "A tag neve nincsen megadva" -#: gitk:8723 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "%s Tag már létezik" -#: gitk:8729 +#: gitk:9287 msgid "Error creating tag:" msgstr "Hiba történt a tag létrehozása közben:" -#: gitk:8804 +#: gitk:9363 msgid "Command:" msgstr "Parancs:" -#: gitk:8812 +#: gitk:9371 msgid "Write" msgstr "Írás" -#: gitk:8830 +#: gitk:9389 msgid "Error writing commit:" msgstr "Hiba történt a commit írása közben:" -#: gitk:8857 +#: gitk:9416 msgid "Name:" msgstr "Név:" -#: gitk:8880 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Kérem adja meg a nevét az új branchhoz" -#: gitk:8885 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "%s branch már létezik. Felülírja?" -#: gitk:8951 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" "%s commit már benne van a %s branchban -- biztos hogy újra csinálja ?" "eintragen?" -#: gitk:8956 +#: gitk:9516 msgid "Cherry-picking" msgstr "Cherry-picking" -#: gitk:8965 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -990,7 +1041,7 @@ msgstr "" "Kérem commitolja, indítsa újra vagy rejtse el a változtatásait és próbálja " "újra." -#: gitk:8971 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -998,32 +1049,63 @@ msgstr "" "Cherry-pick hiba történt merge konfliktus miatt.\n" "Kívánja futtatni a git citool-t a probléma megoldásához?" -#: gitk:8987 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Nincsen változás commitolva" -#: gitk:9013 +#: gitk:9574 +#, fuzzy, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "" +"%s commit már benne van a %s branchban -- biztos hogy újra csinálja ?" +"eintragen?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "Újraindítás" + +#: gitk:9587 +#, fuzzy, 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 "" +"Cherry-pick hiba történt lokális váltotások miatt a '%s' fájlban.\n" +"Kérem commitolja, indítsa újra vagy rejtse el a változtatásait és próbálja " +"újra." + +#: gitk:9591 +#, fuzzy +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" +"Cherry-pick hiba történt merge konfliktus miatt.\n" +"Kívánja futtatni a git citool-t a probléma megoldásához?" + +#: gitk:9634 msgid "Confirm reset" msgstr "Újraindítás megerősítése" -#: gitk:9015 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Újraindítja a %s branchot %s-ig?" -#: gitk:9017 +#: gitk:9638 msgid "Reset type:" msgstr "Újraindítás típusa:" -#: gitk:9020 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Soft: Hagyd a working tree-t és az indexet érintetlenül" -#: gitk:9023 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Kevert: Hagyd a working tree-t érintetlenül, töröld az indexet" -#: gitk:9026 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1031,19 +1113,19 @@ msgstr "" "Hard: Indítsd újra a working tree-t és az indexet\n" "(MINDEN lokális változás eldobása)" -#: gitk:9043 +#: gitk:9664 msgid "Resetting" msgstr "Újraindítás" -#: gitk:9103 +#: gitk:9724 msgid "Checking out" msgstr "Kivesz" -#: gitk:9156 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Nem lehet a jelenleg kivett branch-ot törölni" -#: gitk:9162 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1052,16 +1134,16 @@ msgstr "" "A %s branchon található commit nem található meg semelyik másik branchon.\n" "Tényleg törli a %s branchot?" -#: gitk:9193 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Tagek és headek: %s" -#: gitk:9208 +#: gitk:9829 msgid "Filter" msgstr "Szűrő" -#: gitk:9503 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1069,206 +1151,235 @@ msgstr "" "Hiba történt a commit topológiai információ olvasása közben; branch ésa " "megelőző/következő információ nem lesz teljes." -#: gitk:10489 +#: gitk:11102 msgid "Tag" msgstr "Tag" -#: gitk:10489 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:10539 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Gitk-betű kiválasztó" -#: gitk:10556 +#: gitk:11206 msgid "B" msgstr "F" -#: gitk:10559 +#: gitk:11209 msgid "I" msgstr "K" -#: gitk:10677 -msgid "Gitk preferences" -msgstr "Gitk beállítások" - -#: gitk:10679 +#: gitk:11327 msgid "Commit list display options" msgstr "Commit lista kijelzési opciók" -#: gitk:10682 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Maximális grafikon szélesség (sorok)" -#: gitk:10685 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Maximális grafikon szélesség (táble %-je)" -#: gitk:10688 +#: gitk:11337 msgid "Show local changes" msgstr "Mutasd a lokális változtatásokat" -#: gitk:10691 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "SHA1 Automatikus kiválasztása" -#: gitk:10694 +#: gitk:11344 msgid "Hide remote refs" msgstr "A távoli refek elrejtése" -#: gitk:10698 +#: gitk:11348 msgid "Diff display options" msgstr "Diff kijelző opciók" -#: gitk:10700 +#: gitk:11350 msgid "Tab spacing" msgstr "Tab sorköz" -#: gitk:10703 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Szomszédos tagek kijelzése" -#: gitk:10706 +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" + +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Korlátozott diffek a kilistázott útvonalakhoz" -#: gitk:10709 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Fájlonkénti kódolás támgatása" -#: gitk:10715 gitk:10804 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Külső diff alkalmazás" -#: gitk:10716 +#: gitk:11369 msgid "Choose..." msgstr "Válaszd ..." -#: gitk:10721 +#: gitk:11374 msgid "General options" msgstr "Általános opciók" -#: gitk:10724 +#: gitk:11377 msgid "Use themed widgets" msgstr "Témázott vezérlők használata" -#: gitk:10726 +#: gitk:11379 msgid "(change requires restart)" msgstr "(a változás újraindítást igényel)" -#: gitk:10728 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(jelenleg nem elérhető)" -#: gitk:10732 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Színek: nyomja meg a kiválasztáshoz" -#: gitk:10735 +#: gitk:11395 msgid "Interface" msgstr "Interfész" -#: gitk:10736 +#: gitk:11396 msgid "interface" msgstr "interfész" -#: gitk:10739 +#: gitk:11399 msgid "Background" msgstr "Háttér" -#: gitk:10740 gitk:10770 +#: gitk:11400 gitk:11430 msgid "background" msgstr "háttér" -#: gitk:10743 +#: gitk:11403 msgid "Foreground" msgstr "Előtér" -#: gitk:10744 +#: gitk:11404 msgid "foreground" msgstr "előtér" -#: gitk:10747 +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff: régi sorok" -#: gitk:10748 +#: gitk:11408 msgid "diff old lines" msgstr "diff régi sorok" -#: gitk:10752 +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff: új sorok" -#: gitk:10753 +#: gitk:11413 msgid "diff new lines" msgstr "diff - új sorok" -#: gitk:10757 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff: nagy headerök" -#: gitk:10759 +#: gitk:11419 msgid "diff hunk header" msgstr "diff - nagy headerök" -#: gitk:10763 +#: gitk:11423 msgid "Marked line bg" msgstr "Megjelölt sor háttér" -#: gitk:10765 +#: gitk:11425 msgid "marked line background" msgstr "megjelölt sor háttér" -#: gitk:10769 +#: gitk:11429 msgid "Select bg" msgstr "Válasszon hátteret" -#: gitk:10773 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Betű: nyomja meg a kiválasztáshoz" -#: gitk:10775 +#: gitk:11440 msgid "Main font" msgstr "Fő betű" -#: gitk:10776 +#: gitk:11441 msgid "Diff display font" msgstr "Diff kijelző betű" -#: gitk:10777 +#: gitk:11442 msgid "User interface font" msgstr "Felhasználói interfész betű" -#: gitk:10814 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Gitk beállítások" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Generálás" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: válasszon színt a %s-ra" -#: gitk:11418 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Nem találhatü git repository itt." -#: gitk:11422 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "Nem található a \"%s\" könyvtár." - -#: gitk:11469 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Félreérthető argumentum '%s': revízió és fájlnév is" -#: gitk:11481 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Rossz gitk argumentumok:" -#: gitk:11572 +#: gitk:12405 msgid "Command line" msgstr "Parancs sor" +#~ msgid "SHA1 ID: " +#~ msgstr "SHA1 ID: " + +#~ msgid "next" +#~ msgstr "következő" + +#~ msgid "prev" +#~ msgstr "előző" + +#~ msgid "CDate" +#~ msgstr "Dátum" + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "Nem található a \"%s\" könyvtár." + #~ msgid "Use all refs" #~ msgstr "Használd az összes referenciát" diff --git a/gitk-git/po/it.po b/gitk-git/po/it.po index a730d63a42..d630bb086d 100644 --- a/gitk-git/po/it.po +++ b/gitk-git/po/it.po @@ -8,33 +8,42 @@ msgid "" msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-28 18:40+0100\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2010-01-28 18:41+0100\n" "Last-Translator: Michele Ballabio <barra_cuda@katamail.com>\n" "Language-Team: Italian\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: gitk:115 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "Impossibile ottenere l'elenco dei file in attesa di fusione:" -#: gitk:274 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 msgid "Error parsing revisions:" msgstr "Errore nella lettura delle revisioni:" -#: gitk:329 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Errore nell'esecuzione del comando specificato con --argscmd:" -#: gitk:342 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Nessun file selezionato: è stata specificata l'opzione --merge ma non ci " "sono file in attesa di fusione." -#: gitk:345 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -42,299 +51,315 @@ msgstr "" "Nessun file selezionato: è stata specificata l'opzione --merge ma i file " "specificati non sono in attesa di fusione." -#: gitk:367 gitk:514 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Errore nell'esecuzione di git log:" -#: gitk:385 gitk:530 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Lettura in corso" -#: gitk:445 gitk:4261 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Lettura delle revisioni in corso..." -#: gitk:448 gitk:1578 gitk:4264 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Nessuna revisione selezionata" -#: gitk:1454 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Impossibile elaborare i dati di git log:" -#: gitk:1674 +#: gitk:1740 msgid "No commit information available" msgstr "Nessuna informazione disponibile sulle revisioni" -#: gitk:1816 +#: gitk:1897 msgid "mc" msgstr "" -#: gitk:1851 gitk:4054 gitk:9044 gitk:10585 gitk:10804 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "OK" -#: gitk:1853 gitk:4056 gitk:8634 gitk:8713 gitk:8828 gitk:8877 gitk:9046 -#: gitk:10586 gitk:10805 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Annulla" -#: gitk:1975 +#: gitk:2069 msgid "Update" msgstr "Aggiorna" -#: gitk:1976 +#: gitk:2070 msgid "Reload" msgstr "Ricarica" -#: gitk:1977 +#: gitk:2071 msgid "Reread references" msgstr "Rileggi riferimenti" -#: gitk:1978 +#: gitk:2072 msgid "List references" msgstr "Elenca riferimenti" -#: gitk:1980 +#: gitk:2074 msgid "Start git gui" msgstr "Avvia git gui" -#: gitk:1982 +#: gitk:2076 msgid "Quit" msgstr "Esci" -#: gitk:1974 +#: gitk:2068 msgid "File" msgstr "File" -#: gitk:1986 +#: gitk:2080 msgid "Preferences" msgstr "Preferenze" -#: gitk:1985 +#: gitk:2079 msgid "Edit" msgstr "Modifica" -#: gitk:1990 +#: gitk:2084 msgid "New view..." msgstr "Nuova vista..." -#: gitk:1991 +#: gitk:2085 msgid "Edit view..." msgstr "Modifica vista..." -#: gitk:1992 +#: gitk:2086 msgid "Delete view" msgstr "Elimina vista" -#: gitk:1994 +#: gitk:2088 msgid "All files" msgstr "Tutti i file" -#: gitk:1989 gitk:3808 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Vista" -#: gitk:1999 gitk:2009 gitk:2780 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Informazioni su gitk" -#: gitk:2000 gitk:2014 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Scorciatoie da tastiera" -#: gitk:1998 gitk:2013 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Aiuto" -#: gitk:2091 gitk:8110 +#: gitk:2185 gitk:8633 msgid "SHA1 ID:" msgstr "SHA1 ID:" -#: gitk:2122 +#: gitk:2229 msgid "Row" msgstr "Riga" -#: gitk:2160 +#: gitk:2267 msgid "Find" msgstr "Trova" -#: gitk:2161 -msgid "next" -msgstr "succ" - -#: gitk:2162 -msgid "prev" -msgstr "prec" - -#: gitk:2163 +#: gitk:2295 msgid "commit" msgstr "revisione" -#: gitk:2166 gitk:2168 gitk:4422 gitk:4445 gitk:4469 gitk:6410 gitk:6482 -#: gitk:6566 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "contenente:" -#: gitk:2169 gitk:3290 gitk:3295 gitk:4497 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "che riguarda i percorsi:" -#: gitk:2170 gitk:4502 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "che aggiunge/rimuove la stringa:" -#: gitk:2179 gitk:2181 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Esatto" -#: gitk:2181 gitk:4577 gitk:6378 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "" -#: gitk:2181 gitk:4471 gitk:4575 gitk:6374 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "" -#: gitk:2183 gitk:2184 gitk:4596 gitk:4626 gitk:4633 gitk:6502 gitk:6570 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Tutti i campi" -#: gitk:2184 gitk:4594 gitk:4626 gitk:6441 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Titolo" -#: gitk:2185 gitk:4594 gitk:6441 gitk:6570 gitk:7003 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Commenti" -#: gitk:2185 gitk:4594 gitk:4598 gitk:4633 gitk:6441 gitk:6938 gitk:8285 -#: gitk:8300 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Autore" -#: gitk:2185 gitk:4594 gitk:6441 gitk:6940 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Revisione creata da" -#: gitk:2216 +#: gitk:2350 msgid "Search" msgstr "Cerca" -#: gitk:2224 +#: gitk:2358 msgid "Diff" msgstr "" -#: gitk:2226 +#: gitk:2360 msgid "Old version" msgstr "Vecchia versione" -#: gitk:2228 +#: gitk:2362 msgid "New version" msgstr "Nuova versione" -#: gitk:2230 +#: gitk:2364 msgid "Lines of context" msgstr "Linee di contesto" -#: gitk:2240 +#: gitk:2374 msgid "Ignore space change" msgstr "Ignora modifiche agli spazi" -#: gitk:2299 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Modifiche" -#: gitk:2301 +#: gitk:2447 msgid "Tree" msgstr "Directory" -#: gitk:2456 gitk:2473 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Diff questo -> selezionato" -#: gitk:2457 gitk:2474 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Diff selezionato -> questo" -#: gitk:2458 gitk:2475 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Crea patch" -#: gitk:2459 gitk:8692 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Crea etichetta" -#: gitk:2460 gitk:8808 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Scrivi revisione in un file" -#: gitk:2461 gitk:8865 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Crea un nuovo ramo" -#: gitk:2462 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Porta questa revisione in cima al ramo attuale" -#: gitk:2463 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Aggiorna il ramo HEAD a questa revisione" -#: gitk:2464 +#: gitk:2624 msgid "Mark this commit" msgstr "Segna questa revisione" -#: gitk:2465 +#: gitk:2625 msgid "Return to mark" msgstr "Torna alla revisione segnata" -#: gitk:2466 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Trova il discendente di questa revisione e di quella segnata" -#: gitk:2467 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Confronta con la revisione segnata" -#: gitk:2481 +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Diff questo -> selezionato" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Diff selezionato -> questo" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Segna questa revisione" + +#: gitk:2646 msgid "Check out this branch" msgstr "Attiva questo ramo" -#: gitk:2482 +#: gitk:2647 msgid "Remove this branch" msgstr "Elimina questo ramo" -#: gitk:2489 +#: gitk:2654 msgid "Highlight this too" msgstr "Evidenzia anche questo" -#: gitk:2490 +#: gitk:2655 msgid "Highlight this only" msgstr "Evidenzia solo questo" -#: gitk:2491 +#: gitk:2656 msgid "External diff" msgstr "Visualizza differenze in un altro programma" -#: gitk:2492 +#: gitk:2657 msgid "Blame parent commit" msgstr "Annota la revisione precedente" -#: gitk:2499 +#: gitk:2664 msgid "Show origin of this line" msgstr "Mostra la provenienza di questa riga" -#: gitk:2500 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Esegui git gui blame su questa riga" -#: gitk:2782 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -346,298 +371,316 @@ msgstr "" "Utilizzo e redistribuzione permessi sotto i termini della GNU General Public " "License" -#: gitk:2790 gitk:2854 gitk:9230 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Chiudi" -#: gitk:2811 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Scorciatoie da tastiera di Gitk" -#: gitk:2814 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Scorciatoie da tastiera di Gitk:" -#: gitk:2816 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tEsci" -#: gitk:2817 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\tTrova" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tVai alla prima revisione" -#: gitk:2818 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tVai all'ultima revisione" -#: gitk:2819 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Su>, p, i\tVai più in alto di una revisione" -#: gitk:2820 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Giù>, n, k\tVai più in basso di una revisione" -#: gitk:2821 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Sinistra>, z, j\tTorna indietro nella cronologia" -#: gitk:2822 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Destra>, x, l\tVai avanti nella cronologia" -#: gitk:2823 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PaginaSu>\tVai più in alto di una pagina nella lista delle revisioni" -#: gitk:2824 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "" "<PaginaGiù>\tVai più in basso di una pagina nella lista delle revisioni" -#: gitk:2825 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tScorri alla cima della lista delle revisioni" -#: gitk:2826 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tScorri alla fine della lista delle revisioni" -#: gitk:2827 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Su>\tScorri la lista delle revisioni in alto di una riga" -#: gitk:2828 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Giù>\tScorri la lista delle revisioni in basso di una riga" -#: gitk:2829 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PaginaSu>\tScorri la lista delle revisioni in alto di una pagina" -#: gitk:2830 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PaginaGiù>\tScorri la lista delle revisioni in basso di una pagina" -#: gitk:2831 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Su>\tTrova all'indietro (verso l'alto, revisioni successive)" -#: gitk:2832 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Shift-Giù>\tTrova in avanti (verso il basso, revisioni precedenti)" -#: gitk:2833 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tScorri la vista delle differenze in alto di una pagina" -#: gitk:2834 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tScorri la vista delle differenze in alto di una pagina" -#: gitk:2835 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Spazio>\t\tScorri la vista delle differenze in basso di una pagina" -#: gitk:2836 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tScorri la vista delle differenze in alto di 18 linee" -#: gitk:2837 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tScorri la vista delle differenze in basso di 18 linee" -#: gitk:2838 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tTrova" -#: gitk:2839 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tTrova in avanti" -#: gitk:2840 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Invio>\tTrova in avanti" -#: gitk:2841 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tCursore nel box di ricerca" -#: gitk:2842 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tTrova all'indietro" -#: gitk:2843 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tScorri la vista delle differenze al file successivo" -#: gitk:2844 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tCerca in avanti nella vista delle differenze" -#: gitk:2845 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tCerca all'indietro nella vista delle differenze" -#: gitk:2846 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tAumenta dimensione carattere" -#: gitk:2847 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-più>\tAumenta dimensione carattere" -#: gitk:2848 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tDiminuisci dimensione carattere" -#: gitk:2849 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-meno>\tDiminuisci dimensione carattere" -#: gitk:2850 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tAggiorna" -#: gitk:3305 gitk:3314 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Errore durante la creazione della directory temporanea %s:" -#: gitk:3327 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Errore nella lettura di \"%s\" da %s:" -#: gitk:3390 +#: gitk:3631 msgid "command failed:" msgstr "impossibile eseguire il comando:" -#: gitk:3539 +#: gitk:3780 msgid "No such commit" msgstr "Revisione inesistente" -#: gitk:3553 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: impossibile eseguire il comando:" -#: gitk:3584 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Impossibile leggere merge head: %s" -#: gitk:3592 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Errore nella lettura dell'indice: %s" -#: gitk:3617 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Impossibile eseguire git blame: %s" -#: gitk:3620 gitk:6409 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Ricerca in corso" -#: gitk:3652 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Errore nell'esecuzione di git blame: %s" -#: gitk:3680 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Quella riga proviene dalla revisione %s, non presente in questa vista" -#: gitk:3694 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Impossibile eseguire il visualizzatore di differenze:" -#: gitk:3812 +#: gitk:4053 msgid "Gitk view definition" msgstr "Scelta vista Gitk" -#: gitk:3816 +#: gitk:4057 msgid "Remember this view" msgstr "Ricorda questa vista" -#: gitk:3817 +#: gitk:4058 msgid "References (space separated list):" msgstr "Riferimenti (lista di elementi separati da spazi)" -#: gitk:3818 +#: gitk:4059 msgid "Branches & tags:" msgstr "Rami ed etichette" -#: gitk:3819 +#: gitk:4060 msgid "All refs" msgstr "Tutti i riferimenti" -#: gitk:3820 +#: gitk:4061 msgid "All (local) branches" msgstr "Tutti i rami (locali)" -#: gitk:3821 +#: gitk:4062 msgid "All tags" msgstr "Tutte le etichette" -#: gitk:3822 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Tutti i rami remoti" -#: gitk:3823 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Informazioni sulla revisione (espressioni regolari):" -#: gitk:3824 +#: gitk:4065 msgid "Author:" msgstr "Autore:" -#: gitk:3825 +#: gitk:4066 msgid "Committer:" msgstr "Revisione creata da:" -#: gitk:3826 +#: gitk:4067 msgid "Commit Message:" msgstr "Messaggio di revisione:" -#: gitk:3827 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Risponde a tutti i criteri di ricerca sulle revisioni" -#: gitk:3828 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Risponde a tutti i criteri di ricerca sulle revisioni" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Modifiche ai file:" -#: gitk:3829 +#: gitk:4071 msgid "Fixed String" msgstr "Stringa fissa" -#: gitk:3830 +#: gitk:4072 msgid "Regular Expression" msgstr "Espressione regolare" -#: gitk:3831 +#: gitk:4073 msgid "Search string:" msgstr "Cerca stringa:" -#: gitk:3832 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -645,201 +688,201 @@ msgstr "" "Date di revisione (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, " "2009 15:27:38\"):" -#: gitk:3833 +#: gitk:4075 msgid "Since:" msgstr "Da:" -#: gitk:3834 +#: gitk:4076 msgid "Until:" msgstr "A:" -#: gitk:3835 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Limita e/o salta N revisioni (intero positivo):" -#: gitk:3836 +#: gitk:4078 msgid "Number to show:" msgstr "Numero di revisioni da mostrare:" -#: gitk:3837 +#: gitk:4079 msgid "Number to skip:" msgstr "Numero di revisioni da saltare:" -#: gitk:3838 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Altre opzioni:" -#: gitk:3839 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Ordina solo per data" -#: gitk:3840 +#: gitk:4082 msgid "Mark branch sides" msgstr "Segna i lati del ramo" -#: gitk:3841 +#: gitk:4083 msgid "Limit to first parent" msgstr "Limita al primo genitore" -#: gitk:3842 +#: gitk:4084 msgid "Simple history" msgstr "Cronologia semplificata" -#: gitk:3843 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Ulteriori argomenti da passare a git log:" -#: gitk:3844 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Inserire file e directory da includere, uno per riga:" -#: gitk:3845 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Comando che genera altre revisioni da visualizzare:" -#: gitk:3967 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: modifica vista" -#: gitk:3975 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "-- criteri per la scelta delle revisioni" -#: gitk:3980 +#: gitk:4224 msgid "View Name" msgstr "Nome vista" -#: gitk:4055 +#: gitk:4299 msgid "Apply (F5)" msgstr "Applica (F5)" -#: gitk:4093 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Errore negli argomenti di selezione delle revisioni:" -#: gitk:4146 gitk:4198 gitk:4646 gitk:4660 gitk:5921 gitk:11534 gitk:11535 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Nessuno" -#: gitk:4594 gitk:6441 gitk:8287 gitk:8302 -msgid "Date" -msgstr "Data" - -#: gitk:4594 gitk:6441 -msgid "CDate" -msgstr "" - -#: gitk:4743 gitk:4748 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Discendente" -#: gitk:4744 +#: gitk:5004 msgid "Not descendant" msgstr "Non discendente" -#: gitk:4751 gitk:4756 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Ascendente" -#: gitk:4752 +#: gitk:5012 msgid "Not ancestor" msgstr "Non ascendente" -#: gitk:5042 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Modifiche locali presenti nell'indice ma non nell'archivio" -#: gitk:5078 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Modifiche locali non presenti né nell'archivio né nell'indice" -#: gitk:6759 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 msgid "many" msgstr "molti" -#: gitk:6942 +#: gitk:7309 msgid "Tags:" msgstr "Etichette:" -#: gitk:6959 gitk:6965 gitk:8280 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Genitore" -#: gitk:6970 +#: gitk:7337 msgid "Child" msgstr "Figlio" -#: gitk:6979 +#: gitk:7346 msgid "Branch" msgstr "Ramo" -#: gitk:6982 +#: gitk:7349 msgid "Follows" msgstr "Segue" -#: gitk:6985 +#: gitk:7352 msgid "Precedes" msgstr "Precede" -#: gitk:7522 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Errore nella lettura delle differenze:" -#: gitk:8108 +#: gitk:8631 msgid "Goto:" msgstr "Vai a:" -#: gitk:8129 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "La SHA1 id abbreviata %s è ambigua" -#: gitk:8136 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "La revisione %s è sconosciuta" -#: gitk:8146 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "La SHA1 id %s è sconosciuta" -#: gitk:8148 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "La revisione %s non è presente nella vista attuale" -#: gitk:8290 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Data" + +#: gitk:8816 msgid "Children" msgstr "Figli" -#: gitk:8348 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Aggiorna il ramo %s a questa revisione" -#: gitk:8350 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Nessun ramo attivo: reset impossibile" -#: gitk:8459 gitk:8465 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Salto la revisione di fusione " -#: gitk:8474 gitk:8479 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Errore nella identificazione della patch per " -#: gitk:8475 gitk:8480 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - fine\n" -#: gitk:8485 gitk:8488 gitk:8496 gitk:8510 gitk:8519 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "La revisione " -#: gitk:8489 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -847,7 +890,7 @@ msgstr "" " ha le stesse differenze di\n" " " -#: gitk:8497 +#: gitk:9024 msgid "" " differs from\n" " " @@ -855,7 +898,7 @@ msgstr "" " è diversa da\n" " " -#: gitk:8499 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -863,129 +906,129 @@ msgstr "" "Differenze tra le revisioni:\n" "\n" -#: gitk:8511 gitk:8520 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " ha %s figli - fine\n" -#: gitk:8539 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Errore nella scrittura della revisione nel file: %s" -#: gitk:8545 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "Errore nelle differenze tra le revisioni: %s" -#: gitk:8575 +#: gitk:9118 msgid "Top" msgstr "Inizio" -#: gitk:8576 +#: gitk:9119 msgid "From" msgstr "Da" -#: gitk:8581 +#: gitk:9124 msgid "To" msgstr "A" -#: gitk:8605 +#: gitk:9148 msgid "Generate patch" msgstr "Genera patch" -#: gitk:8607 +#: gitk:9150 msgid "From:" msgstr "Da:" -#: gitk:8616 +#: gitk:9159 msgid "To:" msgstr "A:" -#: gitk:8625 +#: gitk:9168 msgid "Reverse" msgstr "Inverti" -#: gitk:8627 gitk:8822 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Scrivi sul file:" -#: gitk:8633 +#: gitk:9176 msgid "Generate" msgstr "Genera" -#: gitk:8671 +#: gitk:9214 msgid "Error creating patch:" msgstr "Errore nella creazione della patch:" -#: gitk:8694 gitk:8810 gitk:8867 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:8703 +#: gitk:9246 msgid "Tag name:" msgstr "Nome etichetta:" -#: gitk:8706 +#: gitk:9249 msgid "Tag message is optional" msgstr "Il messaggio dell'etichetta è opzionale" -#: gitk:8708 +#: gitk:9251 msgid "Tag message:" msgstr "Messaggio dell'etichetta:" -#: gitk:8712 gitk:8876 +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Crea" -#: gitk:8730 +#: gitk:9273 msgid "No tag name specified" msgstr "Nessuna etichetta specificata" -#: gitk:8734 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "L'etichetta \"%s\" esiste già" -#: gitk:8744 +#: gitk:9287 msgid "Error creating tag:" msgstr "Errore nella creazione dell'etichetta:" -#: gitk:8819 +#: gitk:9363 msgid "Command:" msgstr "Comando:" -#: gitk:8827 +#: gitk:9371 msgid "Write" msgstr "Scrivi" -#: gitk:8845 +#: gitk:9389 msgid "Error writing commit:" msgstr "Errore nella scrittura della revisione:" -#: gitk:8872 +#: gitk:9416 msgid "Name:" msgstr "Nome:" -#: gitk:8895 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Specificare un nome per il nuovo ramo" -#: gitk:8900 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "Il ramo '%s' esiste già. Sovrascrivere?" -#: gitk:8966 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "La revisione %s è già inclusa nel ramo %s -- applicarla di nuovo?" -#: gitk:8971 +#: gitk:9516 msgid "Cherry-picking" msgstr "" -#: gitk:8980 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -996,7 +1039,7 @@ msgstr "" "Prima di riprovare, bisogna creare una nuova revisione, annullare le " "modifiche o usare 'git stash'." -#: gitk:8986 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1004,32 +1047,62 @@ msgstr "" "Impossibile eseguire cherry-pick a causa di un conflitto nella fusione.\n" "Vuoi avviare git citool per risolverlo?" -#: gitk:9002 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Nessuna modifica archiviata" -#: gitk:9028 +#: gitk:9574 +#, fuzzy, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "La revisione %s è già inclusa nel ramo %s -- applicarla di nuovo?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "git reset in corso" + +#: gitk:9587 +#, fuzzy, 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 "" +"Impossibile eseguire cherry-pick perché il file '%s' è stato modificato " +"nella directory di lavoro.\n" +"Prima di riprovare, bisogna creare una nuova revisione, annullare le " +"modifiche o usare 'git stash'." + +#: gitk:9591 +#, fuzzy +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" +"Impossibile eseguire cherry-pick a causa di un conflitto nella fusione.\n" +"Vuoi avviare git citool per risolverlo?" + +#: gitk:9634 msgid "Confirm reset" msgstr "Conferma git reset" -#: gitk:9030 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Aggiornare il ramo %s a %s?" -#: gitk:9032 +#: gitk:9638 msgid "Reset type:" msgstr "Tipo di aggiornamento:" -#: gitk:9035 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Soft: Lascia la direcory di lavoro e l'indice come sono" -#: gitk:9038 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Mixed: Lascia la directory di lavoro come è, aggiorna l'indice" -#: gitk:9041 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1037,19 +1110,19 @@ msgstr "" "Hard: Aggiorna la directory di lavoro e l'indice\n" "(abbandona TUTTE le modifiche locali)" -#: gitk:9058 +#: gitk:9664 msgid "Resetting" msgstr "git reset in corso" -#: gitk:9118 +#: gitk:9724 msgid "Checking out" msgstr "Attivazione in corso" -#: gitk:9171 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Impossibile cancellare il ramo attualmente attivo" -#: gitk:9177 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1058,16 +1131,16 @@ msgstr "" "Le revisioni nel ramo %s non sono presenti su altri rami.\n" "Cancellare il ramo %s?" -#: gitk:9208 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Etichette e rami: %s" -#: gitk:9223 +#: gitk:9829 msgid "Filter" msgstr "Filtro" -#: gitk:9518 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1075,202 +1148,225 @@ msgstr "" "Errore nella lettura della topologia delle revisioni: le informazioni sul " "ramo e le etichette precedenti e seguenti saranno incomplete." -#: gitk:10504 +#: gitk:11102 msgid "Tag" msgstr "Etichetta" -#: gitk:10504 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:10554 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Scelta caratteri gitk" -#: gitk:10571 +#: gitk:11206 msgid "B" msgstr "B" -#: gitk:10574 +#: gitk:11209 msgid "I" msgstr "I" -#: gitk:10692 -msgid "Gitk preferences" -msgstr "Preferenze gitk" - -#: gitk:10694 +#: gitk:11327 msgid "Commit list display options" msgstr "Opzioni visualizzazione dell'elenco revisioni" -#: gitk:10697 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Larghezza massima del grafico (in linee)" -#: gitk:10700 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Larghezza massima del grafico (% del pannello)" -#: gitk:10703 +#: gitk:11337 msgid "Show local changes" msgstr "Mostra modifiche locali" -#: gitk:10706 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "Seleziona automaticamente SHA1 hash" -#: gitk:10709 +#: gitk:11344 msgid "Hide remote refs" msgstr "Nascondi i riferimenti remoti" -#: gitk:10713 +#: gitk:11348 msgid "Diff display options" msgstr "Opzioni di visualizzazione delle differenze" -#: gitk:10715 +#: gitk:11350 msgid "Tab spacing" msgstr "Spaziatura tabulazioni" -#: gitk:10718 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Mostra etichette vicine" -#: gitk:10721 +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" + +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Limita le differenze ai percorsi elencati" -#: gitk:10724 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Attiva codifica file per file" -#: gitk:10730 gitk:10819 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Visualizzatore di differenze" -#: gitk:10731 +#: gitk:11369 msgid "Choose..." msgstr "Scegli..." -#: gitk:10736 +#: gitk:11374 msgid "General options" msgstr "Opzioni generali" -#: gitk:10739 +#: gitk:11377 msgid "Use themed widgets" msgstr "Utilizza interfaccia a tema" -#: gitk:10741 +#: gitk:11379 msgid "(change requires restart)" msgstr "(una modifica richiede il riavvio)" -#: gitk:10743 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(momentaneamente non disponibile)" -#: gitk:10747 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Colori: premere per scegliere" -#: gitk:10750 +#: gitk:11395 msgid "Interface" msgstr "Interfaccia" -#: gitk:10751 +#: gitk:11396 msgid "interface" msgstr "interfaccia" -#: gitk:10754 +#: gitk:11399 msgid "Background" msgstr "Sfondo" -#: gitk:10755 gitk:10785 +#: gitk:11400 gitk:11430 msgid "background" msgstr "sfondo" -#: gitk:10758 +#: gitk:11403 msgid "Foreground" msgstr "Primo piano" -#: gitk:10759 +#: gitk:11404 msgid "foreground" msgstr "primo piano" -#: gitk:10762 +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff: vecchie linee" -#: gitk:10763 +#: gitk:11408 msgid "diff old lines" msgstr "vecchie linee" -#: gitk:10767 +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff: nuove linee" -#: gitk:10768 +#: gitk:11413 msgid "diff new lines" msgstr "nuove linee" -#: gitk:10772 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff: intestazione della sezione" -#: gitk:10774 +#: gitk:11419 msgid "diff hunk header" msgstr "intestazione della sezione" -#: gitk:10778 +#: gitk:11423 msgid "Marked line bg" msgstr "Sfondo riga selezionata" -#: gitk:10780 +#: gitk:11425 msgid "marked line background" msgstr "sfondo riga selezionata" -#: gitk:10784 +#: gitk:11429 msgid "Select bg" msgstr "Sfondo" -#: gitk:10788 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Carattere: premere per scegliere" -#: gitk:10790 +#: gitk:11440 msgid "Main font" msgstr "Carattere principale" -#: gitk:10791 +#: gitk:11441 msgid "Diff display font" msgstr "Carattere per differenze" -#: gitk:10792 +#: gitk:11442 msgid "User interface font" msgstr "Carattere per interfaccia utente" -#: gitk:10829 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Preferenze gitk" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Genera" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: scegliere un colore per %s" -#: gitk:11433 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Archivio git non trovato." -#: gitk:11437 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "Directory git \"%s\" non trovata." - -#: gitk:11484 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Argomento ambiguo: '%s' è sia revisione che nome di file" -#: gitk:11496 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Gitk: argomenti errati:" -#: gitk:11587 +#: gitk:12405 msgid "Command line" msgstr "Linea di comando" + +#~ msgid "next" +#~ msgstr "succ" + +#~ msgid "prev" +#~ msgstr "prec" + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "Directory git \"%s\" non trovata." diff --git a/gitk-git/po/ja.po b/gitk-git/po/ja.po index 4f4705164c..db47a4c2b6 100644 --- a/gitk-git/po/ja.po +++ b/gitk-git/po/ja.po @@ -8,34 +8,43 @@ msgid "" msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-11-04 00:08+0900\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2009-11-06 01:45+0900\n" "Last-Translator: Mizar <mizar.jp@gmail.com>\n" "Language-Team: Japanese\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: gitk:113 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "マージされていないファイルのリストを取得できません:" -#: gitk:269 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 msgid "Error parsing revisions:" msgstr "リビジョン解析エラー:" -#: gitk:324 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "--argscmd コマンド実行エラー:" -#: gitk:337 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "ファイル未選択: --merge が指定されましたが、マージされていないファイルはあり" "ません。" -#: gitk:340 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -43,299 +52,315 @@ msgstr "" "ファイル未選択: --merge が指定されましたが、ファイル制限内にマージされていな" "いファイルはありません。" -#: gitk:362 gitk:509 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "git log 実行エラー:" -#: gitk:380 gitk:525 +#: gitk:436 gitk:582 msgid "Reading" msgstr "読み込み中" -#: gitk:440 gitk:4132 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "コミット読み込み中..." -#: gitk:443 gitk:1561 gitk:4135 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "コミットが選択されていません" -#: gitk:1437 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "git log の出力を解析できません:" -#: gitk:1657 +#: gitk:1740 msgid "No commit information available" msgstr "有効なコミットの情報がありません" -#: gitk:1790 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1817 gitk:3925 gitk:8842 gitk:10378 gitk:10558 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "OK" -#: gitk:1819 gitk:3927 gitk:8439 gitk:8513 gitk:8623 gitk:8672 gitk:8844 -#: gitk:10379 gitk:10559 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "キャンセル" -#: gitk:1919 +#: gitk:2069 msgid "Update" msgstr "更新" -#: gitk:1920 +#: gitk:2070 msgid "Reload" msgstr "リロード" -#: gitk:1921 +#: gitk:2071 msgid "Reread references" msgstr "リファレンスを再読み込み" -#: gitk:1922 +#: gitk:2072 msgid "List references" msgstr "リファレンスリストを表示" -#: gitk:1924 +#: gitk:2074 msgid "Start git gui" msgstr "git gui の開始" -#: gitk:1926 +#: gitk:2076 msgid "Quit" msgstr "終了" -#: gitk:1918 +#: gitk:2068 msgid "File" msgstr "ファイル" -#: gitk:1930 +#: gitk:2080 msgid "Preferences" msgstr "設定" -#: gitk:1929 +#: gitk:2079 msgid "Edit" msgstr "編集" -#: gitk:1934 +#: gitk:2084 msgid "New view..." msgstr "新規ビュー..." -#: gitk:1935 +#: gitk:2085 msgid "Edit view..." msgstr "ビュー編集..." -#: gitk:1936 +#: gitk:2086 msgid "Delete view" msgstr "ビュー削除" -#: gitk:1938 +#: gitk:2088 msgid "All files" msgstr "全てのファイル" -#: gitk:1933 gitk:3679 +#: gitk:2083 gitk:4050 msgid "View" msgstr "ビュー" -#: gitk:1943 gitk:1953 gitk:2656 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "gitk について" -#: gitk:1944 gitk:1958 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "キーバインディング" -#: gitk:1942 gitk:1957 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "ヘルプ" -#: gitk:2018 -msgid "SHA1 ID: " -msgstr "SHA1 ID: " +#: gitk:2185 gitk:8633 +msgid "SHA1 ID:" +msgstr "SHA1 ID:" -#: gitk:2049 +#: gitk:2229 msgid "Row" msgstr "行" -#: gitk:2080 +#: gitk:2267 msgid "Find" msgstr "検索" -#: gitk:2081 -msgid "next" -msgstr "次" - -#: gitk:2082 -msgid "prev" -msgstr "前" - -#: gitk:2083 +#: gitk:2295 msgid "commit" msgstr "コミット" -#: gitk:2086 gitk:2088 gitk:4293 gitk:4316 gitk:4340 gitk:6281 gitk:6353 -#: gitk:6437 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "含む:" -#: gitk:2089 gitk:3164 gitk:3169 gitk:4368 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "パスの一部:" -#: gitk:2090 gitk:4373 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "追加/除去する文字列:" -#: gitk:2099 gitk:2101 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "英字の大小を区別する" -#: gitk:2101 gitk:4448 gitk:6249 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "英字の大小を区別しない" -#: gitk:2101 gitk:4342 gitk:4446 gitk:6245 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "正規表現" -#: gitk:2103 gitk:2104 gitk:4467 gitk:4497 gitk:4504 gitk:6373 gitk:6441 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "全ての項目" -#: gitk:2104 gitk:4465 gitk:4497 gitk:6312 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "ヘッドライン" -#: gitk:2105 gitk:4465 gitk:6312 gitk:6441 gitk:6875 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "コメント" -#: gitk:2105 gitk:4465 gitk:4469 gitk:4504 gitk:6312 gitk:6810 gitk:8091 -#: gitk:8106 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "作者" -#: gitk:2105 gitk:4465 gitk:6312 gitk:6812 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "コミット者" -#: gitk:2134 +#: gitk:2350 msgid "Search" msgstr "検索" -#: gitk:2141 +#: gitk:2358 msgid "Diff" msgstr "Diff" -#: gitk:2143 +#: gitk:2360 msgid "Old version" msgstr "旧バージョン" -#: gitk:2145 +#: gitk:2362 msgid "New version" msgstr "新バージョン" -#: gitk:2147 +#: gitk:2364 msgid "Lines of context" msgstr "文脈行数" -#: gitk:2157 +#: gitk:2374 msgid "Ignore space change" msgstr "空白の違いを無視" -#: gitk:2215 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "パッチ" -#: gitk:2217 +#: gitk:2447 msgid "Tree" msgstr "ツリー" -#: gitk:2361 gitk:2378 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "これと選択したコミットのdiffを見る" -#: gitk:2362 gitk:2379 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "選択したコミットとこれのdiffを見る" -#: gitk:2363 gitk:2380 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "パッチ作成" -#: gitk:2364 gitk:8497 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "タグ生成" -#: gitk:2365 gitk:8603 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "コミットをファイルに書き出す" -#: gitk:2366 gitk:8660 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "新規ブランチ生成" -#: gitk:2367 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "このコミットをチェリーピックする" -#: gitk:2368 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "ブランチのHEADをここにリセットする" -#: gitk:2369 +#: gitk:2624 msgid "Mark this commit" msgstr "このコミットにマークをつける" -#: gitk:2370 +#: gitk:2625 msgid "Return to mark" msgstr "マークを付けた所に戻る" -#: gitk:2371 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "これとマークをつけた所との子孫を見つける" -#: gitk:2372 +#: gitk:2627 msgid "Compare with marked commit" msgstr "マークを付けたコミットと比較する" -#: gitk:2386 +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "これと選択したコミットのdiffを見る" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "選択したコミットとこれのdiffを見る" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "このコミットにマークをつける" + +#: gitk:2646 msgid "Check out this branch" msgstr "このブランチをチェックアウトする" -#: gitk:2387 +#: gitk:2647 msgid "Remove this branch" msgstr "このブランチを除去する" -#: gitk:2394 +#: gitk:2654 msgid "Highlight this too" msgstr "これもハイライトさせる" -#: gitk:2395 +#: gitk:2655 msgid "Highlight this only" msgstr "これだけをハイライトさせる" -#: gitk:2396 +#: gitk:2656 msgid "External diff" msgstr "外部diffツール" -#: gitk:2397 +#: gitk:2657 msgid "Blame parent commit" msgstr "親コミットから blame をかける" -#: gitk:2404 +#: gitk:2664 msgid "Show origin of this line" msgstr "この行の出自を表示する" -#: gitk:2405 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "この行に git gui で blame をかける" -#: gitk:2658 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -346,297 +371,315 @@ msgstr "" "\n" "使用および再配布は GNU General Public License に従ってください" -#: gitk:2666 gitk:2728 gitk:9025 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "閉じる" -#: gitk:2685 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Gitk キーバインディング" -#: gitk:2688 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Gitk キーバインディング:" -#: gitk:2690 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\t終了" -#: gitk:2691 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\t検索" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\t最初のコミットに移動" -#: gitk:2692 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\t最後のコミットに移動" -#: gitk:2693 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, i\t一つ上のコミットに移動" -#: gitk:2694 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, k\t一つ下のコミットに移動" -#: gitk:2695 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, j\t履歴の前に戻る" -#: gitk:2696 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\t履歴の次へ進む" -#: gitk:2697 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tコミットリストの一つ上のページに移動" -#: gitk:2698 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tコミットリストの一つ下のページに移動" -#: gitk:2699 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tコミットリストの一番上にスクロールする" -#: gitk:2700 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tコミットリストの一番下にスクロールする" -#: gitk:2701 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tコミットリストの一つ下の行にスクロールする" -#: gitk:2702 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tコミットリストの一つ下の行にスクロールする" -#: gitk:2703 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tコミットリストの上のページにスクロールする" -#: gitk:2704 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tコミットリストの下のページにスクロールする" -#: gitk:2705 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Up>\t後方を検索 (上方の・新しいコミット)" -#: gitk:2706 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Shift-Down>\t前方を検索(下方の・古いコミット)" -#: gitk:2707 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tdiff画面を上のページにスクロールする" -#: gitk:2708 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tdiff画面を上のページにスクロールする" -#: gitk:2709 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Space>\t\tdiff画面を下のページにスクロールする" -#: gitk:2710 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tdiff画面を上に18行スクロールする" -#: gitk:2711 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tdiff画面を下に18行スクロールする" -#: gitk:2712 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\t検索" -#: gitk:2713 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\t次を検索して移動" -#: gitk:2714 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\t次を検索して移動" -#: gitk:2715 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\t検索ボックスにフォーカス" -#: gitk:2716 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\t前を検索して移動" -#: gitk:2717 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\t次のファイルにdiff画面をスクロールする" -#: gitk:2718 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tdiff画面の次を検索" -#: gitk:2719 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tdiff画面の前を検索" -#: gitk:2720 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\t文字サイズを拡大" -#: gitk:2721 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\t文字サイズを拡大" -#: gitk:2722 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\t文字サイズを縮小" -#: gitk:2723 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\t文字サイズを縮小" -#: gitk:2724 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\t更新" -#: gitk:3179 gitk:3188 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "一時ディレクトリ %s 生成時エラー:" -#: gitk:3201 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "\"%s\" のエラーが %s に発生:" -#: gitk:3264 +#: gitk:3631 msgid "command failed:" msgstr "コマンド失敗:" -#: gitk:3410 +#: gitk:3780 msgid "No such commit" msgstr "そのようなコミットはありません" -#: gitk:3424 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: コマンド失敗:" -#: gitk:3455 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "マージする HEAD を読み込めません: %s" -#: gitk:3463 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "インデックス読み込みエラー: %s" -#: gitk:3488 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "git blame を始められません: %s" -#: gitk:3491 gitk:6280 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "検索中" -#: gitk:3523 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "git blame 実行エラー: %s" -#: gitk:3551 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "コミット %s に由来するその行は、このビューに表示されていません" -#: gitk:3565 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "外部diffビューアが失敗:" -#: gitk:3683 +#: gitk:4053 msgid "Gitk view definition" msgstr "Gitk ビュー定義" -#: gitk:3687 +#: gitk:4057 msgid "Remember this view" msgstr "このビューを記憶する" -#: gitk:3688 +#: gitk:4058 msgid "References (space separated list):" msgstr "リファレンス(スペース区切りのリスト):" -#: gitk:3689 +#: gitk:4059 msgid "Branches & tags:" msgstr "ブランチ&タグ:" -#: gitk:3690 +#: gitk:4060 msgid "All refs" msgstr "全てのリファレンス" -#: gitk:3691 +#: gitk:4061 msgid "All (local) branches" msgstr "全ての(ローカルな)ブランチ" -#: gitk:3692 +#: gitk:4062 msgid "All tags" msgstr "全てのタグ" -#: gitk:3693 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "全てのリモート追跡ブランチ" -#: gitk:3694 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "コミット情報(正規表現):" -#: gitk:3695 +#: gitk:4065 msgid "Author:" msgstr "作者:" -#: gitk:3696 +#: gitk:4066 msgid "Committer:" msgstr "コミット者:" -#: gitk:3697 +#: gitk:4067 msgid "Commit Message:" msgstr "コミットメッセージ:" -#: gitk:3698 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "コミット情報の全ての条件に一致" -#: gitk:3699 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "コミット情報の全ての条件に一致" + +#: gitk:4070 msgid "Changes to Files:" msgstr "変更したファイル:" -#: gitk:3700 +#: gitk:4071 msgid "Fixed String" msgstr "固定文字列" -#: gitk:3701 +#: gitk:4072 msgid "Regular Expression" msgstr "正規表現" -#: gitk:3702 +#: gitk:4073 msgid "Search string:" msgstr "検索文字列:" -#: gitk:3703 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -644,205 +687,202 @@ msgstr "" "コミット日時 (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -#: gitk:3704 +#: gitk:4075 msgid "Since:" msgstr "期間の始め:" -#: gitk:3705 +#: gitk:4076 msgid "Until:" msgstr "期間の終わり:" -#: gitk:3706 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "制限・省略するリビジョンの数(正の整数):" -#: gitk:3707 +#: gitk:4078 msgid "Number to show:" msgstr "表示する数:" -#: gitk:3708 +#: gitk:4079 msgid "Number to skip:" msgstr "省略する数:" -#: gitk:3709 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "その他のオプション:" -#: gitk:3710 +#: gitk:4081 msgid "Strictly sort by date" msgstr "厳密に日付順で並び替え" -#: gitk:3711 +#: gitk:4082 msgid "Mark branch sides" msgstr "側枝マーク" -#: gitk:3712 +#: gitk:4083 msgid "Limit to first parent" msgstr "最初の親に制限" -#: gitk:3713 +#: gitk:4084 msgid "Simple history" msgstr "簡易な履歴" -#: gitk:3714 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "git log への追加の引数:" -#: gitk:3715 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "含まれるファイル・ディレクトリを一行ごとに入力:" -#: gitk:3716 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "コミット追加コマンド:" -#: gitk:3838 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: ビュー編集" -#: gitk:3846 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "― リビジョンの選択条件" -#: gitk:3851 -msgid "View Name:" +#: gitk:4224 +#, fuzzy +msgid "View Name" msgstr "ビュー名:" -#: gitk:3926 +#: gitk:4299 msgid "Apply (F5)" msgstr "適用 (F5)" -#: gitk:3964 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "コミット選択引数のエラー:" -#: gitk:4017 gitk:4069 gitk:4517 gitk:4531 gitk:5792 gitk:11263 gitk:11264 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "無し" -#: gitk:4465 gitk:6312 gitk:8093 gitk:8108 -msgid "Date" -msgstr "日付" - -#: gitk:4465 gitk:6312 -msgid "CDate" -msgstr "作成日" - -#: gitk:4614 gitk:4619 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "子孫" -#: gitk:4615 +#: gitk:5004 msgid "Not descendant" msgstr "非子孫" -#: gitk:4622 gitk:4627 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "祖先" -#: gitk:4623 +#: gitk:5012 msgid "Not ancestor" msgstr "非祖先" -#: gitk:4913 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "ステージされた、コミット前のローカルな変更" -#: gitk:4949 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "ステージされていない、コミット前のローカルな変更" -#: gitk:6630 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 msgid "many" msgstr "多数" -#: gitk:6814 +#: gitk:7309 msgid "Tags:" msgstr "タグ:" -#: gitk:6831 gitk:6837 gitk:8086 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "親" -#: gitk:6842 +#: gitk:7337 msgid "Child" msgstr "子" -#: gitk:6851 +#: gitk:7346 msgid "Branch" msgstr "ブランチ" -#: gitk:6854 +#: gitk:7349 msgid "Follows" msgstr "下位" -#: gitk:6857 +#: gitk:7352 msgid "Precedes" msgstr "上位" -#: gitk:7359 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "diff取得エラー: %s" -#: gitk:7914 +#: gitk:8631 msgid "Goto:" msgstr "Goto:" -#: gitk:7916 -msgid "SHA1 ID:" -msgstr "SHA1 ID:" - -#: gitk:7935 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "%s を含む SHA1 ID は複数存在します" -#: gitk:7942 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "リビジョン %s は不明です" -#: gitk:7952 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "SHA1 id %s は不明です" -#: gitk:7954 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "リビジョン %s は現在のビューにはありません" -#: gitk:8096 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "日付" + +#: gitk:8816 msgid "Children" msgstr "子" -#: gitk:8153 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "%s ブランチをここにリセットする" -#: gitk:8155 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "切り離されたHEAD: リセットできません" -#: gitk:8264 gitk:8270 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "コミットマージをスキップ: " -#: gitk:8279 gitk:8284 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "パッチ取得エラー: ID " -#: gitk:8280 gitk:8285 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - 停止\n" -#: gitk:8290 gitk:8293 gitk:8301 gitk:8314 gitk:8323 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "コミット " -#: gitk:8294 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -850,7 +890,7 @@ msgstr "" " は下記のパッチと同等\n" " " -#: gitk:8302 +#: gitk:9024 msgid "" " differs from\n" " " @@ -858,7 +898,7 @@ msgstr "" " 下記からのdiff\n" " " -#: gitk:8304 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -866,122 +906,131 @@ msgstr "" "コミットのdiff:\n" "\n" -#: gitk:8315 gitk:8324 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " には %s の子があります - 停止\n" -#: gitk:8344 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "ファイルへのコミット書き出しエラー: %s" -#: gitk:8350 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "コミットのdiff実行エラー: %s" -#: gitk:8380 +#: gitk:9118 msgid "Top" msgstr "Top" -#: gitk:8381 +#: gitk:9119 msgid "From" msgstr "From" -#: gitk:8386 +#: gitk:9124 msgid "To" msgstr "To" -#: gitk:8410 +#: gitk:9148 msgid "Generate patch" msgstr "パッチ生成" -#: gitk:8412 +#: gitk:9150 msgid "From:" msgstr "From:" -#: gitk:8421 +#: gitk:9159 msgid "To:" msgstr "To:" -#: gitk:8430 +#: gitk:9168 msgid "Reverse" msgstr "逆" -#: gitk:8432 gitk:8617 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "出力ファイル:" -#: gitk:8438 +#: gitk:9176 msgid "Generate" msgstr "生成" -#: gitk:8476 +#: gitk:9214 msgid "Error creating patch:" msgstr "パッチ生成エラー:" -#: gitk:8499 gitk:8605 gitk:8662 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:8508 +#: gitk:9246 msgid "Tag name:" msgstr "タグ名:" -#: gitk:8512 gitk:8671 +#: gitk:9249 +msgid "Tag message is optional" +msgstr "" + +#: gitk:9251 +#, fuzzy +msgid "Tag message:" +msgstr "タグ名:" + +#: gitk:9255 gitk:9420 msgid "Create" msgstr "生成" -#: gitk:8529 +#: gitk:9273 msgid "No tag name specified" msgstr "タグの名称が指定されていません" -#: gitk:8533 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "タグ \"%s\" は既に存在します" -#: gitk:8539 +#: gitk:9287 msgid "Error creating tag:" msgstr "タグ生成エラー:" -#: gitk:8614 +#: gitk:9363 msgid "Command:" msgstr "コマンド:" -#: gitk:8622 +#: gitk:9371 msgid "Write" msgstr "書き出し" -#: gitk:8640 +#: gitk:9389 msgid "Error writing commit:" msgstr "コミット書き出しエラー:" -#: gitk:8667 +#: gitk:9416 msgid "Name:" msgstr "名前:" -#: gitk:8690 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "新しいブランチの名前を指定してください" -#: gitk:8695 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "ブランチ '%s' は既に存在します。上書きしますか?" -#: gitk:8761 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" "コミット %s は既にブランチ %s に含まれています ― 本当にこれを再適用しますか?" -#: gitk:8766 +#: gitk:9516 msgid "Cherry-picking" msgstr "チェリーピック中" -#: gitk:8775 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -991,7 +1040,7 @@ msgstr "" "あなたの変更に commit, reset, stash のいずれかを行ってからやり直してくださ" "い。" -#: gitk:8781 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -999,32 +1048,62 @@ msgstr "" "マージの衝突によってチェリーピックは失敗しました。\n" "この解決のために git citool を実行したいですか?" -#: gitk:8797 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "何の変更もコミットされていません" -#: gitk:8823 +#: gitk:9574 +#, fuzzy, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "" +"コミット %s は既にブランチ %s に含まれています ― 本当にこれを再適用しますか?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "リセット中" + +#: gitk:9587 +#, fuzzy, 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 "" +"ファイル '%s' のローカルな変更のためにチェリーピックは失敗しました。\n" +"あなたの変更に commit, reset, stash のいずれかを行ってからやり直してくださ" +"い。" + +#: gitk:9591 +#, fuzzy +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" +"マージの衝突によってチェリーピックは失敗しました。\n" +"この解決のために git citool を実行したいですか?" + +#: gitk:9634 msgid "Confirm reset" msgstr "確認を取り消す" -#: gitk:8825 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "ブランチ %s を %s にリセットしますか?" -#: gitk:8829 +#: gitk:9638 msgid "Reset type:" msgstr "Reset タイプ:" -#: gitk:8833 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Soft: 作業ツリーもインデックスもそのままにする" -#: gitk:8836 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Mixed: 作業ツリーをそのままにして、インデックスをリセット" -#: gitk:8839 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1032,19 +1111,19 @@ msgstr "" "Hard: 作業ツリーやインデックスをリセット\n" "(「全ての」ローカルな変更を破棄)" -#: gitk:8856 +#: gitk:9664 msgid "Resetting" msgstr "リセット中" -#: gitk:8913 +#: gitk:9724 msgid "Checking out" msgstr "チェックアウト" -#: gitk:8966 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "現在チェックアウトされているブランチを削除することはできません" -#: gitk:8972 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1053,16 +1132,16 @@ msgstr "" "ブランチ %s には他のブランチに存在しないコミットがあります。\n" "本当にブランチ %s を削除しますか?" -#: gitk:9003 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "タグとHEAD: %s" -#: gitk:9018 +#: gitk:9829 msgid "Filter" msgstr "フィルター" -#: gitk:9313 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1070,186 +1149,232 @@ msgstr "" "コミット構造情報読み込みエラー; ブランチ及び上位/下位のタグ情報が不完全である" "ようです。" -#: gitk:10299 +#: gitk:11102 msgid "Tag" msgstr "タグ" -#: gitk:10299 +#: gitk:11106 msgid "Id" msgstr "ID" -#: gitk:10347 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Gitk フォント選択" -#: gitk:10364 +#: gitk:11206 msgid "B" msgstr "B" -#: gitk:10367 +#: gitk:11209 msgid "I" msgstr "I" -#: gitk:10463 -msgid "Gitk preferences" -msgstr "Gitk 設定" - -#: gitk:10465 +#: gitk:11327 msgid "Commit list display options" msgstr "コミットリスト表示オプション" -#: gitk:10468 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "最大グラフ幅(線の本数)" -#: gitk:10472 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "最大グラフ幅(ペインに対する%)" -#: gitk:10476 +#: gitk:11337 msgid "Show local changes" msgstr "ローカルな変更を表示" -#: gitk:10479 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "SHA1 の自動選択" -#: gitk:10483 +#: gitk:11344 +msgid "Hide remote refs" +msgstr "リモートリファレンスを隠す" + +#: gitk:11348 msgid "Diff display options" msgstr "diff表示オプション" -#: gitk:10485 +#: gitk:11350 msgid "Tab spacing" msgstr "タブ空白幅" -#: gitk:10488 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "近くのタグを表示する" -#: gitk:10491 -msgid "Hide remote refs" -msgstr "リモートリファレンスを隠す" +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" -#: gitk:10494 +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "diff をリストのパスに制限" -#: gitk:10497 +#: gitk:11362 msgid "Support per-file encodings" msgstr "ファイルごとのエンコーディングのサポート" -#: gitk:10503 gitk:10572 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "外部diffツール" -#: gitk:10505 +#: gitk:11369 msgid "Choose..." msgstr "選択..." -#: gitk:10510 +#: gitk:11374 +#, fuzzy +msgid "General options" +msgstr "パッチ生成" + +#: gitk:11377 +msgid "Use themed widgets" +msgstr "" + +#: gitk:11379 +msgid "(change requires restart)" +msgstr "" + +#: gitk:11381 +msgid "(currently unavailable)" +msgstr "" + +#: gitk:11392 msgid "Colors: press to choose" msgstr "色: ボタンを押して選択" -#: gitk:10513 +#: gitk:11395 msgid "Interface" msgstr "インターフェイス" -#: gitk:10514 +#: gitk:11396 msgid "interface" msgstr "インターフェイス" -#: gitk:10517 +#: gitk:11399 msgid "Background" msgstr "背景" -#: gitk:10518 gitk:10548 +#: gitk:11400 gitk:11430 msgid "background" msgstr "背景" -#: gitk:10521 +#: gitk:11403 msgid "Foreground" msgstr "前景" -#: gitk:10522 +#: gitk:11404 msgid "foreground" msgstr "前景" -#: gitk:10525 +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff: 旧バージョン" -#: gitk:10526 +#: gitk:11408 msgid "diff old lines" msgstr "diff 旧バージョン" -#: gitk:10530 +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff: 新バージョン" -#: gitk:10531 +#: gitk:11413 msgid "diff new lines" msgstr "diff 新バージョン" -#: gitk:10535 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff: hunkヘッダ" -#: gitk:10537 +#: gitk:11419 msgid "diff hunk header" msgstr "diff hunkヘッダ" -#: gitk:10541 +#: gitk:11423 msgid "Marked line bg" msgstr "マーク行の背景" -#: gitk:10543 +#: gitk:11425 msgid "marked line background" msgstr "マーク行の背景" -#: gitk:10547 +#: gitk:11429 msgid "Select bg" msgstr "選択の背景" -#: gitk:10551 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "フォント: ボタンを押して選択" -#: gitk:10553 +#: gitk:11440 msgid "Main font" msgstr "主フォント" -#: gitk:10554 +#: gitk:11441 msgid "Diff display font" msgstr "Diff表示用フォント" -#: gitk:10555 +#: gitk:11442 msgid "User interface font" msgstr "UI用フォント" -#: gitk:10582 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Gitk 設定" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "生成" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: 「%s」 の色を選択" -#: gitk:11168 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "ここにはgitリポジトリがありません。" -#: gitk:11172 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "gitディレクトリ \"%s\" を見つけられません。" - -#: gitk:11219 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "あいまいな引数 '%s': リビジョンとファイル名の両方に解釈できます" -#: gitk:11231 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "gitkへの不正な引数:" -#: gitk:11316 +#: gitk:12405 msgid "Command line" msgstr "コマンド行" + +#~ msgid "SHA1 ID: " +#~ msgstr "SHA1 ID: " + +#~ msgid "next" +#~ msgstr "次" + +#~ msgid "prev" +#~ msgstr "前" + +#~ msgid "CDate" +#~ msgstr "作成日" + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "gitディレクトリ \"%s\" を見つけられません。" diff --git a/gitk-git/po/pt_br.po b/gitk-git/po/pt_br.po index 1486e3205a..80d24bcad8 100644 --- a/gitk-git/po/pt_br.po +++ b/gitk-git/po/pt_br.po @@ -9,33 +9,42 @@ msgid "" msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-26 15:47-0800\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2010-12-06 23:39-0200\n" "Last-Translator: Alexandre Erwin Ittner <alexandre@ittner.com.br>\n" "Language-Team: Brazilian Portuguese <>\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: gitk:115 +#: gitk:140 msgid "Couldn't get list of unmerged files:" msgstr "Não foi possível obter a lista dos arquivos não mesclados:" -#: gitk:274 +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" +msgstr "" + +#: gitk:324 msgid "Error parsing revisions:" msgstr "Erro ao interpretar revisões:" -#: gitk:330 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Erro ao executar o comando--argscmd:" -#: gitk:343 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Nenhum arquivo foi selecionado: --merge especificado mas não há arquivos não-" "mesclados." -#: gitk:346 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -43,603 +52,634 @@ msgstr "" "Nenhum arquivo foi selecionado: --merge especificado mas não há arquivos não-" "mesclados dentro dos limites." -#: gitk:368 gitk:516 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Erro ao executar git log:" -#: gitk:386 gitk:532 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Lendo" -#: gitk:446 gitk:4271 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Lendo revisões..." -#: gitk:449 gitk:1580 gitk:4274 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Nenhuma revisão foi selecionada" -#: gitk:1456 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Não foi possível interpretar a saída do \"git log\":" -#: gitk:1676 +#: gitk:1740 msgid "No commit information available" msgstr "Não há informações disponíveis sobre a revisão" -#: gitk:1818 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1853 gitk:4064 gitk:9067 gitk:10607 gitk:10817 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "Ok" -#: gitk:1855 gitk:4066 gitk:8657 gitk:8736 gitk:8851 gitk:8900 gitk:9069 -#: gitk:10608 gitk:10818 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Cancelar" -#: gitk:1980 +#: gitk:2069 msgid "Update" msgstr "Atualizar" -#: gitk:1981 +#: gitk:2070 msgid "Reload" msgstr "Recarregar" -#: gitk:1982 +#: gitk:2071 msgid "Reread references" msgstr "Ler as referências novamente" -#: gitk:1983 +#: gitk:2072 msgid "List references" msgstr "Listar referências" -#: gitk:1985 +#: gitk:2074 msgid "Start git gui" msgstr "Iniciar Git GUI" -#: gitk:1987 +#: gitk:2076 msgid "Quit" msgstr "Sair" -#: gitk:1979 +#: gitk:2068 msgid "File" msgstr "Arquivo" -#: gitk:1991 +#: gitk:2080 msgid "Preferences" msgstr "Preferências" -#: gitk:1990 +#: gitk:2079 msgid "Edit" msgstr "Editar" -#: gitk:1995 +#: gitk:2084 msgid "New view..." msgstr "Nova vista..." -#: gitk:1996 +#: gitk:2085 msgid "Edit view..." msgstr "Editar vista..." -#: gitk:1997 +#: gitk:2086 msgid "Delete view" msgstr "Apagar vista" -#: gitk:1999 +#: gitk:2088 msgid "All files" msgstr "Todos os arquivos" -#: gitk:1994 gitk:3817 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Exibir" -#: gitk:2004 gitk:2014 gitk:2787 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Sobre o gitk" -#: gitk:2005 gitk:2019 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Atalhos de teclado" -#: gitk:2003 gitk:2018 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Ajuda" -#: gitk:2096 gitk:8132 +#: gitk:2185 gitk:8633 msgid "SHA1 ID:" msgstr "SHA1 ID:" -#: gitk:2127 +#: gitk:2229 msgid "Row" msgstr "Linha" -#: gitk:2165 +#: gitk:2267 msgid "Find" msgstr "Encontrar" -#: gitk:2166 -msgid "next" -msgstr "Próximo" - -#: gitk:2167 -msgid "prev" -msgstr "Anterior" - -#: gitk:2168 +#: gitk:2295 msgid "commit" msgstr "Revisão" -#: gitk:2171 gitk:2173 gitk:4432 gitk:4455 gitk:4479 gitk:6420 gitk:6492 -#: gitk:6576 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "contendo:" -#: gitk:2174 gitk:3298 gitk:3303 gitk:4507 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "envolvendo os caminhos:" -#: gitk:2175 gitk:4512 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "Adicionando/removendo texto:" -#: gitk:2184 gitk:2186 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Exatamente" -#: gitk:2186 gitk:4587 gitk:6388 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "Ignorar maiúsculas/minúsculas" -#: gitk:2186 gitk:4481 gitk:4585 gitk:6384 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Expressão regular" -#: gitk:2188 gitk:2189 gitk:4606 gitk:4636 gitk:4643 gitk:6512 gitk:6580 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Todos os campos" -#: gitk:2189 gitk:4604 gitk:4636 gitk:6451 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Assunto" -#: gitk:2190 gitk:4604 gitk:6451 gitk:6580 gitk:7013 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Descrição da revisão" -#: gitk:2190 gitk:4604 gitk:4608 gitk:4643 gitk:6451 gitk:6948 gitk:8307 -#: gitk:8322 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Autor" -#: gitk:2190 gitk:4604 gitk:6451 gitk:6950 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Revisor" -#: gitk:2221 +#: gitk:2350 msgid "Search" msgstr "Buscar" -#: gitk:2229 +#: gitk:2358 msgid "Diff" msgstr "Diferenças" -#: gitk:2231 +#: gitk:2360 msgid "Old version" msgstr "Versão antiga" -#: gitk:2233 +#: gitk:2362 msgid "New version" msgstr "Versão nova" -#: gitk:2235 +#: gitk:2364 msgid "Lines of context" msgstr "Número de linhas de contexto" -#: gitk:2245 +#: gitk:2374 msgid "Ignore space change" msgstr "Ignorar mudanças de caixa" -#: gitk:2304 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Diferenças" -#: gitk:2306 +#: gitk:2447 msgid "Tree" msgstr "Árvore" -#: gitk:2463 gitk:2480 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Comparar esta revisão com a selecionada" -#: gitk:2464 gitk:2481 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Comparar a revisão selecionada com esta" -#: gitk:2465 gitk:2482 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Criar patch" -#: gitk:2466 gitk:8715 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Criar etiqueta" -#: gitk:2467 gitk:8831 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Salvar revisão para um arquivo" -#: gitk:2468 gitk:8888 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Criar novo ramo" -#: gitk:2469 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Fazer cherry-pick desta revisão" -#: gitk:2470 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Redefinir HEAD para cá" -#: gitk:2471 +#: gitk:2624 msgid "Mark this commit" msgstr "Marcar esta revisão" -#: gitk:2472 +#: gitk:2625 msgid "Return to mark" msgstr "Voltar à marca" -#: gitk:2473 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Encontrar descendente e marcar" -#: gitk:2474 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Comparar com a revisão marcada" -#: gitk:2488 +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Comparar esta revisão com a selecionada" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Comparar a revisão selecionada com esta" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Marcar esta revisão" + +#: gitk:2646 msgid "Check out this branch" msgstr "Efetuar checkout deste ramo" -#: gitk:2489 +#: gitk:2647 msgid "Remove this branch" msgstr "Excluir este ramo" -#: gitk:2496 +#: gitk:2654 msgid "Highlight this too" msgstr "Marcar este também" -#: gitk:2497 +#: gitk:2655 msgid "Highlight this only" msgstr "Marcar apenas este" -#: gitk:2498 +#: gitk:2656 msgid "External diff" msgstr "Diff externo" -#: gitk:2499 +#: gitk:2657 msgid "Blame parent commit" msgstr "Anotar revisão anterior" -#: gitk:2506 +#: gitk:2664 msgid "Show origin of this line" msgstr "Exibir origem desta linha" -#: gitk:2507 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Executar 'git blame' nesta linha" -#: gitk:2789 -msgid "\n" +#: gitk:3011 +#, fuzzy +msgid "" +"\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright ©9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" -msgstr "\n" +msgstr "" +"\n" "Gitk - um visualizador de revisões para o git \n" "\n" "Copyright ©9 2005-2010 Paul Mackerras\n" "\n" "Uso e distribuição segundo os termos da Licença Pública Geral GNU" -#: gitk:2797 gitk:2862 gitk:9253 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Fechar" -#: gitk:2818 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Atalhos de teclado" -#: gitk:2821 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Atalhos de teclado:" -#: gitk:2823 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tSair" -#: gitk:2824 +#: gitk:3046 #, tcl-format msgid "<%s-W>\t\tClose window" msgstr "<%s-W>\t\tFechar janela" -#: gitk:2825 +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tIr para a primeira revisão" -#: gitk:2826 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tIr para a última revisão" -#: gitk:2827 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, i\tIr para uma revisão acima" -#: gitk:2828 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, k\tIr para uma revisão abaixo" -#: gitk:2829 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, j\tVoltar no histórico" -#: gitk:2830 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\tAvançar no histórico" -#: gitk:2831 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tSubir uma página na lista de revisões" -#: gitk:2832 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tDescer uma página na lista de revisões" -#: gitk:2833 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tRolar para o início da lista de revisões" -#: gitk:2834 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tRolar para o final da lista de revisões" -#: gitk:2835 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tRolar uma linha acima na lista de revisões" -#: gitk:2836 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tRolar uma linha abaixo na lista de revisões" -#: gitk:2837 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tRolar uma página acima na lista de revisões" -#: gitk:2838 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tRolar uma página abaixo na lista de revisões" -#: gitk:2839 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Up>\tProcurar próxima (revisões mas recentes)" -#: gitk:2840 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Shift-Down>\tProcurar anterior (revisões mais antigas)" -#: gitk:2841 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tRola alterações uma página acima" -#: gitk:2842 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tRolar alterações uma página abaixo" -#: gitk:2843 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Space>\t\tRolar alterações uma página abaixo" -#: gitk:2844 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tRolar alterações 18 linhas acima" -#: gitk:2845 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tRolar alterações 18 linhas abaixo" -#: gitk:2846 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tProcurar" -#: gitk:2847 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tIr para a próxima ocorrência" -#: gitk:2848 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\tIr para a próxima ocorrência" -#: gitk:2849 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tPor foco na caixa de busca" -#: gitk:2850 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tIr para a ocorrência anterior" -#: gitk:2851 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tRolar alterações para o próximo arquivo" -#: gitk:2852 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tProcurar a próxima ocorrência na lista de alterações" -#: gitk:2853 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tProcurar ocorrência anterior na lista de alterações" -#: gitk:2854 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tAumentar tamanho da fonte" -#: gitk:2855 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tAumentar tamanho da fonte" -#: gitk:2856 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tReduzir tamanho da fonte" -#: gitk:2857 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tReduzir tamanho da fonte" -#: gitk:2858 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tAtualizar" -#: gitk:3313 gitk:3322 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Erro ao criar o diretório temporário %s:" -#: gitk:3335 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Erro ao ler \"%s\" de %s:" -#: gitk:3398 +#: gitk:3631 msgid "command failed:" msgstr "O comando falhou:" -#: gitk:3547 +#: gitk:3780 msgid "No such commit" msgstr "Revisão não encontrada" -#: gitk:3561 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "Comando 'git gui blame' falhou:" -#: gitk:3592 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Impossível ler merge head: %s" -#: gitk:3600 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Erro ao ler o índice: %s" -#: gitk:3625 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Não foi possível inciar o 'git blame': %s" -#: gitk:3628 gitk:6419 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Procurando" -#: gitk:3660 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Erro ao executar 'git blame': %s" -#: gitk:3688 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Esta linha vem da revisão %s, que não está nesta vista" -#: gitk:3702 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Erro do visualizador de alterações externo:" -#: gitk:3820 +#: gitk:4053 msgid "Gitk view definition" msgstr "Definir vista" -#: gitk:3824 +#: gitk:4057 msgid "Remember this view" msgstr "Lembrar esta vista" -#: gitk:3825 +#: gitk:4058 msgid "References (space separated list):" msgstr "Referências (separar a lista com um espaço):" -#: gitk:3826 +#: gitk:4059 msgid "Branches & tags:" msgstr "Ramos & etiquetas:" -#: gitk:3827 +#: gitk:4060 msgid "All refs" msgstr "Todas as referências" -#: gitk:3828 +#: gitk:4061 msgid "All (local) branches" msgstr "Todos os ramos locais" -#: gitk:3829 +#: gitk:4062 msgid "All tags" msgstr "Todas as etiquetas" -#: gitk:3830 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Todos os ramos de rastreio" -#: gitk:3831 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Informações da revisão (expressões regulares):" -#: gitk:3832 +#: gitk:4065 msgid "Author:" msgstr "Autor:" -#: gitk:3833 +#: gitk:4066 msgid "Committer:" msgstr "Revisor:" -#: gitk:3834 +#: gitk:4067 msgid "Commit Message:" msgstr "Descrição da revisão:" -#: gitk:3835 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Coincidir todos os critérios de informações da revisão" -#: gitk:3836 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Coincidir todos os critérios de informações da revisão" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Mudanças para os arquivos:" -#: gitk:3837 +#: gitk:4071 msgid "Fixed String" msgstr "Texto fixo" -#: gitk:3838 +#: gitk:4072 msgid "Regular Expression" msgstr "Expressão regular" -#: gitk:3839 +#: gitk:4073 msgid "Search string:" msgstr "Texto de busca" -#: gitk:3840 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -647,201 +687,201 @@ msgstr "" "Datas de revisão (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -#: gitk:3841 +#: gitk:4075 msgid "Since:" msgstr "Desde:" -#: gitk:3842 +#: gitk:4076 msgid "Until:" msgstr "Até:" -#: gitk:3843 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Limitar e/ou ignorar um número de revisões (inteiro positivo):" -#: gitk:3844 +#: gitk:4078 msgid "Number to show:" msgstr "Número para mostrar:" -#: gitk:3845 +#: gitk:4079 msgid "Number to skip:" msgstr "Número para ignorar:" -#: gitk:3846 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Opções diversas:" -#: gitk:3847 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Ordenar estritamente pela data" -#: gitk:3848 +#: gitk:4082 msgid "Mark branch sides" msgstr "Marcar os dois lados do ramo" -#: gitk:3849 +#: gitk:4083 msgid "Limit to first parent" msgstr "Limitar ao primeiro antecessor" -#: gitk:3850 +#: gitk:4084 msgid "Simple history" msgstr "Histórico simplificado" -#: gitk:3851 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Argumentos adicionais para o 'git log':" -#: gitk:3852 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Arquivos e diretórios para incluir, um por linha" -#: gitk:3853 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Comando para gerar mais revisões para incluir:" -#: gitk:3977 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: editar vista" -#: gitk:3985 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "-- critérios para selecionar revisões" -#: gitk:3990 +#: gitk:4224 msgid "View Name" msgstr "Nome da vista" -#: gitk:4065 +#: gitk:4299 msgid "Apply (F5)" msgstr "Aplicar (F5)" -#: gitk:4103 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Erro nos argumentos de seleção de revisões:" -#: gitk:4156 gitk:4208 gitk:4656 gitk:4670 gitk:5931 gitk:11551 gitk:11552 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Nenhum" -#: gitk:4604 gitk:6451 gitk:8309 gitk:8324 -msgid "Date" -msgstr "Data" - -#: gitk:4604 gitk:6451 -msgid "CDate" -msgstr "DataR" - -#: gitk:4753 gitk:4758 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Descendente de" -#: gitk:4754 +#: gitk:5004 msgid "Not descendant" msgstr "Não descendente de" -#: gitk:4761 gitk:4766 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Antecessor de" -#: gitk:4762 +#: gitk:5012 msgid "Not ancestor" msgstr "Não antecessor de" -#: gitk:5052 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Mudanças locais marcadas, porém não salvas" -#: gitk:5088 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Mudanças locais não marcadas" -#: gitk:6769 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 msgid "many" msgstr "muitas" -#: gitk:6952 +#: gitk:7309 msgid "Tags:" msgstr "Etiquetas:" -#: gitk:6969 gitk:6975 gitk:8302 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Antecessor" -#: gitk:6980 +#: gitk:7337 msgid "Child" msgstr "Descendente" -#: gitk:6989 +#: gitk:7346 msgid "Branch" msgstr "Ramo" -#: gitk:6992 +#: gitk:7349 msgid "Follows" msgstr "Segue" -#: gitk:6995 +#: gitk:7352 msgid "Precedes" msgstr "Precede" -#: gitk:7532 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Erro ao obter diferenças: %s" -#: gitk:8130 +#: gitk:8631 msgid "Goto:" msgstr "Ir para:" -#: gitk:8151 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "O id SHA1 %s é ambíguo" -#: gitk:8158 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "Revisão %s desconhecida" -#: gitk:8168 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "Id SHA1 %s desconhecido" -#: gitk:8170 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "A revisão %s não está na vista atual" -#: gitk:8312 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Data" + +#: gitk:8816 msgid "Children" msgstr "Descendentes" -#: gitk:8370 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Redefinir ramo %s para este ponto" -#: gitk:8372 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Detached head: impossível redefinir" -#: gitk:8481 gitk:8487 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Saltando revisão de mesclagem" -#: gitk:8496 gitk:8501 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Erro ao obter patch ID para" -#: gitk:8497 gitk:8502 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr "- parando\n" -#: gitk:8507 gitk:8510 gitk:8518 gitk:8532 gitk:8541 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Revisão" -#: gitk:8511 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -849,13 +889,13 @@ msgstr "" "é o mesmo patch que\n" " " -#: gitk:8519 +#: gitk:9024 msgid "" " differs from\n" " " msgstr "difere de" -#: gitk:8521 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -863,129 +903,129 @@ msgstr "" "Diferença de revisões:\n" "\n" -#: gitk:8533 gitk:8542 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr "possui %s descendentes - parando\n" -#: gitk:8561 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Erro ao salvar revisão para o arquivo: %s" -#: gitk:8567 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "Erro ao comparar revisões: %s" -#: gitk:8598 +#: gitk:9118 msgid "Top" msgstr "Início" -#: gitk:8599 +#: gitk:9119 msgid "From" msgstr "De" -#: gitk:8604 +#: gitk:9124 msgid "To" msgstr "Para" -#: gitk:8628 +#: gitk:9148 msgid "Generate patch" msgstr "Gerar patch" -#: gitk:8630 +#: gitk:9150 msgid "From:" msgstr "De:" -#: gitk:8639 +#: gitk:9159 msgid "To:" msgstr "Para:" -#: gitk:8648 +#: gitk:9168 msgid "Reverse" msgstr "Inverter" -#: gitk:8650 gitk:8845 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Arquivo de saída:" -#: gitk:8656 +#: gitk:9176 msgid "Generate" msgstr "Gerar" -#: gitk:8694 +#: gitk:9214 msgid "Error creating patch:" msgstr "Erro ao criar patch:" -#: gitk:8717 gitk:8833 gitk:8890 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:8726 +#: gitk:9246 msgid "Tag name:" msgstr "Nome da etiqueta:" -#: gitk:8729 +#: gitk:9249 msgid "Tag message is optional" msgstr "A descrição da etiqueta é opcional" -#: gitk:8731 +#: gitk:9251 msgid "Tag message:" msgstr "Descrição da etiqueta" -#: gitk:8735 gitk:8899 +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Criar" -#: gitk:8753 +#: gitk:9273 msgid "No tag name specified" msgstr "Nome da etiqueta não indicado" -#: gitk:8757 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Etiqueta \"%s\" já existe" -#: gitk:8767 +#: gitk:9287 msgid "Error creating tag:" msgstr "Erro ao criar etiqueta:" -#: gitk:8842 +#: gitk:9363 msgid "Command:" msgstr "Comando:" -#: gitk:8850 +#: gitk:9371 msgid "Write" msgstr "Exportar" -#: gitk:8868 +#: gitk:9389 msgid "Error writing commit:" msgstr "Erro ao exportar revisão" -#: gitk:8895 +#: gitk:9416 msgid "Name:" msgstr "Nome:" -#: gitk:8918 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Indique um nome para o novo ramo" -#: gitk:8923 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "O ramo \"%s\" já existe. Sobrescrever?" -#: gitk:8989 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "Revisão %s já inclusa no ramo %s -- você realmente deseja reaplicá-la?" -#: gitk:8994 +#: gitk:9516 msgid "Cherry-picking" msgstr "Cherry-picking" -#: gitk:9003 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -995,7 +1035,7 @@ msgstr "" "Salve a uma revisão, redefina ou armazene (stash) suas mudanças e tente " "novamente." -#: gitk:9009 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1003,32 +1043,61 @@ msgstr "" "O cherry-pick falhou porque houve um conflito na mesclagem.\n" "Executar o 'git citool' para resolvê-lo?" -#: gitk:9025 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Nenhuma revisão foi salva" -#: gitk:9051 +#: gitk:9574 +#, fuzzy, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "Revisão %s já inclusa no ramo %s -- você realmente deseja reaplicá-la?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "Redefinindo" + +#: gitk:9587 +#, fuzzy, 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 "" +"O cherry-pick falhou porque o arquivo \"%s\" possui mudanças locais.\n" +"Salve a uma revisão, redefina ou armazene (stash) suas mudanças e tente " +"novamente." + +#: gitk:9591 +#, fuzzy +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" +"O cherry-pick falhou porque houve um conflito na mesclagem.\n" +"Executar o 'git citool' para resolvê-lo?" + +#: gitk:9634 msgid "Confirm reset" msgstr "Confirmar redefinição" -#: gitk:9053 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Você realmente deseja redefinir o ramo %s para %s?" -#: gitk:9055 +#: gitk:9638 msgid "Reset type:" msgstr "Tipo de redefinição" -#: gitk:9058 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Soft: deixa a árvore de trabalho e o índice intocados" -#: gitk:9061 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Misto: Deixa a árvore de trabalho intocada, redefine o índice" -#: gitk:9064 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1036,19 +1105,19 @@ msgstr "" "Hard: Redefine a árvore de trabalho e o índice\n" "(descarta TODAS as mudanças locais)" -#: gitk:9081 +#: gitk:9664 msgid "Resetting" msgstr "Redefinindo" -#: gitk:9141 +#: gitk:9724 msgid "Checking out" msgstr "Abrindo" -#: gitk:9194 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Impossível excluir o ramo atualmente aberto" -#: gitk:9200 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1057,16 +1126,16 @@ msgstr "" "As revisões do ramo \"%s\" não existem em nenhum outro ramo.\n" "Você realmente deseja excluir ramo \"%s\"?" -#: gitk:9231 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Referências: %s" -#: gitk:9246 +#: gitk:9829 msgid "Filter" msgstr "Filtro" -#: gitk:9541 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1074,204 +1143,230 @@ msgstr "" "Erro ao ler a topologia das revisões; as informações dos ramos e etiquetas " "antecessoras/sucessoras estarão incompletas" -#: gitk:10527 +#: gitk:11102 msgid "Tag" msgstr "Etiqueta" -#: gitk:10527 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:10576 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Selecionar fontes do Gitk" -#: gitk:10593 +#: gitk:11206 msgid "B" msgstr "B" -#: gitk:10596 +#: gitk:11209 msgid "I" msgstr "I" -#: gitk:10714 -msgid "Gitk preferences" -msgstr "Preferências do Gitk" - -#: gitk:10716 +#: gitk:11327 msgid "Commit list display options" msgstr "Opções da lista de revisões" -#: gitk:10719 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Largura máxima do grafo (linhas)" -#: gitk:10722 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Largura máxima do grafo (% do painel)" -#: gitk:10725 +#: gitk:11337 msgid "Show local changes" msgstr "Exibir mudanças locais" -#: gitk:10728 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "Selecionar o SHA1 automaticamente" -#: gitk:10731 +#: gitk:11344 msgid "Hide remote refs" msgstr "Ocultar referências remotas" -#: gitk:10735 +#: gitk:11348 msgid "Diff display options" msgstr "Opções de exibição das alterações" -#: gitk:10737 +#: gitk:11350 msgid "Tab spacing" msgstr "Espaços por tabulação" -#: gitk:10740 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Exibir etiquetas próximas" -#: gitk:10743 +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" + +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Limitar diferenças aos caminhos listados" -#: gitk:10746 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Usar codificações distintas por arquivo" -#: gitk:10752 gitk:10832 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Ferramenta 'diff' externa" -#: gitk:10753 +#: gitk:11369 msgid "Choose..." msgstr "Selecionar..." -#: gitk:10758 +#: gitk:11374 msgid "General options" msgstr "Opções gerais" -#: gitk:10761 +#: gitk:11377 msgid "Use themed widgets" msgstr "Usar temas para as janelas" -#: gitk:10763 +#: gitk:11379 msgid "(change requires restart)" msgstr "(exige reinicialização)" -#: gitk:10765 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(atualmente indisponível)" -#: gitk:10769 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Cores: clique para escolher" -#: gitk:10772 +#: gitk:11395 msgid "Interface" msgstr "Interface" -#: gitk:10773 +#: gitk:11396 msgid "interface" msgstr "interface" -#: gitk:10776 +#: gitk:11399 msgid "Background" msgstr "Segundo plano" -#: gitk:10777 gitk:10807 +#: gitk:11400 gitk:11430 msgid "background" msgstr "segundo plano" -#: gitk:10780 +#: gitk:11403 msgid "Foreground" msgstr "Primeiro plano" -#: gitk:10781 +#: gitk:11404 msgid "foreground" msgstr "primeiro plano" -#: gitk:10784 +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff: linhas excluídas" -#: gitk:10785 +#: gitk:11408 msgid "diff old lines" msgstr "linhas excluídas" -#: gitk:10789 +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff: linhas adicionadas" -#: gitk:10790 +#: gitk:11413 msgid "diff new lines" msgstr "linhas adicionadas" -#: gitk:10794 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff: cabeçalho do bloco" -#: gitk:10796 +#: gitk:11419 msgid "diff hunk header" msgstr "cabeçalho do bloco" -#: gitk:10800 +#: gitk:11423 msgid "Marked line bg" msgstr "2º plano da linha marcada" -#: gitk:10802 +#: gitk:11425 msgid "marked line background" msgstr "segundo plano da linha marcada" -#: gitk:10806 +#: gitk:11429 msgid "Select bg" msgstr "2º plano da seleção" -#: gitk:10810 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Fontes: clique para escolher" -#: gitk:10812 +#: gitk:11440 msgid "Main font" msgstr "Fonte principal" -#: gitk:10813 +#: gitk:11441 msgid "Diff display font" msgstr "Fonte da lista de mudanças" -#: gitk:10814 +#: gitk:11442 msgid "User interface font" msgstr "Fonte da interface" -#: gitk:10842 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Preferências do Gitk" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Gerar" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: selecionar cor para %s" -#: gitk:11445 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Não há nenhum repositório git aqui." -#: gitk:11449 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "Impossível encontrar o diretório git \"%s\"." - -#: gitk:11496 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "" "O argumento \"%s\" é ambíguo (especifica tanto uma revisão e um nome de " "arquivo)" -#: gitk:11508 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Argumentos incorretos para o gitk:" -#: gitk:11604 +#: gitk:12405 msgid "Command line" msgstr "Linha de comando" + +#~ msgid "next" +#~ msgstr "Próximo" + +#~ msgid "prev" +#~ msgstr "Anterior" + +#~ msgid "CDate" +#~ msgstr "DataR" + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "Impossível encontrar o diretório git \"%s\"." diff --git a/gitk-git/po/ru.po b/gitk-git/po/ru.po index 59873033af..faba6721c1 100644 --- a/gitk-git/po/ru.po +++ b/gitk-git/po/ru.po @@ -5,315 +5,359 @@ msgid "" msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-24 16:00+0200\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2009-04-24 16:00+0200\n" "Last-Translator: Alex Riesen <raa.lkml@gmail.com>\n" "Language-Team: Russian\n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: gitk:113 +#: gitk:140 msgid "Couldn't get list of unmerged files:" +msgstr "Невозможно получить список файлов незавершённой операции слияния:" + +#: gitk:212 gitk:2381 +msgid "Color words" +msgstr "" + +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 +msgid "Markup words" msgstr "" -"Невозможно получить список файлов незавершённой операции слияния:" -#: gitk:268 +#: gitk:324 msgid "Error parsing revisions:" msgstr "Ошибка в идентификаторе версии:" -#: gitk:323 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Ошибка выполнения команды заданной --argscmd:" -#: gitk:336 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" -"Файлы не выбраны: указан --merge, но не было найдено ни одного файла " -"где эта операция должна быть завершена." +"Файлы не выбраны: указан --merge, но не было найдено ни одного файла где эта " +"операция должна быть завершена." -#: gitk:339 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." msgstr "" -"Файлы не выбраны: указан --merge, но в рамках указанного " -"ограничения на имена файлов нет ни одного " -"где эта операция должна быть завершена." +"Файлы не выбраны: указан --merge, но в рамках указанного ограничения на " +"имена файлов нет ни одного где эта операция должна быть завершена." -#: gitk:361 gitk:508 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Ошибка запуска git log:" -#: gitk:379 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Чтение" -#: gitk:439 gitk:4021 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Чтение версий..." -#: gitk:442 gitk:1560 gitk:4024 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Ничего не выбрано" -#: gitk:1436 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Ошибка обработки вывода команды git log:" -#: gitk:1656 +#: gitk:1740 msgid "No commit information available" msgstr "Нет информации о состоянии" -#: gitk:1791 gitk:1815 gitk:3814 gitk:8478 gitk:10014 gitk:10186 +#: gitk:1897 +msgid "mc" +msgstr "" + +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "Ok" -#: gitk:1817 gitk:3816 gitk:8078 gitk:8152 gitk:8259 gitk:8308 gitk:8480 -#: gitk:10015 gitk:10187 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Отмена" -#: gitk:1915 +#: gitk:2069 msgid "Update" msgstr "Обновить" -#: gitk:1916 +#: gitk:2070 msgid "Reload" msgstr "Перечитать" -#: gitk:1917 +#: gitk:2071 msgid "Reread references" msgstr "Обновить список ссылок" -#: gitk:1918 +#: gitk:2072 msgid "List references" msgstr "Список ссылок" -#: gitk:1920 +#: gitk:2074 msgid "Start git gui" msgstr "Запустить git gui" -#: gitk:1922 +#: gitk:2076 msgid "Quit" msgstr "Завершить" -#: gitk:1914 +#: gitk:2068 msgid "File" msgstr "Файл" -#: gitk:1925 +#: gitk:2080 msgid "Preferences" msgstr "Настройки" -#: gitk:1924 +#: gitk:2079 msgid "Edit" msgstr "Редактировать" -#: gitk:1928 +#: gitk:2084 msgid "New view..." msgstr "Новое представление..." -#: gitk:1929 +#: gitk:2085 msgid "Edit view..." msgstr "Редактировать представление..." -#: gitk:1930 +#: gitk:2086 msgid "Delete view" msgstr "Удалить представление" -#: gitk:1932 +#: gitk:2088 msgid "All files" msgstr "Все файлы" -#: gitk:1927 gitk:3626 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Представление" -#: gitk:1935 gitk:2609 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "О gitk" -#: gitk:1936 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Назначения клавиатуры" -#: gitk:1934 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Подсказка" -#: gitk:1994 -msgid "SHA1 ID: " -msgstr "SHA1:" +#: gitk:2185 gitk:8633 +msgid "SHA1 ID:" +msgstr "SHA1 ID:" -#: gitk:2025 +#: gitk:2229 msgid "Row" msgstr "Строка" -#: gitk:2056 +#: gitk:2267 msgid "Find" msgstr "Поиск" -#: gitk:2057 -msgid "next" -msgstr "След." - -#: gitk:2058 -msgid "prev" -msgstr "Пред." - -#: gitk:2059 +#: gitk:2295 msgid "commit" msgstr "состояние" -#: gitk:2062 gitk:2064 gitk:4179 gitk:4202 gitk:4226 gitk:6164 gitk:6236 -#: gitk:6320 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "содержащее:" -#: gitk:2065 gitk:3117 gitk:3122 gitk:4254 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "касательно файлов:" -#: gitk:2066 gitk:4259 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "добавив/удалив строку:" -#: gitk:2075 gitk:2077 +#: gitk:2304 gitk:4761 +msgid "changing lines matching:" +msgstr "" + +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Точно" -#: gitk:2077 gitk:4334 gitk:6132 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "Игнорировать большие/маленькие" -#: gitk:2077 gitk:4228 gitk:4332 gitk:6128 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Регулярные выражения" -#: gitk:2079 gitk:2080 gitk:4353 gitk:4383 gitk:4390 gitk:6256 gitk:6324 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Во всех полях" -#: gitk:2080 gitk:4351 gitk:4383 gitk:6195 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Заголовок" -#: gitk:2081 gitk:4351 gitk:6195 gitk:6324 gitk:6737 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Комментарии" -#: gitk:2081 gitk:4351 gitk:4355 gitk:4390 gitk:6195 gitk:6672 gitk:7923 -#: gitk:7938 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Автор" -#: gitk:2081 gitk:4351 gitk:6195 gitk:6674 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Сохранивший состояние" -#: gitk:2110 +#: gitk:2350 msgid "Search" msgstr "Найти" -#: gitk:2117 +#: gitk:2358 msgid "Diff" msgstr "Сравнить" -#: gitk:2119 +#: gitk:2360 msgid "Old version" msgstr "Старая версия" -#: gitk:2121 +#: gitk:2362 msgid "New version" msgstr "Новая версия" -#: gitk:2123 +#: gitk:2364 msgid "Lines of context" msgstr "Строк контекста" -#: gitk:2133 +#: gitk:2374 msgid "Ignore space change" msgstr "Игнорировать пробелы" -#: gitk:2191 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 +msgid "Line diff" +msgstr "" + +#: gitk:2445 msgid "Patch" msgstr "Патч" -#: gitk:2193 +#: gitk:2447 msgid "Tree" msgstr "Файлы" -#: gitk:2326 gitk:2339 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Сравнить это состояние с выделенным" -#: gitk:2327 gitk:2340 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Сравнить выделенное с этим состоянием" -#: gitk:2328 gitk:2341 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Создать патч" -#: gitk:2329 gitk:8136 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Создать метку" -#: gitk:2330 gitk:8239 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Сохранить изменения в файл" -#: gitk:2331 gitk:8296 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Создать ветвь" -#: gitk:2332 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Скопировать это состояние" -#: gitk:2333 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Установить HEAD на это состояние" -#: gitk:2347 +#: gitk:2624 +#, fuzzy +msgid "Mark this commit" +msgstr "Скопировать это состояние" + +#: gitk:2625 +msgid "Return to mark" +msgstr "" + +#: gitk:2626 +msgid "Find descendant of this and mark" +msgstr "" + +#: gitk:2627 +msgid "Compare with marked commit" +msgstr "" + +#: gitk:2628 gitk:2639 +#, fuzzy +msgid "Diff this -> marked commit" +msgstr "Сравнить это состояние с выделенным" + +#: gitk:2629 gitk:2640 +#, fuzzy +msgid "Diff marked commit -> this" +msgstr "Сравнить выделенное с этим состоянием" + +#: gitk:2630 +#, fuzzy +msgid "Revert this commit" +msgstr "Скопировать это состояние" + +#: gitk:2646 msgid "Check out this branch" msgstr "Перейти на эту ветвь" -#: gitk:2348 +#: gitk:2647 msgid "Remove this branch" msgstr "Удалить эту ветвь" -#: gitk:2355 +#: gitk:2654 msgid "Highlight this too" msgstr "Подсветить этот тоже" -#: gitk:2356 +#: gitk:2655 msgid "Highlight this only" msgstr "Подсветить только этот" -#: gitk:2357 +#: gitk:2656 msgid "External diff" msgstr "Программа сравнения" -#: gitk:2358 +#: gitk:2657 msgid "Blame parent commit" msgstr "Аннотировать родительское состояние" -#: gitk:2365 +#: gitk:2664 msgid "Show origin of this line" msgstr "Показать источник этой строки" -#: gitk:2366 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Запустить git gui blame для этой строки" -#: gitk:2611 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -324,497 +368,667 @@ msgstr "" "\n" "Использование и распространение согласно условиям GNU General Public License" -#: gitk:2619 gitk:2681 gitk:8661 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Закрыть" -#: gitk:2638 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Назначения клавиатуры в Gitk" -#: gitk:2641 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Назначения клавиатуры в Gitk:" -#: gitk:2643 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tЗавершить" -#: gitk:2644 +#: gitk:3046 +#, fuzzy, tcl-format +msgid "<%s-W>\t\tClose window" +msgstr "<%s-F>\t\tПоиск" + +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tПерейти к первому состоянию" -#: gitk:2645 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tПерейти к последнему состоянию" -#: gitk:2646 -msgid "<Up>, p, i\tMove up one commit" +#: gitk:3049 +#, fuzzy +msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, i\tПерейти к следующему состоянию" -#: gitk:2647 -msgid "<Down>, n, k\tMove down one commit" +#: gitk:3050 +#, fuzzy +msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, k\tПерейти к предыдущему состоянию" -#: gitk:2648 -msgid "<Left>, z, j\tGo back in history list" +#: gitk:3051 +#, fuzzy +msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, j\tПоказать ранее посещённое состояние" -#: gitk:2649 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\tПоказать следующее посещённое состояние" -#: gitk:2650 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tПерейти на страницу выше в списке состояний" -#: gitk:2651 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tПерейти на страницу ниже в списке состояний" -#: gitk:2652 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tПоказать начало списка состояний" -#: gitk:2653 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tПоказать конец списка состояний" -#: gitk:2654 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tПровернуть список состояний вверх" -#: gitk:2655 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tПровернуть список состояний вниз" -#: gitk:2656 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tПровернуть список состояний на страницу вверх" -#: gitk:2657 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tПровернуть список состояний на страницу вниз" -#: gitk:2658 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" -msgstr "" -"<Shift-Up>\tПоиск в обратном порядке (вверх, среди новых состояний)" +msgstr "<Shift-Up>\tПоиск в обратном порядке (вверх, среди новых состояний)" -#: gitk:2659 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Shift-Down>\tПоиск (вниз, среди старых состояний)" -#: gitk:2660 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tПрокрутить список изменений на страницу выше" -#: gitk:2661 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tПрокрутить список изменений на страницу выше" -#: gitk:2662 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Leertaste>\t\tПрокрутить список изменений на страницу ниже" -#: gitk:2663 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tПрокрутить список изменений на 18 строк вверх" -#: gitk:2664 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tПрокрутить список изменений на 18 строк вниз" -#: gitk:2665 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tПоиск" -#: gitk:2666 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tПерейти к следующему найденному состоянию" -#: gitk:2667 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\tПерейти к следующему найденному состоянию" -#: gitk:2668 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tПерейти к полю поиска" -#: gitk:2669 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tПерейти к предыдущему найденному состоянию" -#: gitk:2670 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tПрокрутить список изменений к следующему файлу" -#: gitk:2671 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tПродолжить поиск в списке изменений" -#: gitk:2672 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tПерейти к предыдущему найденному тексту в списке изменений" -#: gitk:2673 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tУвеличить размер шрифта" -#: gitk:2674 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tУвеличить размер шрифта" -#: gitk:2675 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tУменьшить размер шрифта" -#: gitk:2676 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tУменьшить размер шрифта" -#: gitk:2677 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tОбновить" -#: gitk:3132 -#, tcl-format -msgid "Error getting \"%s\" from %s:" -msgstr "Ошибка получения \"%s\" из %s:" - -#: gitk:3189 gitk:3198 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Ошибка создания временного каталога %s:" -#: gitk:3211 +#: gitk:3568 +#, tcl-format +msgid "Error getting \"%s\" from %s:" +msgstr "Ошибка получения \"%s\" из %s:" + +#: gitk:3631 msgid "command failed:" msgstr "ошибка выполнения команды:" -#: gitk:3357 +#: gitk:3780 msgid "No such commit" msgstr "Состояние не найдено" -#: gitk:3371 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: ошибка выполнения команды:" -#: gitk:3402 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Ошибка чтения MERGE_HEAD: %s" -#: gitk:3410 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Ошибка чтения индекса: %s" -#: gitk:3435 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Ошибка запуска git blame: %s" -#: gitk:3438 gitk:6163 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Поиск" -#: gitk:3470 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Ошибка выполнения git blame: %s" -#: gitk:3498 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "" -"Эта строка принадлежит состоянию %s, которое не показано в этом " -"представлении" +"Эта строка принадлежит состоянию %s, которое не показано в этом представлении" -#: gitk:3512 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Ошибка выполнения программы сравнения:" -#: gitk:3630 +#: gitk:4053 msgid "Gitk view definition" msgstr "Gitk определение представлений" -#: gitk:3634 +#: gitk:4057 msgid "Remember this view" msgstr "Запомнить представление" -#: gitk:3635 -msgid "Commits to include (arguments to git log):" -msgstr "Включить состояния (аргументы для git-log):" +#: gitk:4058 +msgid "References (space separated list):" +msgstr "" + +#: gitk:4059 +msgid "Branches & tags:" +msgstr "" -#: gitk:3636 -msgid "Use all refs" -msgstr "Использовать все ветви" +#: gitk:4060 +#, fuzzy +msgid "All refs" +msgstr "Все файлы" -#: gitk:3637 -msgid "Strictly sort by date" -msgstr "Строгая сортировка по дате" +#: gitk:4061 +msgid "All (local) branches" +msgstr "" -#: gitk:3638 -msgid "Mark branch sides" -msgstr "Отметить стороны ветвей" +#: gitk:4062 +msgid "All tags" +msgstr "" + +#: gitk:4063 +msgid "All remote-tracking branches" +msgstr "" + +#: gitk:4064 +msgid "Commit Info (regular expressions):" +msgstr "" + +#: gitk:4065 +#, fuzzy +msgid "Author:" +msgstr "Автор" + +#: gitk:4066 +#, fuzzy +msgid "Committer:" +msgstr "Сохранивший состояние" + +#: gitk:4067 +msgid "Commit Message:" +msgstr "" + +#: gitk:4068 +msgid "Matches all Commit Info criteria" +msgstr "" + +#: gitk:4069 +msgid "Matches none Commit Info criteria" +msgstr "" + +#: gitk:4070 +msgid "Changes to Files:" +msgstr "" + +#: gitk:4071 +msgid "Fixed String" +msgstr "" + +#: gitk:4072 +msgid "Regular Expression" +msgstr "" -#: gitk:3639 -msgid "Since date:" +#: gitk:4073 +#, fuzzy +msgid "Search string:" +msgstr "Поиск" + +#: gitk:4074 +msgid "" +"Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " +"15:27:38\"):" +msgstr "" + +#: gitk:4075 +#, fuzzy +msgid "Since:" msgstr "С даты:" -#: gitk:3640 -msgid "Until date:" +#: gitk:4076 +#, fuzzy +msgid "Until:" msgstr "По дату:" -#: gitk:3641 -msgid "Max count:" -msgstr "Макс. количество:" +#: gitk:4077 +msgid "Limit and/or skip a number of revisions (positive integer):" +msgstr "" + +#: gitk:4078 +msgid "Number to show:" +msgstr "" + +#: gitk:4079 +msgid "Number to skip:" +msgstr "" + +#: gitk:4080 +msgid "Miscellaneous options:" +msgstr "" + +#: gitk:4081 +msgid "Strictly sort by date" +msgstr "Строгая сортировка по дате" -#: gitk:3642 -msgid "Skip:" -msgstr "Пропустить:" +#: gitk:4082 +msgid "Mark branch sides" +msgstr "Отметить стороны ветвей" -#: gitk:3643 +#: gitk:4083 msgid "Limit to first parent" msgstr "Ограничить первым предком" -#: gitk:3644 -msgid "Command to generate more commits to include:" -msgstr "Дополнительная команда для списка состояний:" +#: gitk:4084 +msgid "Simple history" +msgstr "" -#: gitk:3753 -msgid "Name" -msgstr "Имя" +#: gitk:4085 +#, fuzzy +msgid "Additional arguments to git log:" +msgstr "Включить состояния (аргументы для git-log):" -#: gitk:3801 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Файлы и каталоги для ограничения истории, по одному на строку:" -#: gitk:3815 +#: gitk:4087 +msgid "Command to generate more commits to include:" +msgstr "Дополнительная команда для списка состояний:" + +#: gitk:4211 +msgid "Gitk: edit view" +msgstr "" + +#: gitk:4219 +#, fuzzy +msgid "-- criteria for selecting revisions" +msgstr "Ошибка в идентификаторе версии:" + +#: gitk:4224 +#, fuzzy +msgid "View Name" +msgstr "Представление" + +#: gitk:4299 msgid "Apply (F5)" msgstr "Применить (F5)" -#: gitk:3853 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Ошибка в параметрах выбора состояний:" -#: gitk:3906 gitk:3958 gitk:4403 gitk:4417 gitk:5675 gitk:10867 gitk:10868 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Ни одного" -#: gitk:4351 gitk:6195 gitk:7925 gitk:7940 -msgid "Date" -msgstr "Дата" - -#: gitk:4351 gitk:6195 -msgid "CDate" -msgstr "Дата ввода" - -#: gitk:4500 gitk:4505 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Порождённое" -#: gitk:4501 +#: gitk:5004 msgid "Not descendant" msgstr "Не порождённое" -#: gitk:4508 gitk:4513 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Предок" -#: gitk:4509 +#: gitk:5012 msgid "Not ancestor" msgstr "Не предок" -#: gitk:4799 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Изменения зарегистрированные в индексе, но не сохранённые" -#: gitk:4835 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Изменения в рабочем каталоге, не зарегистрированные в индексе" -#: gitk:6676 +#: gitk:7115 +msgid "and many more" +msgstr "" + +#: gitk:7118 +msgid "many" +msgstr "" + +#: gitk:7309 msgid "Tags:" msgstr "Таги:" -#: gitk:6693 gitk:6699 gitk:7918 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Предок" -#: gitk:6704 +#: gitk:7337 msgid "Child" msgstr "Потомок" -#: gitk:6713 +#: gitk:7346 msgid "Branch" msgstr "Ветвь" -#: gitk:6716 +#: gitk:7349 msgid "Follows" msgstr "Следует за" -#: gitk:6719 +#: gitk:7352 msgid "Precedes" msgstr "Предшествует" -#: gitk:7212 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Ошибка получения изменений: %s" -#: gitk:7751 +#: gitk:8631 msgid "Goto:" msgstr "Перейти к:" -#: gitk:7753 -msgid "SHA1 ID:" -msgstr "SHA1 ID:" - -#: gitk:7772 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Сокращённый SHA1 идентификатор %s неоднозначен" -#: gitk:7784 +#: gitk:8659 +#, fuzzy, tcl-format +msgid "Revision %s is not known" +msgstr "SHA1 идентификатор %s не найден" + +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "SHA1 идентификатор %s не найден" -#: gitk:7786 +#: gitk:8671 #, tcl-format -msgid "Tag/Head %s is not known" -msgstr "Метка или ветвь %s не найдена" +msgid "Revision %s is not in the current view" +msgstr "" -#: gitk:7928 +#: gitk:8813 gitk:8828 +msgid "Date" +msgstr "Дата" + +#: gitk:8816 msgid "Children" msgstr "Потомки" -#: gitk:7985 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Установить ветвь %s на это состояние" -#: gitk:7987 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Состояние не принадлежит ни одной ветви, переход невозможен" -#: gitk:8019 +#: gitk:8986 gitk:8992 +msgid "Skipping merge commit " +msgstr "" + +#: gitk:9001 gitk:9006 +#, fuzzy +msgid "Error getting patch ID for " +msgstr "Ошибка создания патча:" + +#: gitk:9002 gitk:9007 +msgid " - stopping\n" +msgstr "" + +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 +#, fuzzy +msgid "Commit " +msgstr "состояние" + +#: gitk:9016 +msgid "" +" is the same patch as\n" +" " +msgstr "" + +#: gitk:9024 +msgid "" +" differs from\n" +" " +msgstr "" + +#: gitk:9026 +msgid "" +"Diff of commits:\n" +"\n" +msgstr "" + +#: gitk:9038 gitk:9047 +#, tcl-format +msgid " has %s children - stopping\n" +msgstr "" + +#: gitk:9066 +#, fuzzy, tcl-format +msgid "Error writing commit to file: %s" +msgstr "Ошибка сохранения состояния:" + +#: gitk:9072 +#, fuzzy, tcl-format +msgid "Error diffing commits: %s" +msgstr "Ошибка сохранения состояния:" + +#: gitk:9118 msgid "Top" msgstr "Верх" -#: gitk:8020 +#: gitk:9119 msgid "From" msgstr "От" -#: gitk:8025 +#: gitk:9124 msgid "To" msgstr "До" -#: gitk:8049 +#: gitk:9148 msgid "Generate patch" msgstr "Создать патч" -#: gitk:8051 +#: gitk:9150 msgid "From:" msgstr "От:" -#: gitk:8060 +#: gitk:9159 msgid "To:" msgstr "До:" -#: gitk:8069 +#: gitk:9168 msgid "Reverse" msgstr "В обратном порядке" -#: gitk:8071 gitk:8253 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Файл для сохранения:" -#: gitk:8077 +#: gitk:9176 msgid "Generate" msgstr "Создать" -#: gitk:8115 +#: gitk:9214 msgid "Error creating patch:" msgstr "Ошибка создания патча:" -#: gitk:8138 gitk:8241 gitk:8298 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:8147 +#: gitk:9246 msgid "Tag name:" msgstr "Имя метки:" -#: gitk:8151 gitk:8307 +#: gitk:9249 +msgid "Tag message is optional" +msgstr "" + +#: gitk:9251 +#, fuzzy +msgid "Tag message:" +msgstr "Имя метки:" + +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Создать" -#: gitk:8168 +#: gitk:9273 msgid "No tag name specified" msgstr "Не задано имя метки" -#: gitk:8172 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Метка \"%s\" уже существует" -#: gitk:8178 +#: gitk:9287 msgid "Error creating tag:" msgstr "Ошибка создания метки:" -#: gitk:8250 +#: gitk:9363 msgid "Command:" msgstr "Команда:" -#: gitk:8258 +#: gitk:9371 msgid "Write" msgstr "Запись" -#: gitk:8276 +#: gitk:9389 msgid "Error writing commit:" msgstr "Ошибка сохранения состояния:" -#: gitk:8303 +#: gitk:9416 msgid "Name:" msgstr "Имя:" -#: gitk:8326 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Укажите имя для новой ветви" -#: gitk:8331 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "Ветвь '%s' уже существует. Переписать?" -#: gitk:8397 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" -msgstr "" -"Состояние %s уже принадлежит ветви %s. Продолжить операцию?" +msgstr "Состояние %s уже принадлежит ветви %s. Продолжить операцию?" -#: gitk:8402 +#: gitk:9516 msgid "Cherry-picking" msgstr "Копирование изменений" -#: gitk:8411 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -823,61 +1037,88 @@ msgstr "" "Копирование невозможно из-за изменений в файле '%s'.\n" "Сохраните или отмените изменения и повторите операцию." -#: gitk:8417 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" msgstr "" -"Копирование изменений невозможно из-за незавершённой операции " -"слияния.\nЗапустить git citool для завершения этой операции?" +"Копирование изменений невозможно из-за незавершённой операции слияния.\n" +"Запустить git citool для завершения этой операции?" -#: gitk:8433 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Изменения не сохранены" -#: gitk:8459 +#: gitk:9574 +#, fuzzy, tcl-format +msgid "Commit %s is not included in branch %s -- really revert it?" +msgstr "Состояние %s уже принадлежит ветви %s. Продолжить операцию?" + +#: gitk:9579 +#, fuzzy +msgid "Reverting" +msgstr "Установка" + +#: gitk:9587 +#, fuzzy, 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 "" +"Копирование невозможно из-за изменений в файле '%s'.\n" +"Сохраните или отмените изменения и повторите операцию." + +#: gitk:9591 +#, fuzzy +msgid "" +"Revert failed because of merge conflict.\n" +" Do you wish to run git citool to resolve it?" +msgstr "" +"Копирование изменений невозможно из-за незавершённой операции слияния.\n" +"Запустить git citool для завершения этой операции?" + +#: gitk:9634 msgid "Confirm reset" msgstr "Подтвердите операцию перехода" -#: gitk:8461 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Установить ветвь %s на состояние %s?" -#: gitk:8465 +#: gitk:9638 msgid "Reset type:" msgstr "Тип операции перехода:" -#: gitk:8469 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Лёгкий: оставить рабочий каталог и индекс неизменными" -#: gitk:8472 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" -msgstr "" -"Смешанный: оставить рабочий каталог неизменным, установить индекс" +msgstr "Смешанный: оставить рабочий каталог неизменным, установить индекс" -#: gitk:8475 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" msgstr "" "Жесткий: переписать индекс и рабочий каталог\n" -"(все изменения в рабочем каталоги будут потеряны)" +"(все изменения в рабочем каталоге будут потеряны)" -#: gitk:8492 +#: gitk:9664 msgid "Resetting" msgstr "Установка" -#: gitk:8549 +#: gitk:9724 msgid "Checking out" msgstr "Переход" -#: gitk:8602 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Активная ветвь не может быть удалена" -#: gitk:8608 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -886,200 +1127,272 @@ msgstr "" "Состояния ветви %s больше не принадлежат никакой другой ветви.\n" "Действительно удалить ветвь %s?" -#: gitk:8639 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Метки и ветви: %s" -#: gitk:8654 +#: gitk:9829 msgid "Filter" msgstr "Фильтровать" -#: gitk:8949 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." msgstr "" -"Ошибка чтения истории проекта; информация о ветвях и состояниях " -"вокруг меток (до/после) может быть неполной." +"Ошибка чтения истории проекта; информация о ветвях и состояниях вокруг меток " +"(до/после) может быть неполной." -#: gitk:9935 +#: gitk:11102 msgid "Tag" msgstr "Метка" -#: gitk:9935 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:9983 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Шрифт Gitk" -#: gitk:10000 +#: gitk:11206 msgid "B" msgstr "Ж" -#: gitk:10003 +#: gitk:11209 msgid "I" msgstr "К" -#: gitk:10098 -msgid "Gitk preferences" -msgstr "Настройки Gitk" - -#: gitk:10100 +#: gitk:11327 msgid "Commit list display options" msgstr "Параметры показа списка состояний" -#: gitk:10103 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Макс. ширина графа (строк)" -#: gitk:10107 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Макс. ширина графа (% ширины панели)" -#: gitk:10111 +#: gitk:11337 msgid "Show local changes" msgstr "Показывать изменения в рабочем каталоге" -#: gitk:10114 -msgid "Auto-select SHA1" +#: gitk:11340 +#, fuzzy +msgid "Auto-select SHA1 (length)" msgstr "Выделить SHA1" -#: gitk:10118 +#: gitk:11344 +msgid "Hide remote refs" +msgstr "" + +#: gitk:11348 msgid "Diff display options" msgstr "Параметры показа изменений" -#: gitk:10120 +#: gitk:11350 msgid "Tab spacing" msgstr "Ширина табуляции" -#: gitk:10123 -msgid "Display nearby tags" +#: gitk:11353 +#, fuzzy +msgid "Display nearby tags/heads" msgstr "Показывать близкие метки" -#: gitk:10126 +#: gitk:11356 +msgid "Maximum # tags/heads to show" +msgstr "" + +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Ограничить показ изменений выбранными файлами" -#: gitk:10129 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Поддержка кодировок в отдельных файлах" -#: gitk:10135 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Программа для показа изменений" -#: gitk:10137 +#: gitk:11369 msgid "Choose..." msgstr "Выберите..." -#: gitk:10142 +#: gitk:11374 +#, fuzzy +msgid "General options" +msgstr "Создать патч" + +#: gitk:11377 +msgid "Use themed widgets" +msgstr "" + +#: gitk:11379 +msgid "(change requires restart)" +msgstr "" + +#: gitk:11381 +msgid "(currently unavailable)" +msgstr "" + +#: gitk:11392 msgid "Colors: press to choose" msgstr "Цвета: нажмите для выбора" -#: gitk:10145 +#: gitk:11395 +msgid "Interface" +msgstr "" + +#: gitk:11396 +#, fuzzy +msgid "interface" +msgstr "Шрифт интерфейса" + +#: gitk:11399 msgid "Background" msgstr "Фон" -#: gitk:10146 gitk:10176 +#: gitk:11400 gitk:11430 msgid "background" msgstr "фон" -#: gitk:10149 +#: gitk:11403 msgid "Foreground" msgstr "Передний план" -#: gitk:10150 +#: gitk:11404 msgid "foreground" msgstr "передний план" -#: gitk:10153 +#: gitk:11407 msgid "Diff: old lines" msgstr "Изменения: старый текст" -#: gitk:10154 +#: gitk:11408 msgid "diff old lines" msgstr "старый текст изменения" -#: gitk:10158 +#: gitk:11412 msgid "Diff: new lines" msgstr "Изменения: новый текст" -#: gitk:10159 +#: gitk:11413 msgid "diff new lines" msgstr "новый текст изменения" -#: gitk:10163 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Изменения: заголовок блока" -#: gitk:10165 +#: gitk:11419 msgid "diff hunk header" msgstr "заголовок блока изменений" -#: gitk:10169 +#: gitk:11423 msgid "Marked line bg" msgstr "Фон выбранной строки" -#: gitk:10171 +#: gitk:11425 msgid "marked line background" msgstr "фон выбранной строки" -#: gitk:10175 +#: gitk:11429 msgid "Select bg" msgstr "Выберите фон" -#: gitk:10179 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Шрифт: нажмите для выбора" -#: gitk:10181 +#: gitk:11440 msgid "Main font" msgstr "Основной шрифт" -#: gitk:10182 +#: gitk:11441 msgid "Diff display font" msgstr "Шрифт показа изменений" -#: gitk:10183 +#: gitk:11442 msgid "User interface font" msgstr "Шрифт интерфейса" -#: gitk:10210 +#: gitk:11464 +msgid "Gitk preferences" +msgstr "Настройки Gitk" + +#: gitk:11473 +#, fuzzy +msgid "General" +msgstr "Создать" + +#: gitk:11474 +msgid "Colors" +msgstr "" + +#: gitk:11475 +msgid "Fonts" +msgstr "" + +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: выберите цвет для %s" -#: gitk:10656 -msgid "" -"Sorry, gitk cannot run with this version of Tcl/Tk.\n" -" Gitk requires at least Tcl/Tk 8.4." -msgstr "" -"К сожалению gitk не может работать с этой версий Tcl/Tk.\n" -"Требуется как минимум Tcl/Tk 8.4." - -#: gitk:10773 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Git-репозитарий не найден в текущем каталоге." -#: gitk:10777 -#, tcl-format -msgid "Cannot find the git directory \"%s\"." -msgstr "Git-репозитарий \"%s\" не найден." - -#: gitk:10824 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Неоднозначный аргумент '%s': существует как версия и имя файла" -#: gitk:10836 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Неправильные аргументы для gitk:" -#: gitk:10896 +#: gitk:12405 msgid "Command line" msgstr "Командная строка" +#~ msgid "SHA1 ID: " +#~ msgstr "SHA1:" + +#~ msgid "next" +#~ msgstr "След." + +#~ msgid "prev" +#~ msgstr "Пред." + +#~ msgid "Use all refs" +#~ msgstr "Использовать все ветви" + +#~ msgid "Max count:" +#~ msgstr "Макс. количество:" + +#~ msgid "Skip:" +#~ msgstr "Пропустить:" + +#~ msgid "Name" +#~ msgstr "Имя" + +#~ msgid "CDate" +#~ msgstr "Дата ввода" + +#~ msgid "Tag/Head %s is not known" +#~ msgstr "Метка или ветвь %s не найдена" + +#~ msgid "" +#~ "Sorry, gitk cannot run with this version of Tcl/Tk.\n" +#~ " Gitk requires at least Tcl/Tk 8.4." +#~ msgstr "" +#~ "К сожалению gitk не может работать с этой версий Tcl/Tk.\n" +#~ "Требуется как минимум Tcl/Tk 8.4." + +#~ msgid "Cannot find the git directory \"%s\"." +#~ msgstr "Git-репозитарий \"%s\" не найден." diff --git a/gitk-git/po/sv.po b/gitk-git/po/sv.po index df95e01b90..0994d87c28 100644 --- a/gitk-git/po/sv.po +++ b/gitk-git/po/sv.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: sv\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-05-16 08:06+0100\n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2013-05-16 08:12+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" @@ -22,29 +22,29 @@ msgstr "" msgid "Couldn't get list of unmerged files:" msgstr "Kunde inte hämta lista över ej sammanslagna filer:" -#: gitk:210 gitk:2334 +#: gitk:212 gitk:2381 msgid "Color words" msgstr "Färga ord" -#: gitk:215 gitk:2334 gitk:7977 gitk:8010 +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 msgid "Markup words" msgstr "Märk upp ord" -#: gitk:312 +#: gitk:324 msgid "Error parsing revisions:" msgstr "Fel vid tolkning av revisioner:" -#: gitk:368 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Fel vid körning av --argscmd-kommando:" -#: gitk:381 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Inga filer valdes: --merge angavs men det finns inga filer som inte har " "slagits samman." -#: gitk:384 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -52,319 +52,312 @@ msgstr "" "Inga filer valdes: --merge angavs men det finns inga filer inom " "filbegränsningen." -#: gitk:406 gitk:554 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Fel vid körning av git log:" -#: gitk:424 gitk:570 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Läser" -#: gitk:484 gitk:4409 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Läser incheckningar..." -#: gitk:487 gitk:1625 gitk:4412 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Inga incheckningar markerade" -#: gitk:1499 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Kan inte tolka utdata från git log:" -#: gitk:1719 +#: gitk:1740 msgid "No commit information available" msgstr "Ingen incheckningsinformation är tillgänglig" -#: gitk:1876 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1911 gitk:4202 gitk:9437 gitk:10979 gitk:11258 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "OK" -#: gitk:1913 gitk:4204 gitk:8964 gitk:9043 gitk:9159 gitk:9208 gitk:9439 -#: gitk:10980 gitk:11259 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Avbryt" -#: gitk:2048 +#: gitk:2069 msgid "Update" msgstr "Uppdatera" -#: gitk:2049 +#: gitk:2070 msgid "Reload" msgstr "Ladda om" -#: gitk:2050 +#: gitk:2071 msgid "Reread references" msgstr "Läs om referenser" -#: gitk:2051 +#: gitk:2072 msgid "List references" msgstr "Visa referenser" -#: gitk:2053 +#: gitk:2074 msgid "Start git gui" msgstr "Starta git gui" -#: gitk:2055 +#: gitk:2076 msgid "Quit" msgstr "Avsluta" -#: gitk:2047 +#: gitk:2068 msgid "File" msgstr "Arkiv" -#: gitk:2059 +#: gitk:2080 msgid "Preferences" msgstr "Inställningar" -#: gitk:2058 +#: gitk:2079 msgid "Edit" msgstr "Redigera" -#: gitk:2063 +#: gitk:2084 msgid "New view..." msgstr "Ny vy..." -#: gitk:2064 +#: gitk:2085 msgid "Edit view..." msgstr "Ändra vy..." -#: gitk:2065 +#: gitk:2086 msgid "Delete view" msgstr "Ta bort vy" -#: gitk:2067 +#: gitk:2088 msgid "All files" msgstr "Alla filer" -#: gitk:2062 gitk:3955 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Visa" -#: gitk:2072 gitk:2082 gitk:2925 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Om gitk" -#: gitk:2073 gitk:2087 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Tangentbordsbindningar" -#: gitk:2071 gitk:2086 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Hjälp" -#: gitk:2164 gitk:8420 +#: gitk:2185 gitk:8633 msgid "SHA1 ID:" msgstr "SHA1-id:" -#: gitk:2208 +#: gitk:2229 msgid "Row" msgstr "Rad" -#: gitk:2246 +#: gitk:2267 msgid "Find" msgstr "Sök" -#: gitk:2247 -msgid "next" -msgstr "nästa" - -#: gitk:2248 -msgid "prev" -msgstr "föreg" - -#: gitk:2249 +#: gitk:2295 msgid "commit" msgstr "incheckning" -#: gitk:2252 gitk:2254 gitk:4570 gitk:4593 gitk:4617 gitk:6592 gitk:6664 -#: gitk:6749 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "som innehåller:" -#: gitk:2255 gitk:3437 gitk:3442 gitk:4646 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "som rör sökväg:" -#: gitk:2256 gitk:4660 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "som lägger/till tar bort sträng:" -#: gitk:2257 gitk:4662 +#: gitk:2304 gitk:4761 msgid "changing lines matching:" msgstr "ändrar rader som matchar:" -#: gitk:2266 gitk:2268 gitk:4649 +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Exakt" -#: gitk:2268 gitk:4737 gitk:6560 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "IgnVersaler" -#: gitk:2268 gitk:4619 gitk:4735 gitk:6556 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "Reg.uttr." -#: gitk:2270 gitk:2271 gitk:4757 gitk:4787 gitk:4794 gitk:6685 gitk:6753 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Alla fält" -#: gitk:2271 gitk:4754 gitk:4787 gitk:6623 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Rubrik" -#: gitk:2272 gitk:4754 gitk:6623 gitk:6753 gitk:7221 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Kommentarer" -#: gitk:2272 gitk:4754 gitk:4759 gitk:4794 gitk:6623 gitk:7156 gitk:8598 -#: gitk:8613 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Författare" -#: gitk:2272 gitk:4754 gitk:6623 gitk:7158 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Incheckare" -#: gitk:2303 +#: gitk:2350 msgid "Search" msgstr "Sök" -#: gitk:2311 +#: gitk:2358 msgid "Diff" msgstr "Diff" -#: gitk:2313 +#: gitk:2360 msgid "Old version" msgstr "Gammal version" -#: gitk:2315 +#: gitk:2362 msgid "New version" msgstr "Ny version" -#: gitk:2317 +#: gitk:2364 msgid "Lines of context" msgstr "Rader sammanhang" -#: gitk:2327 +#: gitk:2374 msgid "Ignore space change" msgstr "Ignorera ändringar i blanksteg" -#: gitk:2331 gitk:2333 gitk:7735 gitk:7963 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 msgid "Line diff" msgstr "Rad-diff" -#: gitk:2397 +#: gitk:2445 msgid "Patch" msgstr "Patch" -#: gitk:2399 +#: gitk:2447 msgid "Tree" msgstr "Träd" -#: gitk:2557 gitk:2577 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "Diff denna -> markerad" -#: gitk:2558 gitk:2578 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "Diff markerad -> denna" -#: gitk:2559 gitk:2579 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Skapa patch" -#: gitk:2560 gitk:9022 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Skapa tagg" -#: gitk:2561 gitk:9139 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Skriv incheckning till fil" -#: gitk:2562 gitk:9196 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Skapa ny gren" -#: gitk:2563 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Plocka denna incheckning" -#: gitk:2564 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Återställ HEAD-grenen hit" -#: gitk:2565 +#: gitk:2624 msgid "Mark this commit" msgstr "Markera denna incheckning" -#: gitk:2566 +#: gitk:2625 msgid "Return to mark" msgstr "Återgå till markering" -#: gitk:2567 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Hitta efterföljare till denna och markera" -#: gitk:2568 +#: gitk:2627 msgid "Compare with marked commit" msgstr "Jämför med markerad incheckning" -#: gitk:2569 gitk:2580 +#: gitk:2628 gitk:2639 msgid "Diff this -> marked commit" msgstr "Diff denna -> markerad incheckning" -#: gitk:2570 gitk:2581 +#: gitk:2629 gitk:2640 msgid "Diff marked commit -> this" msgstr "Diff markerad incheckning -> denna" -#: gitk:2571 +#: gitk:2630 msgid "Revert this commit" msgstr "Ångra denna incheckning" -#: gitk:2587 +#: gitk:2646 msgid "Check out this branch" msgstr "Checka ut denna gren" -#: gitk:2588 +#: gitk:2647 msgid "Remove this branch" msgstr "Ta bort denna gren" -#: gitk:2595 +#: gitk:2654 msgid "Highlight this too" msgstr "Markera även detta" -#: gitk:2596 +#: gitk:2655 msgid "Highlight this only" msgstr "Markera bara detta" -#: gitk:2597 +#: gitk:2656 msgid "External diff" msgstr "Extern diff" -#: gitk:2598 +#: gitk:2657 msgid "Blame parent commit" msgstr "Klandra föräldraincheckning" -#: gitk:2605 +#: gitk:2664 msgid "Show origin of this line" msgstr "Visa ursprunget för den här raden" -#: gitk:2606 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Kör git gui blame på den här raden" -#: gitk:2927 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright ©9 2005-2011 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -375,302 +368,312 @@ msgstr "" "\n" "Använd och vidareförmedla enligt villkoren i GNU General Public License" -#: gitk:2935 gitk:3000 gitk:9623 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Stäng" -#: gitk:2956 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Tangentbordsbindningar för Gitk" -#: gitk:2959 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Tangentbordsbindningar för Gitk:" -#: gitk:2961 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tAvsluta" -#: gitk:2962 +#: gitk:3046 #, tcl-format msgid "<%s-W>\t\tClose window" msgstr "<%s-W>\t\tStäng fönster" -#: gitk:2963 +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tGå till första incheckning" -#: gitk:2964 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tGå till sista incheckning" -#: gitk:2965 +#: gitk:3049 msgid "<Up>, p, k\tMove up one commit" msgstr "<Upp>, p, k\tGå en incheckning upp" -#: gitk:2966 +#: gitk:3050 msgid "<Down>, n, j\tMove down one commit" msgstr "<Ned>, n, j\tGå en incheckning ned" -#: gitk:2967 +#: gitk:3051 msgid "<Left>, z, h\tGo back in history list" msgstr "<Vänster>, z, h\tGå bakåt i historiken" -#: gitk:2968 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Höger>, x, l\tGå framåt i historiken" -#: gitk:2969 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tGå upp en sida i incheckningslistan" -#: gitk:2970 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tGå ned en sida i incheckningslistan" -#: gitk:2971 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tRulla till början av incheckningslistan" -#: gitk:2972 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tRulla till slutet av incheckningslistan" -#: gitk:2973 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Upp>\tRulla incheckningslistan upp ett steg" -#: gitk:2974 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Ned>\tRulla incheckningslistan ned ett steg" -#: gitk:2975 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tRulla incheckningslistan upp en sida" -#: gitk:2976 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tRulla incheckningslistan ned en sida" -#: gitk:2977 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Skift-Upp>\tSök bakåt (uppåt, senare incheckningar)" -#: gitk:2978 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Skift-Ned>\tSök framåt (nedåt, tidigare incheckningar)" -#: gitk:2979 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tRulla diffvisningen upp en sida" -#: gitk:2980 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Baksteg>\tRulla diffvisningen upp en sida" -#: gitk:2981 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Blanksteg>\tRulla diffvisningen ned en sida" -#: gitk:2982 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tRulla diffvisningen upp 18 rader" -#: gitk:2983 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tRulla diffvisningen ned 18 rader" -#: gitk:2984 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tSök" -#: gitk:2985 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tGå till nästa sökträff" -#: gitk:2986 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\t\tGå till nästa sökträff" -#: gitk:2987 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tFokusera sökrutan" -#: gitk:2988 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tGå till föregående sökträff" -#: gitk:2989 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tRulla diffvisningen till nästa fil" -#: gitk:2990 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tGå till nästa sökträff i diffvisningen" -#: gitk:2991 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tGå till föregående sökträff i diffvisningen" -#: gitk:2992 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-Num+>\tÖka teckenstorlek" -#: gitk:2993 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tÖka teckenstorlek" -#: gitk:2994 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-Num->\tMinska teckenstorlek" -#: gitk:2995 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tMinska teckenstorlek" -#: gitk:2996 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tUppdatera" -#: gitk:3451 gitk:3460 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Fel vid skapande av temporär katalog %s:" -#: gitk:3473 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Fel vid hämtning av \"%s\" från %s:" -#: gitk:3536 +#: gitk:3631 msgid "command failed:" msgstr "kommando misslyckades:" -#: gitk:3685 +#: gitk:3780 msgid "No such commit" msgstr "Incheckning saknas" -#: gitk:3699 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: kommando misslyckades:" -#: gitk:3730 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Kunde inte läsa sammanslagningshuvud: %s" -#: gitk:3738 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Fel vid läsning av index: %s" -#: gitk:3763 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Kunde inte starta git blame: %s" -#: gitk:3766 gitk:6591 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Söker" -#: gitk:3798 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Fel vid körning av git blame: %s" -#: gitk:3826 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Raden kommer från incheckningen %s, som inte finns i denna vy" -#: gitk:3840 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Externt diff-verktyg misslyckades:" -#: gitk:3958 +#: gitk:4053 msgid "Gitk view definition" msgstr "Definition av Gitk-vy" -#: gitk:3962 +#: gitk:4057 msgid "Remember this view" msgstr "Spara denna vy" -#: gitk:3963 +#: gitk:4058 msgid "References (space separated list):" msgstr "Referenser (blankstegsavdelad lista):" -#: gitk:3964 +#: gitk:4059 msgid "Branches & tags:" msgstr "Grenar & taggar:" -#: gitk:3965 +#: gitk:4060 msgid "All refs" msgstr "Alla referenser" -#: gitk:3966 +#: gitk:4061 msgid "All (local) branches" msgstr "Alla (lokala) grenar" -#: gitk:3967 +#: gitk:4062 msgid "All tags" msgstr "Alla taggar" -#: gitk:3968 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Alla fjärrspårande grenar" -#: gitk:3969 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Incheckningsinfo (reguljära uttryck):" -#: gitk:3970 +#: gitk:4065 msgid "Author:" msgstr "Författare:" -#: gitk:3971 +#: gitk:4066 msgid "Committer:" msgstr "Incheckare:" -#: gitk:3972 +#: gitk:4067 msgid "Commit Message:" msgstr "Incheckningsmeddelande:" -#: gitk:3973 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Motsvarar alla kriterier för incheckningsinfo" -#: gitk:3974 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Motsvarar alla kriterier för incheckningsinfo" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Ändringar av filer:" -#: gitk:3975 +#: gitk:4071 msgid "Fixed String" msgstr "Fast sträng" -#: gitk:3976 +#: gitk:4072 msgid "Regular Expression" msgstr "Reguljärt uttryck" -#: gitk:3977 +#: gitk:4073 msgid "Search string:" msgstr "Söksträng:" -#: gitk:3978 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -678,201 +681,201 @@ msgstr "" "Incheckingsdatum (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -#: gitk:3979 +#: gitk:4075 msgid "Since:" msgstr "Från:" -#: gitk:3980 +#: gitk:4076 msgid "Until:" msgstr "Till:" -#: gitk:3981 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Begränsa och/eller hoppa över ett antal revisioner (positivt heltal):" -#: gitk:3982 +#: gitk:4078 msgid "Number to show:" msgstr "Antal att visa:" -#: gitk:3983 +#: gitk:4079 msgid "Number to skip:" msgstr "Antal att hoppa över:" -#: gitk:3984 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Diverse alternativ:" -#: gitk:3985 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Strikt datumsortering" -#: gitk:3986 +#: gitk:4082 msgid "Mark branch sides" msgstr "Markera sidogrenar" -#: gitk:3987 +#: gitk:4083 msgid "Limit to first parent" msgstr "Begränsa till första förälder" -#: gitk:3988 +#: gitk:4084 msgid "Simple history" msgstr "Enkel historik" -#: gitk:3989 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Ytterligare argument till git log:" -#: gitk:3990 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Ange filer och kataloger att ta med, en per rad:" -#: gitk:3991 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Kommando för att generera fler incheckningar att ta med:" -#: gitk:4115 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: redigera vy" -#: gitk:4123 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr " - kriterier för val av revisioner" -#: gitk:4128 +#: gitk:4224 msgid "View Name" msgstr "Namn på vy" -#: gitk:4203 +#: gitk:4299 msgid "Apply (F5)" msgstr "Använd (F5)" -#: gitk:4241 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Fel i argument för val av incheckningar:" -#: gitk:4294 gitk:4346 gitk:4807 gitk:4821 gitk:6087 gitk:12041 gitk:12042 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Inget" -#: gitk:4904 gitk:4909 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Avkomling" -#: gitk:4905 +#: gitk:5004 msgid "Not descendant" msgstr "Inte avkomling" -#: gitk:4912 gitk:4917 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Förfader" -#: gitk:4913 +#: gitk:5012 msgid "Not ancestor" msgstr "Inte förfader" -#: gitk:5203 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "Lokala ändringar sparade i indexet men inte incheckade" -#: gitk:5239 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Lokala ändringar, ej sparade i indexet" -#: gitk:6971 +#: gitk:7115 msgid "and many more" msgstr "med många flera" -#: gitk:6974 +#: gitk:7118 msgid "many" msgstr "många" -#: gitk:7160 +#: gitk:7309 msgid "Tags:" msgstr "Taggar:" -#: gitk:7177 gitk:7183 gitk:8593 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Förälder" -#: gitk:7188 +#: gitk:7337 msgid "Child" msgstr "Barn" -#: gitk:7197 +#: gitk:7346 msgid "Branch" msgstr "Gren" -#: gitk:7200 +#: gitk:7349 msgid "Follows" msgstr "Följer" -#: gitk:7203 +#: gitk:7352 msgid "Precedes" msgstr "Föregår" -#: gitk:7742 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Fel vid hämtning av diff: %s" -#: gitk:8418 +#: gitk:8631 msgid "Goto:" msgstr "Gå till:" -#: gitk:8439 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Förkortat SHA1-id %s är tvetydigt" -#: gitk:8446 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "Revisionen %s är inte känd" -#: gitk:8456 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "SHA-id:t %s är inte känt" -#: gitk:8458 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "Revisionen %s finns inte i den nuvarande vyn" -#: gitk:8600 gitk:8615 +#: gitk:8813 gitk:8828 msgid "Date" msgstr "Datum" -#: gitk:8603 +#: gitk:8816 msgid "Children" msgstr "Barn" -#: gitk:8666 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Återställ grenen %s hit" -#: gitk:8668 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Frånkopplad head: kan inte återställa" -#: gitk:8773 gitk:8779 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Hoppar över sammanslagningsincheckning " -#: gitk:8788 gitk:8793 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Fel vid hämtning av patch-id för " -#: gitk:8789 gitk:8794 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - stannar\n" -#: gitk:8799 gitk:8802 gitk:8810 gitk:8824 gitk:8833 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Incheckning " -#: gitk:8803 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -880,7 +883,7 @@ msgstr "" " är samma patch som\n" " " -#: gitk:8811 +#: gitk:9024 msgid "" " differs from\n" " " @@ -888,7 +891,7 @@ msgstr "" " skiljer sig från\n" " " -#: gitk:8813 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -896,131 +899,131 @@ msgstr "" "Skillnad mellan incheckningar:\n" "\n" -#: gitk:8825 gitk:8834 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " har %s barn - stannar\n" -#: gitk:8853 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Fel vid skrivning av incheckning till fil: %s" -#: gitk:8859 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "Fel vid jämförelse av incheckningar: %s" -#: gitk:8905 +#: gitk:9118 msgid "Top" msgstr "Topp" -#: gitk:8906 +#: gitk:9119 msgid "From" msgstr "Från" -#: gitk:8911 +#: gitk:9124 msgid "To" msgstr "Till" -#: gitk:8935 +#: gitk:9148 msgid "Generate patch" msgstr "Generera patch" -#: gitk:8937 +#: gitk:9150 msgid "From:" msgstr "Från:" -#: gitk:8946 +#: gitk:9159 msgid "To:" msgstr "Till:" -#: gitk:8955 +#: gitk:9168 msgid "Reverse" msgstr "Vänd" -#: gitk:8957 gitk:9153 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Utdatafil:" -#: gitk:8963 +#: gitk:9176 msgid "Generate" msgstr "Generera" -#: gitk:9001 +#: gitk:9214 msgid "Error creating patch:" msgstr "Fel vid generering av patch:" -#: gitk:9024 gitk:9141 gitk:9198 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "Id:" -#: gitk:9033 +#: gitk:9246 msgid "Tag name:" msgstr "Taggnamn:" -#: gitk:9036 +#: gitk:9249 msgid "Tag message is optional" msgstr "Taggmeddelandet är valfritt" -#: gitk:9038 +#: gitk:9251 msgid "Tag message:" msgstr "Taggmeddelande:" -#: gitk:9042 gitk:9207 +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Skapa" -#: gitk:9060 +#: gitk:9273 msgid "No tag name specified" msgstr "Inget taggnamn angavs" -#: gitk:9064 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Taggen \"%s\" finns redan" -#: gitk:9074 +#: gitk:9287 msgid "Error creating tag:" msgstr "Fel vid skapande av tagg:" -#: gitk:9150 +#: gitk:9363 msgid "Command:" msgstr "Kommando:" -#: gitk:9158 +#: gitk:9371 msgid "Write" msgstr "Skriv" -#: gitk:9176 +#: gitk:9389 msgid "Error writing commit:" msgstr "Fel vid skrivning av incheckning:" -#: gitk:9203 +#: gitk:9416 msgid "Name:" msgstr "Namn:" -#: gitk:9226 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Ange ett namn för den nya grenen" -#: gitk:9231 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "Grenen \"%s\" finns redan. Skriva över?" -#: gitk:9298 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" "Incheckningen %s finns redan på grenen %s -- skall den verkligen appliceras " "på nytt?" -#: gitk:9303 +#: gitk:9516 msgid "Cherry-picking" msgstr "Plockar" -#: gitk:9312 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -1030,7 +1033,7 @@ msgstr "" "Checka in, återställ eller spara undan (stash) dina ändringar och försök " "igen." -#: gitk:9318 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1038,20 +1041,20 @@ msgstr "" "Cherry-pick misslyckades på grund av en sammanslagningskonflikt.\n" "Vill du köra git citool för att lösa den?" -#: gitk:9334 gitk:9392 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Inga ändringar incheckade" -#: gitk:9361 +#: gitk:9574 #, tcl-format msgid "Commit %s is not included in branch %s -- really revert it?" msgstr "Incheckningen %s finns inte på grenen %s -- vill du verkligen ångra?" -#: gitk:9366 +#: gitk:9579 msgid "Reverting" msgstr "Ångrar" -#: gitk:9374 +#: gitk:9587 #, tcl-format msgid "" "Revert failed because of local changes to the following files:%s Please " @@ -1061,7 +1064,7 @@ msgstr "" "Checka in, återställ eller spara undan (stash) dina ändringar och försök " "igen." -#: gitk:9378 +#: gitk:9591 msgid "" "Revert failed because of merge conflict.\n" " Do you wish to run git citool to resolve it?" @@ -1069,28 +1072,28 @@ msgstr "" "Misslyckades med att ångra på grund av en sammanslagningskonflikt.\n" " Vill du köra git citool för att lösa den?" -#: gitk:9421 +#: gitk:9634 msgid "Confirm reset" msgstr "Bekräfta återställning" -#: gitk:9423 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Återställa grenen %s till %s?" -#: gitk:9425 +#: gitk:9638 msgid "Reset type:" msgstr "Typ av återställning:" -#: gitk:9428 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Mjuk: Rör inte utcheckning och index" -#: gitk:9431 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Blandad: Rör inte utcheckning, återställ index" -#: gitk:9434 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1098,19 +1101,19 @@ msgstr "" "Hård: Återställ utcheckning och index\n" "(förkastar ALLA lokala ändringar)" -#: gitk:9451 +#: gitk:9664 msgid "Resetting" msgstr "Återställer" -#: gitk:9511 +#: gitk:9724 msgid "Checking out" msgstr "Checkar ut" -#: gitk:9564 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Kan inte ta bort den just nu utcheckade grenen" -#: gitk:9570 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1119,16 +1122,16 @@ msgstr "" "Incheckningarna på grenen %s existerar inte på någon annan gren.\n" "Vill du verkligen ta bort grenen %s?" -#: gitk:9601 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Taggar och huvuden: %s" -#: gitk:9616 +#: gitk:9829 msgid "Filter" msgstr "Filter" -#: gitk:9912 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1136,217 +1139,223 @@ msgstr "" "Fel vid läsning av information om incheckningstopologi; information om " "grenar och föregående/senare taggar kommer inte vara komplett." -#: gitk:10899 +#: gitk:11102 msgid "Tag" msgstr "Tagg" -#: gitk:10899 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:10948 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Teckensnittsväljare för Gitk" -#: gitk:10965 +#: gitk:11206 msgid "B" msgstr "F" -#: gitk:10968 +#: gitk:11209 msgid "I" msgstr "K" -#: gitk:11086 +#: gitk:11327 msgid "Commit list display options" msgstr "Alternativ för incheckningslistvy" -#: gitk:11089 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Maximal grafbredd (rader)" -#: gitk:11092 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Maximal grafbredd (% av ruta)" -#: gitk:11095 +#: gitk:11337 msgid "Show local changes" msgstr "Visa lokala ändringar" -#: gitk:11098 +#: gitk:11340 msgid "Auto-select SHA1 (length)" msgstr "Välj SHA1 (längd) automatiskt" -#: gitk:11102 +#: gitk:11344 msgid "Hide remote refs" msgstr "Dölj fjärr-referenser" -#: gitk:11106 +#: gitk:11348 msgid "Diff display options" msgstr "Alternativ för diffvy" -#: gitk:11108 +#: gitk:11350 msgid "Tab spacing" msgstr "Blanksteg för tabulatortecken" -#: gitk:11111 +#: gitk:11353 msgid "Display nearby tags/heads" msgstr "Visa närliggande taggar/huvuden" -#: gitk:11114 +#: gitk:11356 msgid "Maximum # tags/heads to show" msgstr "Maximalt antal taggar/huvuden att visa" -#: gitk:11117 +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Begränsa diff till listade sökvägar" -#: gitk:11120 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Stöd för filspecifika teckenkodningar" -#: gitk:11126 gitk:11273 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Externt diff-verktyg" -#: gitk:11127 +#: gitk:11369 msgid "Choose..." msgstr "Välj..." -#: gitk:11132 +#: gitk:11374 msgid "General options" msgstr "Allmänna inställningar" -#: gitk:11135 +#: gitk:11377 msgid "Use themed widgets" msgstr "Använd tema på fönsterelement" -#: gitk:11137 +#: gitk:11379 msgid "(change requires restart)" msgstr "(ändringen kräver omstart)" -#: gitk:11139 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(för närvarande inte tillgängligt)" -#: gitk:11150 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Färger: tryck för att välja" -#: gitk:11153 +#: gitk:11395 msgid "Interface" msgstr "Gränssnitt" -#: gitk:11154 +#: gitk:11396 msgid "interface" msgstr "gränssnitt" -#: gitk:11157 +#: gitk:11399 msgid "Background" msgstr "Bakgrund" -#: gitk:11158 gitk:11188 +#: gitk:11400 gitk:11430 msgid "background" msgstr "bakgrund" -#: gitk:11161 +#: gitk:11403 msgid "Foreground" msgstr "Förgrund" -#: gitk:11162 +#: gitk:11404 msgid "foreground" msgstr "förgrund" -#: gitk:11165 +#: gitk:11407 msgid "Diff: old lines" msgstr "Diff: gamla rader" -#: gitk:11166 +#: gitk:11408 msgid "diff old lines" msgstr "diff gamla rader" -#: gitk:11170 +#: gitk:11412 msgid "Diff: new lines" msgstr "Diff: nya rader" -#: gitk:11171 +#: gitk:11413 msgid "diff new lines" msgstr "diff nya rader" -#: gitk:11175 +#: gitk:11417 msgid "Diff: hunk header" msgstr "Diff: delhuvud" -#: gitk:11177 +#: gitk:11419 msgid "diff hunk header" msgstr "diff delhuvud" -#: gitk:11181 +#: gitk:11423 msgid "Marked line bg" msgstr "Markerad rad bakgrund" -#: gitk:11183 +#: gitk:11425 msgid "marked line background" msgstr "markerad rad bakgrund" -#: gitk:11187 +#: gitk:11429 msgid "Select bg" msgstr "Markerad bakgrund" -#: gitk:11196 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Teckensnitt: tryck för att välja" -#: gitk:11198 +#: gitk:11440 msgid "Main font" msgstr "Huvudteckensnitt" -#: gitk:11199 +#: gitk:11441 msgid "Diff display font" msgstr "Teckensnitt för diffvisning" -#: gitk:11200 +#: gitk:11442 msgid "User interface font" msgstr "Teckensnitt för användargränssnitt" -#: gitk:11222 +#: gitk:11464 msgid "Gitk preferences" msgstr "Inställningar för Gitk" -#: gitk:11231 +#: gitk:11473 msgid "General" msgstr "Allmänt" -#: gitk:11232 +#: gitk:11474 msgid "Colors" msgstr "Färger" -#: gitk:11233 +#: gitk:11475 msgid "Fonts" msgstr "Teckensnitt" -#: gitk:11283 +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: välj färg för %s" -#: gitk:11937 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Hittar inget git-arkiv här." -#: gitk:11984 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Tvetydigt argument \"%s\": både revision och filnamn" -#: gitk:11996 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Felaktiga argument till gitk:" -#: gitk:12099 +#: gitk:12405 msgid "Command line" msgstr "Kommandorad" +#~ msgid "next" +#~ msgstr "nästa" + +#~ msgid "prev" +#~ msgstr "föreg" + #~ msgid "CDate" #~ msgstr "Skapat datum" diff --git a/gitk-git/po/vi.po b/gitk-git/po/vi.po index 4dfe125a69..ade9cb70cb 100644 --- a/gitk-git/po/vi.po +++ b/gitk-git/po/vi.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: gitk @@GIT_VERSION@@\n" -"Report-Msgid-Bugs-To: Paul Mackerras <paulus@samba.org>\n" -"POT-Creation-Date: 2013-12-14 09:24+0700\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-03-15 14:37+1100\n" "PO-Revision-Date: 2013-12-14 14:40+0700\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" @@ -21,28 +21,28 @@ msgstr "" msgid "Couldn't get list of unmerged files:" msgstr "Không thể lấy danh sách các tập-tin chưa được hòa trộn:" -#: gitk:212 gitk:2353 +#: gitk:212 gitk:2381 msgid "Color words" msgstr "Tô màu chữ" -#: gitk:217 gitk:2353 gitk:8103 gitk:8136 +#: gitk:217 gitk:2381 gitk:8201 gitk:8234 msgid "Markup words" msgstr "Đánh dấu chữ" -#: gitk:322 +#: gitk:324 msgid "Error parsing revisions:" msgstr "Gặp lỗi khi phân tích điểm xét duyệt:" -#: gitk:378 +#: gitk:380 msgid "Error executing --argscmd command:" msgstr "Gặp lỗi khi thực hiện lệnh --argscmd:" -#: gitk:391 +#: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Chưa chọn tập tin: --merge đã chỉ định nhưng không có tập tin chưa hòa trộn." -#: gitk:394 +#: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -50,319 +50,312 @@ msgstr "" "Chưa chọn tập tin: --merge đã chỉ định nhưng không có tập tin chưa hòa trộn " "trong giới hạn tập tin." -#: gitk:416 gitk:564 +#: gitk:418 gitk:566 msgid "Error executing git log:" msgstr "Gặp lỗi khi thực hiện lệnh git log:" -#: gitk:434 gitk:580 +#: gitk:436 gitk:582 msgid "Reading" msgstr "Đang đọc" -#: gitk:494 gitk:4429 +#: gitk:496 gitk:4508 msgid "Reading commits..." msgstr "Đang đọc các lần chuyển giao..." -#: gitk:497 gitk:1635 gitk:4432 +#: gitk:499 gitk:1637 gitk:4511 msgid "No commits selected" msgstr "Chưa chọn các lần chuyển giao" -#: gitk:1509 +#: gitk:1511 msgid "Can't parse git log output:" msgstr "Không thể phân tích kết xuất từ lệnh git log:" -#: gitk:1738 +#: gitk:1740 msgid "No commit information available" msgstr "Không có thông tin về lần chuyển giao nào" -#: gitk:1895 +#: gitk:1897 msgid "mc" msgstr "mc" -#: gitk:1930 gitk:4222 gitk:9552 gitk:11122 gitk:11401 +#: gitk:1932 gitk:4298 gitk:9650 gitk:11220 gitk:11500 msgid "OK" msgstr "Đồng ý" -#: gitk:1932 gitk:4224 gitk:9079 gitk:9158 gitk:9274 gitk:9323 gitk:9554 -#: gitk:11123 gitk:11402 +#: gitk:1934 gitk:4300 gitk:9177 gitk:9256 gitk:9372 gitk:9421 gitk:9652 +#: gitk:11221 gitk:11501 msgid "Cancel" msgstr "Thôi" -#: gitk:2067 +#: gitk:2069 msgid "Update" msgstr "Cập nhật" -#: gitk:2068 +#: gitk:2070 msgid "Reload" msgstr "Tải lại" -#: gitk:2069 +#: gitk:2071 msgid "Reread references" msgstr "Đọc lại tham chiếu" -#: gitk:2070 +#: gitk:2072 msgid "List references" msgstr "Liệt kê các tham chiếu" -#: gitk:2072 +#: gitk:2074 msgid "Start git gui" msgstr "Khởi chạy git gui" -#: gitk:2074 +#: gitk:2076 msgid "Quit" msgstr "Thoát" -#: gitk:2066 +#: gitk:2068 msgid "File" msgstr "Chính" -#: gitk:2078 +#: gitk:2080 msgid "Preferences" msgstr "Cá nhân hóa" -#: gitk:2077 +#: gitk:2079 msgid "Edit" msgstr "Chỉnh sửa" -#: gitk:2082 +#: gitk:2084 msgid "New view..." msgstr "Thêm trình bày mới..." -#: gitk:2083 +#: gitk:2085 msgid "Edit view..." msgstr "Sửa cách trình bày..." -#: gitk:2084 +#: gitk:2086 msgid "Delete view" msgstr "Xóa cách trình bày" -#: gitk:2086 +#: gitk:2088 msgid "All files" msgstr "Mọi tập tin" -#: gitk:2081 gitk:3975 +#: gitk:2083 gitk:4050 msgid "View" msgstr "Trình bày" -#: gitk:2091 gitk:2101 gitk:2945 +#: gitk:2093 gitk:2103 gitk:3009 msgid "About gitk" msgstr "Giới thiệu về gitk" -#: gitk:2092 gitk:2106 +#: gitk:2094 gitk:2108 msgid "Key bindings" msgstr "Tổ hợp phím" -#: gitk:2090 gitk:2105 +#: gitk:2092 gitk:2107 msgid "Help" msgstr "Trợ giúp" -#: gitk:2183 gitk:8535 +#: gitk:2185 gitk:8633 msgid "SHA1 ID:" msgstr "SHA1 ID:" -#: gitk:2227 +#: gitk:2229 msgid "Row" msgstr "Hàng" -#: gitk:2265 +#: gitk:2267 msgid "Find" msgstr "Tìm" -#: gitk:2266 -msgid "next" -msgstr "tiếp" - -#: gitk:2267 -msgid "prev" -msgstr "trước" - -#: gitk:2268 +#: gitk:2295 msgid "commit" msgstr "lần chuyển giao" -#: gitk:2271 gitk:2273 gitk:4590 gitk:4613 gitk:4637 gitk:6653 gitk:6725 -#: gitk:6810 +#: gitk:2299 gitk:2301 gitk:4669 gitk:4692 gitk:4716 gitk:6736 gitk:6808 +#: gitk:6893 msgid "containing:" msgstr "có chứa:" -#: gitk:2274 gitk:3457 gitk:3462 gitk:4666 +#: gitk:2302 gitk:3522 gitk:3527 gitk:4745 msgid "touching paths:" msgstr "đang chạm đường dẫn:" -#: gitk:2275 gitk:4680 +#: gitk:2303 gitk:4759 msgid "adding/removing string:" msgstr "thêm/gỡ bỏ chuỗi:" -#: gitk:2276 gitk:4682 +#: gitk:2304 gitk:4761 msgid "changing lines matching:" msgstr "những dòng thay đổi khớp mẫu:" -#: gitk:2285 gitk:2287 gitk:4669 +#: gitk:2313 gitk:2315 gitk:4748 msgid "Exact" msgstr "Chính xác" -#: gitk:2287 gitk:4757 gitk:6621 +#: gitk:2315 gitk:4836 gitk:6704 msgid "IgnCase" msgstr "BquaHt" -#: gitk:2287 gitk:4639 gitk:4755 gitk:6617 +#: gitk:2315 gitk:4718 gitk:4834 gitk:6700 msgid "Regexp" msgstr "BTCQ" -#: gitk:2289 gitk:2290 gitk:4777 gitk:4807 gitk:4814 gitk:6746 gitk:6814 +#: gitk:2317 gitk:2318 gitk:4856 gitk:4886 gitk:4893 gitk:6829 gitk:6897 msgid "All fields" msgstr "Mọi trường" -#: gitk:2290 gitk:4774 gitk:4807 gitk:6684 +#: gitk:2318 gitk:4853 gitk:4886 gitk:6767 msgid "Headline" msgstr "Nội dung chính" -#: gitk:2291 gitk:4774 gitk:6684 gitk:6814 gitk:7283 +#: gitk:2319 gitk:4853 gitk:6767 gitk:6897 gitk:7370 msgid "Comments" msgstr "Ghi chú" -#: gitk:2291 gitk:4774 gitk:4779 gitk:4814 gitk:6684 gitk:7218 gitk:8713 -#: gitk:8728 +#: gitk:2319 gitk:4853 gitk:4858 gitk:4893 gitk:6767 gitk:7305 gitk:8811 +#: gitk:8826 msgid "Author" msgstr "Tác giả" -#: gitk:2291 gitk:4774 gitk:6684 gitk:7220 +#: gitk:2319 gitk:4853 gitk:6767 gitk:7307 msgid "Committer" msgstr "Người chuyển giao" -#: gitk:2322 +#: gitk:2350 msgid "Search" msgstr "Tìm kiếm" -#: gitk:2330 +#: gitk:2358 msgid "Diff" msgstr "So sánh" -#: gitk:2332 +#: gitk:2360 msgid "Old version" msgstr "Phiên bản cũ" -#: gitk:2334 +#: gitk:2362 msgid "New version" msgstr "Phiên bản mới" -#: gitk:2336 +#: gitk:2364 msgid "Lines of context" msgstr "Các dòng của nội dung" -#: gitk:2346 +#: gitk:2374 msgid "Ignore space change" msgstr "Không xét đến thay đổi do khoảng trắng" -#: gitk:2350 gitk:2352 gitk:7842 gitk:8089 +#: gitk:2378 gitk:2380 gitk:7940 gitk:8187 msgid "Line diff" msgstr "Khác biệt theo dòng" -#: gitk:2417 +#: gitk:2445 msgid "Patch" msgstr "Vá" -#: gitk:2419 +#: gitk:2447 msgid "Tree" msgstr "Cây" -#: gitk:2577 gitk:2597 +#: gitk:2616 gitk:2636 msgid "Diff this -> selected" msgstr "So sánh cái này -> cái đã chọn" -#: gitk:2578 gitk:2598 +#: gitk:2617 gitk:2637 msgid "Diff selected -> this" msgstr "So sánh cái đã chọn -> cái này" -#: gitk:2579 gitk:2599 +#: gitk:2618 gitk:2638 msgid "Make patch" msgstr "Tạo miếng vá" -#: gitk:2580 gitk:9137 +#: gitk:2619 gitk:9235 msgid "Create tag" msgstr "Tạo thẻ" -#: gitk:2581 gitk:9254 +#: gitk:2620 gitk:9352 msgid "Write commit to file" msgstr "Ghi lần chuyển giao ra tập tin" -#: gitk:2582 gitk:9311 +#: gitk:2621 gitk:9409 msgid "Create new branch" msgstr "Tạo nhánh mới" -#: gitk:2583 +#: gitk:2622 msgid "Cherry-pick this commit" msgstr "Cherry-pick lần chuyển giao này" -#: gitk:2584 +#: gitk:2623 msgid "Reset HEAD branch to here" msgstr "Đặt lại HEAD của nhánh vào đây" -#: gitk:2585 +#: gitk:2624 msgid "Mark this commit" msgstr "Đánh dấu lần chuyển giao này" -#: gitk:2586 +#: gitk:2625 msgid "Return to mark" msgstr "Quay lại vị trí dấu" -#: gitk:2587 +#: gitk:2626 msgid "Find descendant of this and mark" msgstr "Tìm con cháu của cái này và cái đã đánh dấu" -#: gitk:2588 +#: gitk:2627 msgid "Compare with marked commit" msgstr "So sánh với lần chuyển giao đã đánh dấu" -#: gitk:2589 gitk:2600 +#: gitk:2628 gitk:2639 msgid "Diff this -> marked commit" msgstr "So sánh cái này -> lần chuyển giao đã đánh dấu" -#: gitk:2590 gitk:2601 +#: gitk:2629 gitk:2640 msgid "Diff marked commit -> this" msgstr "So sánh lần chuyển giao đã đánh dấu -> cái này" -#: gitk:2591 +#: gitk:2630 msgid "Revert this commit" msgstr "Hoàn lại lần chuyển giao này" -#: gitk:2607 +#: gitk:2646 msgid "Check out this branch" msgstr "Checkout nhánh này" -#: gitk:2608 +#: gitk:2647 msgid "Remove this branch" msgstr "Gỡ bỏ nhánh này" -#: gitk:2615 +#: gitk:2654 msgid "Highlight this too" msgstr "Cũng tô sáng nó" -#: gitk:2616 +#: gitk:2655 msgid "Highlight this only" msgstr "Chỉ tô sáng cái này" -#: gitk:2617 +#: gitk:2656 msgid "External diff" msgstr "diff từ bên ngoài" -#: gitk:2618 +#: gitk:2657 msgid "Blame parent commit" msgstr "Xem công trạng lần chuyển giao cha mẹ" -#: gitk:2625 +#: gitk:2664 msgid "Show origin of this line" msgstr "Hiển thị nguyên gốc của dòng này" -#: gitk:2626 +#: gitk:2665 msgid "Run git gui blame on this line" msgstr "Chạy lệnh git gui blame cho dòng này" -#: gitk:2947 +#: gitk:3011 +#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright © 2005-2011 Paul Mackerras\n" +"Copyright © 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" msgstr "" @@ -373,304 +366,314 @@ msgstr "" "\n" "Dùng và phân phối lại phần mềm này theo các điều khoản của Giấy Phép Công GNU" -#: gitk:2955 gitk:3020 gitk:9738 +#: gitk:3019 gitk:3085 gitk:9836 msgid "Close" msgstr "Đóng" -#: gitk:2976 +#: gitk:3040 msgid "Gitk key bindings" msgstr "Tổ hợp phím gitk" -#: gitk:2979 +#: gitk:3043 msgid "Gitk key bindings:" msgstr "Tổ hợp phím gitk:" -#: gitk:2981 +#: gitk:3045 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tThoát" -#: gitk:2982 +#: gitk:3046 #, tcl-format msgid "<%s-W>\t\tClose window" msgstr "<%s-W>\t\tĐóng cửa sổ" -#: gitk:2983 +#: gitk:3047 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tChuyển đến lần chuyển giao đầu tiên" -#: gitk:2984 +#: gitk:3048 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tChuyển đến lần chuyển giao cuối" -#: gitk:2985 +#: gitk:3049 msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, k\tDi chuyển lên một lần chuyển giao" -#: gitk:2986 +#: gitk:3050 msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, j\tDi chuyển xuống một lần chuyển giao" -#: gitk:2987 +#: gitk:3051 msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, h\tQuay trở lại danh sách lịch sử" -#: gitk:2988 +#: gitk:3052 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\tDi chuyển tiếp trong danh sách lịch sử" -#: gitk:2989 +#: gitk:3053 +#, tcl-format +msgid "<%s-n>\tGo to n-th parent of current commit in history list" +msgstr "" + +#: gitk:3054 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tDi chuyển lên một trang trong danh sách lần chuyển giao" -#: gitk:2990 +#: gitk:3055 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tDi chuyển xuống một trang trong danh sách lần chuyển giao" -#: gitk:2991 +#: gitk:3056 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tCuộn lên trên cùng của danh sách lần chuyển giao" -#: gitk:2992 +#: gitk:3057 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tCuộn xuống dưới cùng của danh sách lần chuyển giao" -#: gitk:2993 +#: gitk:3058 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tCuộn danh sách lần chuyển giao lên một dòng" -#: gitk:2994 +#: gitk:3059 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tCuộn danh sách lần chuyển giao xuống một dòng" -#: gitk:2995 +#: gitk:3060 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tCuộn danh sách lần chuyển giao lên một trang" -#: gitk:2996 +#: gitk:3061 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tCuộn danh sách lần chuyển giao xuống một trang" -#: gitk:2997 +#: gitk:3062 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Up>\tTìm về phía sau (hướng lên trên, lần chuyển giao sau này)" -#: gitk:2998 +#: gitk:3063 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "" "<Shift-Down>\tTìm về phía trước (hướng xuống dưới, lần chuyển giao trước đây)" -#: gitk:2999 +#: gitk:3064 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tCuộn phần trình bày diff lên một trang" -#: gitk:3000 +#: gitk:3065 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tCuộn phần trình bày diff lên một trang" -#: gitk:3001 +#: gitk:3066 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Space>\t\tCuộn phần trình bày diff xuống một trang" -#: gitk:3002 +#: gitk:3067 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tCuộn phần trình bày diff lên 18 dòng" -#: gitk:3003 +#: gitk:3068 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tCuộn phần trình bày diff xuống 18 dòng" -#: gitk:3004 +#: gitk:3069 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tTìm kiếm" -#: gitk:3005 +#: gitk:3070 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tDi chuyển đến chỗ gặp kế tiếp" -#: gitk:3006 +#: gitk:3071 msgid "<Return>\tMove to next find hit" msgstr "<Return>\t\tDi chuyển đến chỗ gặp kế tiếp" -#: gitk:3007 +#: gitk:3072 msgid "/\t\tFocus the search box" msgstr "/\t\tĐưa con trỏ chuột vào ô tìm kiếm" -#: gitk:3008 +#: gitk:3073 msgid "?\t\tMove to previous find hit" msgstr "?\t\tDi chuyển đến chỗ gặp kế trước" -#: gitk:3009 +#: gitk:3074 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tCuộn phần trình bày diff sang tập-tin kế" -#: gitk:3010 +#: gitk:3075 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tTìm đến chỗ khác biệt kế tiếp" -#: gitk:3011 +#: gitk:3076 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tTìm đến chỗ khác biệt kế trước" -#: gitk:3012 +#: gitk:3077 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tTăng cỡ chữ" -#: gitk:3013 +#: gitk:3078 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tTăng cỡ chữ" -#: gitk:3014 +#: gitk:3079 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tGiảm cỡ chữ" -#: gitk:3015 +#: gitk:3080 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tGiảm cỡ chữ" -#: gitk:3016 +#: gitk:3081 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tCập nhật" -#: gitk:3471 gitk:3480 +#: gitk:3546 gitk:3555 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Gặp lỗi khi tạo thư mục tạm %s:" -#: gitk:3493 +#: gitk:3568 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Lỗi chào hỏi \"%s\" từ %s:" -#: gitk:3556 +#: gitk:3631 msgid "command failed:" msgstr "lệnh gặp lỗi:" -#: gitk:3705 +#: gitk:3780 msgid "No such commit" msgstr "Không có lần chuyển giao như vậy" -#: gitk:3719 +#: gitk:3794 msgid "git gui blame: command failed:" msgstr "git gui blame: lệnh gặp lỗi:" -#: gitk:3750 +#: gitk:3825 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Không thể độc đầu của hòa trộn: %s" # tcl-format -#: gitk:3758 +#: gitk:3833 #, tcl-format msgid "Error reading index: %s" msgstr "Gặp lỗi khi đọc chỉ mục: %s" -#: gitk:3783 +#: gitk:3858 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Không thể khởi chạy git blame: %s" -#: gitk:3786 gitk:6652 +#: gitk:3861 gitk:6735 msgid "Searching" msgstr "Đang tìm kiếm" -#: gitk:3818 +#: gitk:3893 #, tcl-format msgid "Error running git blame: %s" msgstr "Gặp lỗi khi chạy git blame: %s" -#: gitk:3846 +#: gitk:3921 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Dòng đến từ lần chuyển giao %s, cái mà không trong trình bày này" -#: gitk:3860 +#: gitk:3935 msgid "External diff viewer failed:" msgstr "Bộ trình bày diff từ bên ngoài gặp lỗi:" -#: gitk:3978 +#: gitk:4053 msgid "Gitk view definition" msgstr "Định nghĩa cách trình bày gitk" -#: gitk:3982 +#: gitk:4057 msgid "Remember this view" msgstr "Nhớ cách trình bày này" -#: gitk:3983 +#: gitk:4058 msgid "References (space separated list):" msgstr "Tham chiếu (danh sách ngăn cách bằng dấu cách):" -#: gitk:3984 +#: gitk:4059 msgid "Branches & tags:" msgstr "Nhánh & thẻ:" -#: gitk:3985 +#: gitk:4060 msgid "All refs" msgstr "Mọi tham chiếu" -#: gitk:3986 +#: gitk:4061 msgid "All (local) branches" msgstr "Mọi nhánh (nội bộ)" -#: gitk:3987 +#: gitk:4062 msgid "All tags" msgstr "Mọi thẻ" -#: gitk:3988 +#: gitk:4063 msgid "All remote-tracking branches" msgstr "Mọi nhánh remote-tracking" -#: gitk:3989 +#: gitk:4064 msgid "Commit Info (regular expressions):" msgstr "Thông tin chuyển giao (biểu thức chính quy):" -#: gitk:3990 +#: gitk:4065 msgid "Author:" msgstr "Tác giả:" -#: gitk:3991 +#: gitk:4066 msgid "Committer:" msgstr "Người chuyển giao:" -#: gitk:3992 +#: gitk:4067 msgid "Commit Message:" msgstr "Chú thích của lần chuyển giao:" -#: gitk:3993 +#: gitk:4068 msgid "Matches all Commit Info criteria" msgstr "Khớp mọi điều kiện Thông tin Chuyển giao" -#: gitk:3994 +#: gitk:4069 +#, fuzzy +msgid "Matches none Commit Info criteria" +msgstr "Khớp mọi điều kiện Thông tin Chuyển giao" + +#: gitk:4070 msgid "Changes to Files:" msgstr "Đổi thành Tập tin:" -#: gitk:3995 +#: gitk:4071 msgid "Fixed String" msgstr "Chuỗi cố định" -#: gitk:3996 +#: gitk:4072 msgid "Regular Expression" msgstr "Biểu thức chính quy" -#: gitk:3997 +#: gitk:4073 msgid "Search string:" msgstr "Chuỗi tìm kiếm:" -#: gitk:3998 +#: gitk:4074 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -678,203 +681,203 @@ msgstr "" "Ngày chuyển giao (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -#: gitk:3999 +#: gitk:4075 msgid "Since:" msgstr "Kể từ:" -#: gitk:4000 +#: gitk:4076 msgid "Until:" msgstr "Đến:" -#: gitk:4001 +#: gitk:4077 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Giới hạn và/hoặc bỏ số của điểm xét (số nguyên âm):" -#: gitk:4002 +#: gitk:4078 msgid "Number to show:" msgstr "Số lượng hiển thị:" -#: gitk:4003 +#: gitk:4079 msgid "Number to skip:" msgstr "Số lượng sẽ bỏ qua:" -#: gitk:4004 +#: gitk:4080 msgid "Miscellaneous options:" msgstr "Tuỳ chọn hỗn hợp:" -#: gitk:4005 +#: gitk:4081 msgid "Strictly sort by date" msgstr "Sắp xếp chặt chẽ theo ngày" -#: gitk:4006 +#: gitk:4082 msgid "Mark branch sides" msgstr "Đánh dấu các cạnh nhánh" -#: gitk:4007 +#: gitk:4083 msgid "Limit to first parent" msgstr "Giới hạn thành cha mẹ đầu tiên" -#: gitk:4008 +#: gitk:4084 msgid "Simple history" msgstr "Lịch sử dạng đơn giản" -#: gitk:4009 +#: gitk:4085 msgid "Additional arguments to git log:" msgstr "Đối số bổ xung cho lệnh git log:" -#: gitk:4010 +#: gitk:4086 msgid "Enter files and directories to include, one per line:" msgstr "Nhập vào các tập tin và thư mục bao gồm, mỗi dòng một cái:" -#: gitk:4011 +#: gitk:4087 msgid "Command to generate more commits to include:" msgstr "Lệnh tạo ra nhiều lần chuyển giao hơn bao gồm:" -#: gitk:4135 +#: gitk:4211 msgid "Gitk: edit view" msgstr "Gitk: sửa cách trình bày" -#: gitk:4143 +#: gitk:4219 msgid "-- criteria for selecting revisions" msgstr "-- tiêu chuẩn chọn điểm xét duyệt" -#: gitk:4148 +#: gitk:4224 msgid "View Name" msgstr "Tên cách trình bày" -#: gitk:4223 +#: gitk:4299 msgid "Apply (F5)" msgstr "Áp dụng (F5)" -#: gitk:4261 +#: gitk:4337 msgid "Error in commit selection arguments:" msgstr "Lỗi trong các đối số chọn chuyển giao:" -#: gitk:4314 gitk:4366 gitk:4827 gitk:4841 gitk:6107 gitk:12184 gitk:12185 +#: gitk:4392 gitk:4445 gitk:4906 gitk:4920 gitk:6190 gitk:12346 gitk:12347 msgid "None" msgstr "Không" -#: gitk:4924 gitk:4929 +#: gitk:5003 gitk:5008 msgid "Descendant" msgstr "Con cháu" -#: gitk:4925 +#: gitk:5004 msgid "Not descendant" msgstr "Không có con cháu" -#: gitk:4932 gitk:4937 +#: gitk:5011 gitk:5016 msgid "Ancestor" msgstr "Tổ tiên chung" -#: gitk:4933 +#: gitk:5012 msgid "Not ancestor" msgstr "Không có chung tổ tiên" -#: gitk:5223 +#: gitk:5306 msgid "Local changes checked in to index but not committed" msgstr "" "Có thay đổi nội bộ đã được đưa vào bảng mục lục, nhưng chưa được chuyển giao" -#: gitk:5259 +#: gitk:5342 msgid "Local uncommitted changes, not checked in to index" msgstr "Có thay đổi nội bộ, nhưng chưa được đưa vào bảng mục lục" -#: gitk:7032 +#: gitk:7115 msgid "and many more" msgstr "và nhiều nữa" -#: gitk:7035 +#: gitk:7118 msgid "many" msgstr "nhiều" -#: gitk:7222 +#: gitk:7309 msgid "Tags:" msgstr "Thẻ:" -#: gitk:7239 gitk:7245 gitk:8708 +#: gitk:7326 gitk:7332 gitk:8806 msgid "Parent" msgstr "Cha" -#: gitk:7250 +#: gitk:7337 msgid "Child" msgstr "Con" -#: gitk:7259 +#: gitk:7346 msgid "Branch" msgstr "Nhánh" -#: gitk:7262 +#: gitk:7349 msgid "Follows" msgstr "Đứng sau" -#: gitk:7265 +#: gitk:7352 msgid "Precedes" msgstr "Đứng trước" # tcl-format -#: gitk:7849 +#: gitk:7947 #, tcl-format msgid "Error getting diffs: %s" msgstr "Lỗi lấy diff: %s" -#: gitk:8533 +#: gitk:8631 msgid "Goto:" msgstr "Nhảy tới:" -#: gitk:8554 +#: gitk:8652 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Định danh SHA1 dạng ngắn %s là chưa đủ rõ ràng" -#: gitk:8561 +#: gitk:8659 #, tcl-format msgid "Revision %s is not known" msgstr "Không hiểu điểm xét duyệt %s" -#: gitk:8571 +#: gitk:8669 #, tcl-format msgid "SHA1 id %s is not known" msgstr "Không hiểu định danh SHA1 %s" -#: gitk:8573 +#: gitk:8671 #, tcl-format msgid "Revision %s is not in the current view" msgstr "Điểm %s không ở trong phần hiển thị hiện tại" -#: gitk:8715 gitk:8730 +#: gitk:8813 gitk:8828 msgid "Date" msgstr "Ngày" -#: gitk:8718 +#: gitk:8816 msgid "Children" msgstr "Con cháu" -#: gitk:8781 +#: gitk:8879 #, tcl-format msgid "Reset %s branch to here" msgstr "Đặt lại nhánh %s tại đây" -#: gitk:8783 +#: gitk:8881 msgid "Detached head: can't reset" msgstr "Head đã bị tách rời: không thể đặt lại" -#: gitk:8888 gitk:8894 +#: gitk:8986 gitk:8992 msgid "Skipping merge commit " msgstr "Bỏ qua lần chuyển giao hòa trộn " -#: gitk:8903 gitk:8908 +#: gitk:9001 gitk:9006 msgid "Error getting patch ID for " msgstr "Gặp lỗi khi lấy ID miếng vá cho " -#: gitk:8904 gitk:8909 +#: gitk:9002 gitk:9007 msgid " - stopping\n" msgstr " - dừng\n" -#: gitk:8914 gitk:8917 gitk:8925 gitk:8939 gitk:8948 +#: gitk:9012 gitk:9015 gitk:9023 gitk:9037 gitk:9046 msgid "Commit " msgstr "Commit " -#: gitk:8918 +#: gitk:9016 msgid "" " is the same patch as\n" " " @@ -882,7 +885,7 @@ msgstr "" " là cùng một miếng vá với\n" " " -#: gitk:8926 +#: gitk:9024 msgid "" " differs from\n" " " @@ -890,7 +893,7 @@ msgstr "" " khác biệt từ\n" " " -#: gitk:8928 +#: gitk:9026 msgid "" "Diff of commits:\n" "\n" @@ -898,131 +901,131 @@ msgstr "" "Khác biệt của lần chuyển giao (commit):\n" "\n" -#: gitk:8940 gitk:8949 +#: gitk:9038 gitk:9047 #, tcl-format msgid " has %s children - stopping\n" msgstr " có %s con - dừng\n" -#: gitk:8968 +#: gitk:9066 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Gặp lỗi trong quá trình ghi lần chuyển giao vào tập tin: %s" -#: gitk:8974 +#: gitk:9072 #, tcl-format msgid "Error diffing commits: %s" msgstr "Gặp lỗi khi so sánh sự khác biệt giữa các lần chuyển giao: %s" -#: gitk:9020 +#: gitk:9118 msgid "Top" msgstr "Đỉnh" -#: gitk:9021 +#: gitk:9119 msgid "From" msgstr "Từ" -#: gitk:9026 +#: gitk:9124 msgid "To" msgstr "Đến" -#: gitk:9050 +#: gitk:9148 msgid "Generate patch" msgstr "Tạo miếng vá" -#: gitk:9052 +#: gitk:9150 msgid "From:" msgstr "Từ:" -#: gitk:9061 +#: gitk:9159 msgid "To:" msgstr "Đến:" -#: gitk:9070 +#: gitk:9168 msgid "Reverse" msgstr "Đảo ngược" -#: gitk:9072 gitk:9268 +#: gitk:9170 gitk:9366 msgid "Output file:" msgstr "Tập tin kết xuất:" -#: gitk:9078 +#: gitk:9176 msgid "Generate" msgstr "Tạo" -#: gitk:9116 +#: gitk:9214 msgid "Error creating patch:" msgstr "Gặp lỗi khi tạo miếng vá:" -#: gitk:9139 gitk:9256 gitk:9313 +#: gitk:9237 gitk:9354 gitk:9411 msgid "ID:" msgstr "ID:" -#: gitk:9148 +#: gitk:9246 msgid "Tag name:" msgstr "Tên thẻ:" -#: gitk:9151 +#: gitk:9249 msgid "Tag message is optional" msgstr "Ghi chú thẻ chỉ là tùy chọn" -#: gitk:9153 +#: gitk:9251 msgid "Tag message:" msgstr "Ghi chú cho thẻ:" -#: gitk:9157 gitk:9322 +#: gitk:9255 gitk:9420 msgid "Create" msgstr "Tạo" -#: gitk:9175 +#: gitk:9273 msgid "No tag name specified" msgstr "Chưa chỉ ra tên của thẻ" -#: gitk:9179 +#: gitk:9277 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Thẻ “%s” đã có sẵn rồi" -#: gitk:9189 +#: gitk:9287 msgid "Error creating tag:" msgstr "Gặp lỗi khi tạo thẻ:" -#: gitk:9265 +#: gitk:9363 msgid "Command:" msgstr "Lệnh:" -#: gitk:9273 +#: gitk:9371 msgid "Write" msgstr "Ghi" -#: gitk:9291 +#: gitk:9389 msgid "Error writing commit:" msgstr "Gặp lỗi trong quá trình ghi chuyển giao:" -#: gitk:9318 +#: gitk:9416 msgid "Name:" msgstr "Tên:" -#: gitk:9341 +#: gitk:9439 msgid "Please specify a name for the new branch" msgstr "Vui lòng chỉ định tên cho nhánh mới" -#: gitk:9346 +#: gitk:9444 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" msgstr "Nhánh “%s” đã có từ trước rồi. Ghi đè?" -#: gitk:9413 +#: gitk:9511 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" "Lần chuyển giao %s đã sẵn được bao gồm trong nhánh %s -- bạn có thực sự muốn " "áp dụng lại nó không?" -#: gitk:9418 +#: gitk:9516 msgid "Cherry-picking" msgstr "Đang cherry-pick" -#: gitk:9427 +#: gitk:9525 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -1031,7 +1034,7 @@ msgstr "" "Cherry-pick gặp lỗi bởi vì các thay đổi nội bộ tập tin “%s”.\n" "Xin hãy chuyển giao, reset hay stash các thay đổi của bạn sau đó thử lại." -#: gitk:9433 +#: gitk:9531 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1039,22 +1042,22 @@ msgstr "" "Cherry-pick gặp lỗi bởi vì xung đột trong hòa trộn.\n" "Bạn có muốn chạy lệnh “git citool” để giải quyết vấn đề này không?" -#: gitk:9449 gitk:9507 +#: gitk:9547 gitk:9605 msgid "No changes committed" msgstr "Không có thay đổi nào cần chuyển giao" -#: gitk:9476 +#: gitk:9574 #, tcl-format msgid "Commit %s is not included in branch %s -- really revert it?" msgstr "" "Lần chuyển giao %s không được bao gồm trong nhánh %s -- bạn có thực sự muốn " "“revert” nó không?" -#: gitk:9481 +#: gitk:9579 msgid "Reverting" msgstr "Đang hoàn tác" -#: gitk:9489 +#: gitk:9587 #, tcl-format msgid "" "Revert failed because of local changes to the following files:%s Please " @@ -1063,7 +1066,7 @@ msgstr "" "Revert gặp lỗi bởi vì tập tin sau đã được thay đổi nội bộ:%s\n" "Xin hãy chạy lệnh “commit”, “reset” hoặc “stash” rồi thử lại." -#: gitk:9493 +#: gitk:9591 msgid "" "Revert failed because of merge conflict.\n" " Do you wish to run git citool to resolve it?" @@ -1071,29 +1074,29 @@ msgstr "" "Revert gặp lỗi bởi vì xung đột hòa trộn.\n" " Bạn có muốn chạy lệnh “git citool” để phân giải nó không?" -#: gitk:9536 +#: gitk:9634 msgid "Confirm reset" msgstr "Xác nhật đặt lại" -#: gitk:9538 +#: gitk:9636 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Đặt lại nhánh “%s” thành “%s”?" -#: gitk:9540 +#: gitk:9638 msgid "Reset type:" msgstr "Kiểu đặt lại:" -#: gitk:9543 +#: gitk:9641 msgid "Soft: Leave working tree and index untouched" msgstr "Mềm: Không động đến thư mục làm việc và bảng mục lục" -#: gitk:9546 +#: gitk:9644 msgid "Mixed: Leave working tree untouched, reset index" msgstr "" "Pha trộn: Không động chạm đến thư mục làm việc nhưng đặt lại bảng mục lục" -#: gitk:9549 +#: gitk:9647 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1101,19 +1104,19 @@ msgstr "" "Hard: Đặt lại cây làm việc và mục lục\n" "(hủy bỏ MỌI thay đổi nội bộ)" -#: gitk:9566 +#: gitk:9664 msgid "Resetting" msgstr "Đang đặt lại" -#: gitk:9626 +#: gitk:9724 msgid "Checking out" msgstr "Đang checkout" -#: gitk:9679 +#: gitk:9777 msgid "Cannot delete the currently checked-out branch" msgstr "Không thể xóa nhánh hiện tại đang được lấy ra" -#: gitk:9685 +#: gitk:9783 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1122,16 +1125,16 @@ msgstr "" "Các lần chuyển giao trên nhánh %s không ở trên nhánh khác.\n" "Thực sự muốn xóa nhánh %s?" -#: gitk:9716 +#: gitk:9814 #, tcl-format msgid "Tags and heads: %s" msgstr "Thẻ và Đầu: %s" -#: gitk:9731 +#: gitk:9829 msgid "Filter" msgstr "Bộ lọc" -#: gitk:10027 +#: gitk:10125 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1139,213 +1142,219 @@ msgstr "" "Gặp lỗi khi đọc thông tin hình học lần chuyển giao; thông tin nhánh và thẻ " "trước/sau sẽ không hoàn thiện." -#: gitk:11004 +#: gitk:11102 msgid "Tag" msgstr "Thẻ" -#: gitk:11008 +#: gitk:11106 msgid "Id" msgstr "Id" -#: gitk:11091 +#: gitk:11189 msgid "Gitk font chooser" msgstr "Hộp thoại chọn phông Gitk" -#: gitk:11108 +#: gitk:11206 msgid "B" msgstr "B" -#: gitk:11111 +#: gitk:11209 msgid "I" msgstr "I" -#: gitk:11229 +#: gitk:11327 msgid "Commit list display options" msgstr "Các tùy chọn về hiển thị danh sách lần chuyển giao" -#: gitk:11232 +#: gitk:11330 msgid "Maximum graph width (lines)" msgstr "Độ rộng biểu đồ tối đa (dòng)" -#: gitk:11235 -#, tcl-format +#: gitk:11334 +#, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Độ rộng biểu đồ tối đa (% của bảng)" -#: gitk:11238 +#: gitk:11337 msgid "Show local changes" msgstr "Hiển thị các thay đổi nội bộ" -#: gitk:11241 +#: gitk:11340 msgid "Auto-select SHA1 (length)" msgstr "Tự chọn SHA1 (độ dài)" -#: gitk:11245 +#: gitk:11344 msgid "Hide remote refs" msgstr "Ẩn tham chiếu đến máy chủ" -#: gitk:11249 +#: gitk:11348 msgid "Diff display options" msgstr "Các tùy chọn trình bày các khác biệt" -#: gitk:11251 +#: gitk:11350 msgid "Tab spacing" msgstr "Khoảng cách tab" -#: gitk:11254 +#: gitk:11353 msgid "Display nearby tags/heads" msgstr "Hiển thị các thẻ/đầu xung quanh" -#: gitk:11257 +#: gitk:11356 msgid "Maximum # tags/heads to show" msgstr "Số lượng thẻ/đầu tối đa sẽ hiển thị" -#: gitk:11260 +#: gitk:11359 msgid "Limit diffs to listed paths" msgstr "Giới hạn các khác biệt cho đường dẫn đã liệt kê" -#: gitk:11263 +#: gitk:11362 msgid "Support per-file encodings" msgstr "Hỗ trợ mã hóa mỗi-dòng" -#: gitk:11269 gitk:11416 +#: gitk:11368 gitk:11515 msgid "External diff tool" msgstr "Công cụ so sánh từ bên ngoài" -#: gitk:11270 +#: gitk:11369 msgid "Choose..." msgstr "Chọn..." -#: gitk:11275 +#: gitk:11374 msgid "General options" msgstr "Các tùy chọn chung" -#: gitk:11278 +#: gitk:11377 msgid "Use themed widgets" msgstr "Dùng các widget chủ đề" -#: gitk:11280 +#: gitk:11379 msgid "(change requires restart)" msgstr "(để thay đổi cần khởi động lại)" -#: gitk:11282 +#: gitk:11381 msgid "(currently unavailable)" msgstr "(hiện tại không sẵn sàng)" -#: gitk:11293 +#: gitk:11392 msgid "Colors: press to choose" msgstr "Màu sắc: bấm vào nút phía dưới để chọn màu" -#: gitk:11296 +#: gitk:11395 msgid "Interface" msgstr "Giao diện" -#: gitk:11297 +#: gitk:11396 msgid "interface" msgstr "giao diện" -#: gitk:11300 +#: gitk:11399 msgid "Background" msgstr "Nền" -#: gitk:11301 gitk:11331 +#: gitk:11400 gitk:11430 msgid "background" msgstr "nền" -#: gitk:11304 +#: gitk:11403 msgid "Foreground" msgstr "Tiền cảnh" -#: gitk:11305 +#: gitk:11404 msgid "foreground" msgstr "tiền cảnh" -#: gitk:11308 +#: gitk:11407 msgid "Diff: old lines" msgstr "So sánh: dòng cũ" -#: gitk:11309 +#: gitk:11408 msgid "diff old lines" msgstr "diff dòng cũ" -#: gitk:11313 +#: gitk:11412 msgid "Diff: new lines" msgstr "So sánh: dòng mới" -#: gitk:11314 +#: gitk:11413 msgid "diff new lines" msgstr "màu dòng mới" -#: gitk:11318 +#: gitk:11417 msgid "Diff: hunk header" msgstr "So sánh: phần đầu của đoạn" -#: gitk:11320 +#: gitk:11419 msgid "diff hunk header" msgstr "màu của phần đầu của đoạn khi so sánh" -#: gitk:11324 +#: gitk:11423 msgid "Marked line bg" msgstr "Nền dòng đánh dấu" -#: gitk:11326 +#: gitk:11425 msgid "marked line background" msgstr "nền dòng được đánh dấu" -#: gitk:11330 +#: gitk:11429 msgid "Select bg" msgstr "Màu nền" -#: gitk:11339 +#: gitk:11438 msgid "Fonts: press to choose" msgstr "Phông chữ: bấm vào các nút ở dưới để chọn" -#: gitk:11341 +#: gitk:11440 msgid "Main font" msgstr "Phông chữ chính" -#: gitk:11342 +#: gitk:11441 msgid "Diff display font" msgstr "Phông chữ dùng khi so sánh" -#: gitk:11343 +#: gitk:11442 msgid "User interface font" msgstr "Phông chữ giao diện" -#: gitk:11365 +#: gitk:11464 msgid "Gitk preferences" msgstr "Cá nhân hóa các cài đặt cho Gitk" -#: gitk:11374 +#: gitk:11473 msgid "General" msgstr "Chung" -#: gitk:11375 +#: gitk:11474 msgid "Colors" msgstr "Màu sắc" -#: gitk:11376 +#: gitk:11475 msgid "Fonts" msgstr "Phông chữ" -#: gitk:11426 +#: gitk:11525 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: chọn màu cho %s" -#: gitk:12080 +#: gitk:12242 msgid "Cannot find a git repository here." msgstr "Không thể tìm thấy kho git ở đây." -#: gitk:12127 +#: gitk:12289 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Đối số “%s” chưa rõ ràng: vừa là điểm xét duyệt vừa là tên tập tin" -#: gitk:12139 +#: gitk:12301 msgid "Bad arguments to gitk:" msgstr "Đối số không hợp lệ cho gitk:" -#: gitk:12242 +#: gitk:12405 msgid "Command line" msgstr "Dòng lệnh" + +#~ msgid "next" +#~ msgstr "tiếp" + +#~ msgid "prev" +#~ msgstr "trước" diff --git a/http-push.c b/http-push.c index bfb1c9605b..c98dad23df 100644 --- a/http-push.c +++ b/http-push.c @@ -316,7 +316,6 @@ static void start_fetch_packed(struct transfer_request *request) preq = new_http_pack_request(target, repo->url); if (preq == NULL) { - release_http_pack_request(preq); repo->can_update_info_refs = 0; return; } @@ -8,6 +8,7 @@ #include "credential.h" #include "version.h" #include "pkt-line.h" +#include "gettext.h" int active_requests; int http_is_verbose; @@ -71,6 +72,8 @@ static struct curl_slist *no_pragma_header; static struct active_request_slot *active_queue_head; +static char *cached_accept_language; + size_t fread_buffer(char *ptr, size_t eltsize, size_t nmemb, void *buffer_) { size_t size = eltsize * nmemb; @@ -117,6 +120,37 @@ size_t fwrite_null(char *ptr, size_t eltsize, size_t nmemb, void *strbuf) return eltsize * nmemb; } +static void closedown_active_slot(struct active_request_slot *slot) +{ + active_requests--; + slot->in_use = 0; +} + +static void finish_active_slot(struct active_request_slot *slot) +{ + closedown_active_slot(slot); + curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CODE, &slot->http_code); + + if (slot->finished != NULL) + (*slot->finished) = 1; + + /* Store slot results so they can be read after the slot is reused */ + if (slot->results != NULL) { + slot->results->curl_result = slot->curl_result; + slot->results->http_code = slot->http_code; +#if LIBCURL_VERSION_NUM >= 0x070a08 + curl_easy_getinfo(slot->curl, CURLINFO_HTTPAUTH_AVAIL, + &slot->results->auth_avail); +#else + slot->results->auth_avail = 0; +#endif + } + + /* Run callback if appropriate */ + if (slot->callback_func != NULL) + slot->callback_func(slot->callback_data); +} + #ifdef USE_CURL_MULTI static void process_curl_messages(void) { @@ -372,7 +406,9 @@ static CURL *get_curl_handle(void) if (curl_http_proxy) { curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy); +#if LIBCURL_VERSION_NUM >= 0x070a07 curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY); +#endif } set_curl_keepalive(result); @@ -518,6 +554,9 @@ void http_cleanup(void) cert_auth.password = NULL; } ssl_cert_password_required = 0; + + free(cached_accept_language); + cached_accept_language = NULL; } struct active_request_slot *get_active_slot(void) @@ -736,12 +775,6 @@ void run_active_slot(struct active_request_slot *slot) #endif } -static void closedown_active_slot(struct active_request_slot *slot) -{ - active_requests--; - slot->in_use = 0; -} - static void release_active_slot(struct active_request_slot *slot) { closedown_active_slot(slot); @@ -758,31 +791,6 @@ static void release_active_slot(struct active_request_slot *slot) #endif } -void finish_active_slot(struct active_request_slot *slot) -{ - closedown_active_slot(slot); - curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CODE, &slot->http_code); - - if (slot->finished != NULL) - (*slot->finished) = 1; - - /* Store slot results so they can be read after the slot is reused */ - if (slot->results != NULL) { - slot->results->curl_result = slot->curl_result; - slot->results->http_code = slot->http_code; -#if LIBCURL_VERSION_NUM >= 0x070a08 - curl_easy_getinfo(slot->curl, CURLINFO_HTTPAUTH_AVAIL, - &slot->results->auth_avail); -#else - slot->results->auth_avail = 0; -#endif - } - - /* Run callback if appropriate */ - if (slot->callback_func != NULL) - slot->callback_func(slot->callback_data); -} - void finish_all_active_slots(void) { struct active_request_slot *slot = active_queue_head; @@ -845,7 +853,7 @@ char *get_remote_object_url(const char *url, const char *hex, return strbuf_detach(&buf, NULL); } -int handle_curl_result(struct slot_results *results) +static int handle_curl_result(struct slot_results *results) { /* * If we see a failing http code with CURLE_OK, we have turned off @@ -995,6 +1003,116 @@ static void extract_content_type(struct strbuf *raw, struct strbuf *type, strbuf_addstr(charset, "ISO-8859-1"); } +static void write_accept_language(struct strbuf *buf) +{ + /* + * MAX_DECIMAL_PLACES must not be larger than 3. If it is larger than + * that, q-value will be smaller than 0.001, the minimum q-value the + * HTTP specification allows. See + * http://tools.ietf.org/html/rfc7231#section-5.3.1 for q-value. + */ + const int MAX_DECIMAL_PLACES = 3; + const int MAX_LANGUAGE_TAGS = 1000; + const int MAX_ACCEPT_LANGUAGE_HEADER_SIZE = 4000; + char **language_tags = NULL; + int num_langs = 0; + const char *s = get_preferred_languages(); + int i; + struct strbuf tag = STRBUF_INIT; + + /* Don't add Accept-Language header if no language is preferred. */ + if (!s) + return; + + /* + * Split the colon-separated string of preferred languages into + * language_tags array. + */ + do { + /* collect language tag */ + for (; *s && (isalnum(*s) || *s == '_'); s++) + strbuf_addch(&tag, *s == '_' ? '-' : *s); + + /* skip .codeset, @modifier and any other unnecessary parts */ + while (*s && *s != ':') + s++; + + if (tag.len) { + num_langs++; + REALLOC_ARRAY(language_tags, num_langs); + language_tags[num_langs - 1] = strbuf_detach(&tag, NULL); + if (num_langs >= MAX_LANGUAGE_TAGS - 1) /* -1 for '*' */ + break; + } + } while (*s++); + + /* write Accept-Language header into buf */ + if (num_langs) { + int last_buf_len = 0; + int max_q; + int decimal_places; + char q_format[32]; + + /* add '*' */ + REALLOC_ARRAY(language_tags, num_langs + 1); + language_tags[num_langs++] = "*"; /* it's OK; this won't be freed */ + + /* compute decimal_places */ + for (max_q = 1, decimal_places = 0; + max_q < num_langs && decimal_places <= MAX_DECIMAL_PLACES; + decimal_places++, max_q *= 10) + ; + + sprintf(q_format, ";q=0.%%0%dd", decimal_places); + + strbuf_addstr(buf, "Accept-Language: "); + + for (i = 0; i < num_langs; i++) { + if (i > 0) + strbuf_addstr(buf, ", "); + + strbuf_addstr(buf, language_tags[i]); + + if (i > 0) + strbuf_addf(buf, q_format, max_q - i); + + if (buf->len > MAX_ACCEPT_LANGUAGE_HEADER_SIZE) { + strbuf_remove(buf, last_buf_len, buf->len - last_buf_len); + break; + } + + last_buf_len = buf->len; + } + } + + /* free language tags -- last one is a static '*' */ + for (i = 0; i < num_langs - 1; i++) + free(language_tags[i]); + free(language_tags); +} + +/* + * Get an Accept-Language header which indicates user's preferred languages. + * + * Examples: + * LANGUAGE= -> "" + * LANGUAGE=ko:en -> "Accept-Language: ko, en; q=0.9, *; q=0.1" + * LANGUAGE=ko_KR.UTF-8:sr@latin -> "Accept-Language: ko-KR, sr; q=0.9, *; q=0.1" + * LANGUAGE=ko LANG=en_US.UTF-8 -> "Accept-Language: ko, *; q=0.1" + * LANGUAGE= LANG=en_US.UTF-8 -> "Accept-Language: en-US, *; q=0.1" + * LANGUAGE= LANG=C -> "" + */ +static const char *get_accept_language(void) +{ + if (!cached_accept_language) { + struct strbuf buf = STRBUF_INIT; + write_accept_language(&buf); + if (buf.len > 0) + cached_accept_language = strbuf_detach(&buf, NULL); + } + + return cached_accept_language; +} /* http_request() targets */ #define HTTP_REQUEST_STRBUF 0 @@ -1008,6 +1126,7 @@ static int http_request(const char *url, struct slot_results results; struct curl_slist *headers = NULL; struct strbuf buf = STRBUF_INIT; + const char *accept_language; int ret; slot = get_active_slot(); @@ -1033,6 +1152,11 @@ static int http_request(const char *url, fwrite_buffer); } + accept_language = get_accept_language(); + + if (accept_language) + headers = curl_slist_append(headers, accept_language); + strbuf_addstr(&buf, "Pragma:"); if (options && options->no_cache) strbuf_addstr(&buf, " no-cache"); @@ -1338,6 +1462,7 @@ void release_http_pack_request(struct http_pack_request *preq) } preq->slot = NULL; free(preq->url); + free(preq); } int finish_http_pack_request(struct http_pack_request *preq) @@ -85,9 +85,7 @@ extern curlioerr ioctl_buffer(CURL *handle, int cmd, void *clientp); extern struct active_request_slot *get_active_slot(void); extern int start_active_slot(struct active_request_slot *slot); extern void run_active_slot(struct active_request_slot *slot); -extern void finish_active_slot(struct active_request_slot *slot); extern void finish_all_active_slots(void); -extern int handle_curl_result(struct slot_results *results); /* * This will run one slot to completion in a blocking manner, similar to how diff --git a/line-log.c b/line-log.c index b7864ad586..a490efea07 100644 --- a/line-log.c +++ b/line-log.c @@ -237,7 +237,7 @@ static void diff_ranges_release(struct diff_ranges *diff) range_set_release(&diff->target); } -void line_log_data_init(struct line_log_data *r) +static void line_log_data_init(struct line_log_data *r) { memset(r, 0, sizeof(struct line_log_data)); range_set_init(&r->ranges, 0); diff --git a/line-log.h b/line-log.h index a9212d84e4..7a5c24e2df 100644 --- a/line-log.h +++ b/line-log.h @@ -54,8 +54,6 @@ struct line_log_data { struct diff_ranges diff; }; -extern void line_log_data_init(struct line_log_data *r); - extern void line_log_init(struct rev_info *rev, const char *prefix, struct string_list *args); extern int line_log_filter(struct rev_info *rev); diff --git a/log-tree.c b/log-tree.c index 53bb52659b..2c1ed0fa90 100644 --- a/log-tree.c +++ b/log-tree.c @@ -173,6 +173,43 @@ static void show_children(struct rev_info *opt, struct commit *commit, int abbre } /* + * Do we have HEAD in the output, and also the branch it points at? + * If so, find that decoration entry for that current branch. + */ +static const struct name_decoration *current_pointed_by_HEAD(const struct name_decoration *decoration) +{ + const struct name_decoration *list, *head = NULL; + const char *branch_name = NULL; + unsigned char unused[20]; + int rru_flags; + + /* First find HEAD */ + for (list = decoration; list; list = list->next) + if (list->type == DECORATION_REF_HEAD) { + head = list; + break; + } + if (!head) + return NULL; + + /* Now resolve and find the matching current branch */ + branch_name = resolve_ref_unsafe("HEAD", 0, unused, &rru_flags); + if (!(rru_flags & REF_ISSYMREF)) + return NULL; + if (!skip_prefix(branch_name, "refs/heads/", &branch_name)) + return NULL; + + /* OK, do we have that ref in the list? */ + for (list = decoration; list; list = list->next) + if ((list->type == DECORATION_REF_LOCAL) && + !strcmp(branch_name, list->name)) { + return list; + } + + return NULL; +} + +/* * The caller makes sure there is no funny color before calling. * format_decorations_extended makes sure the same after return. */ @@ -184,6 +221,7 @@ void format_decorations_extended(struct strbuf *sb, const char *suffix) { const struct name_decoration *decoration; + const struct name_decoration *current_and_HEAD; const char *color_commit = diff_get_color(use_color, DIFF_COMMIT); const char *color_reset = @@ -192,16 +230,37 @@ void format_decorations_extended(struct strbuf *sb, decoration = get_name_decoration(&commit->object); if (!decoration) return; + + current_and_HEAD = current_pointed_by_HEAD(decoration); while (decoration) { - strbuf_addstr(sb, color_commit); - strbuf_addstr(sb, prefix); - strbuf_addstr(sb, color_reset); - strbuf_addstr(sb, decorate_get_color(use_color, decoration->type)); - if (decoration->type == DECORATION_REF_TAG) - strbuf_addstr(sb, "tag: "); - strbuf_addstr(sb, decoration->name); - strbuf_addstr(sb, color_reset); - prefix = separator; + /* + * When both current and HEAD are there, only + * show HEAD->current where HEAD would have + * appeared, skipping the entry for current. + */ + if (decoration != current_and_HEAD) { + strbuf_addstr(sb, color_commit); + strbuf_addstr(sb, prefix); + strbuf_addstr(sb, color_reset); + strbuf_addstr(sb, decorate_get_color(use_color, decoration->type)); + if (decoration->type == DECORATION_REF_TAG) + strbuf_addstr(sb, "tag: "); + + strbuf_addstr(sb, decoration->name); + + if (current_and_HEAD && + decoration->type == DECORATION_REF_HEAD) { + strbuf_addstr(sb, color_reset); + strbuf_addstr(sb, color_commit); + strbuf_addstr(sb, " -> "); + strbuf_addstr(sb, color_reset); + strbuf_addstr(sb, decorate_get_color(use_color, current_and_HEAD->type)); + strbuf_addstr(sb, current_and_HEAD->name); + } + strbuf_addstr(sb, color_reset); + + prefix = separator; + } decoration = decoration->next; } strbuf_addstr(sb, color_commit); diff --git a/merge-blobs.c b/merge-blobs.c index 57211bccb7..7abb894c68 100644 --- a/merge-blobs.c +++ b/merge-blobs.c @@ -14,8 +14,10 @@ static int fill_mmfile_blob(mmfile_t *f, struct blob *obj) buf = read_sha1_file(obj->object.sha1, &type, &size); if (!buf) return -1; - if (type != OBJ_BLOB) + if (type != OBJ_BLOB) { + free(buf); return -1; + } f->ptr = buf; f->size = size; return 0; diff --git a/merge-recursive.c b/merge-recursive.c index 771f5e21b0..1c9c30db6c 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1858,6 +1858,9 @@ int merge_trees(struct merge_options *o, string_list_clear(re_head, 0); string_list_clear(entries, 1); + free(re_merge); + free(re_head); + free(entries); } else clean = 1; diff --git a/pack-bitmap.c b/pack-bitmap.c index 6a818419ca..365f9d92ed 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -60,7 +60,7 @@ static struct bitmap_index { struct ewah_bitmap *blobs; struct ewah_bitmap *tags; - /* Map from SHA1 -> `stored_bitmap` for all the bitmapped comits */ + /* Map from SHA1 -> `stored_bitmap` for all the bitmapped commits */ khash_sha1 *bitmaps; /* Number of bitmapped commits */ @@ -252,6 +252,20 @@ static int load_bitmap_entries_v1(struct bitmap_index *index) return 0; } +static char *pack_bitmap_filename(struct packed_git *p) +{ + char *idx_name; + int len; + + len = strlen(p->pack_name) - strlen(".pack"); + idx_name = xmalloc(len + strlen(".bitmap") + 1); + + memcpy(idx_name, p->pack_name, len); + memcpy(idx_name + len, ".bitmap", strlen(".bitmap") + 1); + + return idx_name; +} + static int open_pack_bitmap_1(struct packed_git *packfile) { int fd; @@ -322,20 +336,6 @@ failed: return -1; } -char *pack_bitmap_filename(struct packed_git *p) -{ - char *idx_name; - int len; - - len = strlen(p->pack_name) - strlen(".pack"); - idx_name = xmalloc(len + strlen(".bitmap") + 1); - - memcpy(idx_name, p->pack_name, len); - memcpy(idx_name + len, ".bitmap", strlen(".bitmap") + 1); - - return idx_name; -} - static int open_pack_bitmap(void) { struct packed_git *p; diff --git a/pack-bitmap.h b/pack-bitmap.h index 487600b18c..0adcef77b5 100644 --- a/pack-bitmap.h +++ b/pack-bitmap.h @@ -38,7 +38,6 @@ int prepare_bitmap_git(void); void count_bitmap_commit_list(uint32_t *commits, uint32_t *trees, uint32_t *blobs, uint32_t *tags); void traverse_bitmap_commit_list(show_reachable_fn show_reachable); void test_bitmap_walk(struct rev_info *revs); -char *pack_bitmap_filename(struct packed_git *p); int prepare_bitmap_walk(struct rev_info *revs); int reuse_partial_packfile_from_bitmap(struct packed_git **packfile, uint32_t *entries, off_t *up_to); int rebuild_existing_bitmaps(struct packing_data *mapping, khash_sha1 *reused_bitmaps, int show_progress); diff --git a/perl/Git/SVN.pm b/perl/Git/SVN.pm index f24372645b..152fb7e927 100644 --- a/perl/Git/SVN.pm +++ b/perl/Git/SVN.pm @@ -9,10 +9,8 @@ use vars qw/$_no_metadata $_use_log_author $_add_author_from $_localtime/; use Carp qw/croak/; use File::Path qw/mkpath/; -use File::Copy qw/copy/; use IPC::Open3; use Memoize; # core since 5.8.0, Jul 2002 -use Memoize::Storable; use POSIX qw(:signal_h); use Time::Local; @@ -33,11 +31,7 @@ use Git::SVN::Utils qw( add_path_to_url ); -my $can_use_yaml; -BEGIN { - $can_use_yaml = eval { require Git::SVN::Memoize::YAML; 1}; -} - +my $memo_backend; our $_follow_parent = 1; our $_minimize_url = 'unset'; our $default_repo_id = 'svn'; @@ -1579,7 +1573,16 @@ sub tie_for_persistent_memoization { my $hash = shift; my $path = shift; - if ($can_use_yaml) { + unless ($memo_backend) { + if (eval { require Git::SVN::Memoize::YAML; 1}) { + $memo_backend = 1; + } else { + require Memoize::Storable; + $memo_backend = -1; + } + } + + if ($memo_backend > 0) { tie %$hash => 'Git::SVN::Memoize::YAML', "$path.yaml"; } else { tie %$hash => 'Memoize::Storable', "$path.db", 'nstore'; @@ -2189,8 +2192,9 @@ sub rev_map_set { # both of these options make our .rev_db file very, very important # and we can't afford to lose it because rebuild() won't work if ($self->use_svm_props || $self->no_metadata) { + require File::Copy; $sync = 1; - copy($db, $db_lock) or die "rev_map_set(@_): ", + File::Copy::copy($db, $db_lock) or die "rev_map_set(@_): ", "Failed to copy: ", "$db => $db_lock ($!)\n"; } else { diff --git a/perl/Git/SVN/Editor.pm b/perl/Git/SVN/Editor.pm index 4088f13e72..c50176eec9 100644 --- a/perl/Git/SVN/Editor.pm +++ b/perl/Git/SVN/Editor.pm @@ -5,7 +5,6 @@ use warnings; use SVN::Core; use SVN::Delta; use Carp qw/croak/; -use IO::File; use Git qw/command command_oneline command_noisy command_output_pipe command_input_pipe command_close_pipe command_bidi_pipe command_close_bidi_pipe/; @@ -586,7 +585,7 @@ The interface will change as git-svn evolves. =head1 DEPENDENCIES Subversion perl bindings, -the core L<Carp> and L<IO::File> modules, +the core L<Carp> module, and git's L<Git> helper module. C<Git::SVN::Editor> has not been tested using callers other than diff --git a/perl/Git/SVN/Fetcher.pm b/perl/Git/SVN/Fetcher.pm index 613055a3f5..d8c21ad915 100644 --- a/perl/Git/SVN/Fetcher.pm +++ b/perl/Git/SVN/Fetcher.pm @@ -7,7 +7,6 @@ use warnings; use SVN::Delta; use Carp qw/croak/; use File::Basename qw/dirname/; -use IO::File qw//; use Git qw/command command_oneline command_noisy command_output_pipe command_input_pipe command_close_pipe command_bidi_pipe command_close_bidi_pipe/; @@ -608,7 +607,7 @@ developing git-svn. =head1 DEPENDENCIES L<SVN::Delta> from the Subversion perl bindings, -the core L<Carp>, L<File::Basename>, and L<IO::File> modules, +the core L<Carp> and L<File::Basename> modules, and git's L<Git> helper module. C<Git::SVN::Fetcher> has not been tested using callers other than diff --git a/perl/Git/SVN/Ra.pm b/perl/Git/SVN/Ra.pm index 32e2f19ea4..4a499fcb38 100644 --- a/perl/Git/SVN/Ra.pm +++ b/perl/Git/SVN/Ra.pm @@ -3,7 +3,6 @@ use vars qw/@ISA $config_dir $_ignore_refs_regex $_log_window_size/; use strict; use warnings; use Memoize; -use SVN::Client; use Git::SVN::Utils qw( canonicalize_url canonicalize_path @@ -42,6 +41,7 @@ END { } sub _auth_providers () { + require SVN::Client; my @rv = ( SVN::Client::get_simple_provider(), SVN::Client::get_ssl_server_trust_file_provider(), @@ -247,7 +247,10 @@ sub get_log { $ret; } +# uncommon, only for ancient SVN (<= 1.4.2) sub trees_match { + require IO::File; + require SVN::Client; my ($self, $url1, $rev1, $url2, $rev2) = @_; my $ctx = SVN::Client->new(auth => _auth_providers); my $out = IO::File->new_tmpfile; @@ -73,8 +73,3 @@ char *git_prompt(const char *prompt, int flags) } return r; } - -char *git_getpass(const char *prompt) -{ - return git_prompt(prompt, PROMPT_ASKPASS); -} @@ -5,6 +5,5 @@ #define PROMPT_ECHO (1<<1) char *git_prompt(const char *prompt, int flags); -char *git_getpass(const char *prompt); #endif /* PROMPT_H */ diff --git a/read-cache.c b/read-cache.c index 1bf78a445f..36ff89f29e 100644 --- a/read-cache.c +++ b/read-cache.c @@ -681,15 +681,18 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, alias = index_file_exists(istate, ce->name, ce_namelen(ce), ignore_case); if (alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) { /* Nothing changed, really */ - free(ce); if (!S_ISGITLINK(alias->ce_mode)) ce_mark_uptodate(alias); alias->ce_flags |= CE_ADDED; + + free(ce); return 0; } if (!intent_only) { - if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT)) + if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT)) { + free(ce); return error("unable to index file %s", path); + } } else set_object_name_for_intent_to_add_entry(ce); @@ -704,9 +707,11 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, ce->ce_mode == alias->ce_mode); if (pretend) - ; - else if (add_index_entry(istate, ce, add_option)) - return error("unable to add %s to index",path); + free(ce); + else if (add_index_entry(istate, ce, add_option)) { + free(ce); + return error("unable to add %s to index", path); + } if (verbose && !was_same) printf("add '%s'\n", path); return 0; @@ -743,12 +748,9 @@ struct cache_entry *make_cache_entry(unsigned int mode, ce->ce_mode = create_ce_mode(mode); ret = refresh_cache_entry(ce, refresh_options); - if (!ret) { + if (ret != ce) free(ce); - return NULL; - } else { - return ret; - } + return ret; } int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) @@ -6,6 +6,14 @@ #include "dir.h" #include "string-list.h" +struct ref_lock { + char *ref_name; + char *orig_ref_name; + struct lock_file *lk; + unsigned char old_sha1[20]; + int lock_fd; +}; + /* * How to handle various characters in refnames: * 0: An acceptable character for refs @@ -26,10 +34,29 @@ static unsigned char refname_disposition[256] = { }; /* - * Used as a flag to ref_transaction_delete when a loose ref is being + * Flag passed to lock_ref_sha1_basic() telling it to tolerate broken + * refs (i.e., because the reference is about to be deleted anyway). + */ +#define REF_DELETING 0x02 + +/* + * Used as a flag in ref_update::flags when a loose ref is being * pruned. */ -#define REF_ISPRUNING 0x0100 +#define REF_ISPRUNING 0x04 + +/* + * Used as a flag in ref_update::flags when the reference should be + * updated to new_sha1. + */ +#define REF_HAVE_NEW 0x08 + +/* + * Used as a flag in ref_update::flags when old_sha1 should be + * checked. + */ +#define REF_HAVE_OLD 0x10 + /* * Try to read one refname component from the front of refname. * Return the length of the component found, or -1 if the component is @@ -2098,6 +2125,16 @@ int refname_match(const char *abbrev_name, const char *full_name) return 0; } +static void unlock_ref(struct ref_lock *lock) +{ + /* Do not free lock->lk -- atexit() still looks at them */ + if (lock->lk) + rollback_lock_file(lock->lk); + free(lock->ref_name); + free(lock->orig_ref_name); + free(lock); +} + /* This function should make sure errno is meaningful on error */ static struct ref_lock *verify_lock(struct ref_lock *lock, const unsigned char *old_sha1, int mustexist) @@ -2235,7 +2272,7 @@ int dwim_log(const char *str, int len, unsigned char *sha1, char **log) static struct ref_lock *lock_ref_sha1_basic(const char *refname, const unsigned char *old_sha1, const struct string_list *skip, - int flags, int *type_p) + unsigned int flags, int *type_p) { char *ref_file; const char *orig_refname = refname; @@ -2244,7 +2281,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname, int type, lflags; int mustexist = (old_sha1 && !is_null_sha1(old_sha1)); int resolve_flags = 0; - int missing = 0; int attempts_remaining = 3; lock = xcalloc(1, sizeof(struct ref_lock)); @@ -2283,13 +2319,13 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname, orig_refname, strerror(errno)); goto error_return; } - missing = is_null_sha1(lock->old_sha1); - /* When the ref did not exist and we are creating it, - * make sure there is no existing ref that is packed - * whose name begins with our refname, nor a ref whose - * name is a proper prefix of our refname. + /* + * If the ref did not exist and we are creating it, make sure + * there is no existing packed ref whose name begins with our + * refname, nor a packed ref whose name is a proper prefix of + * our refname. */ - if (missing && + if (is_null_sha1(lock->old_sha1) && !is_refname_available(refname, skip, get_packed_refs(&ref_cache))) { last_errno = ENOTDIR; goto error_return; @@ -2305,10 +2341,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname, lock->ref_name = xstrdup(refname); lock->orig_ref_name = xstrdup(orig_refname); ref_file = git_path("%s", refname); - if (missing) - lock->force_write = 1; - if ((flags & REF_NODEREF) && (type & REF_ISSYMREF)) - lock->force_write = 1; retry: switch (safe_create_leading_directories(ref_file)) { @@ -2350,13 +2382,6 @@ static struct ref_lock *lock_ref_sha1_basic(const char *refname, return NULL; } -struct ref_lock *lock_any_ref_for_update(const char *refname, - const unsigned char *old_sha1, - int flags, int *type_p) -{ - return lock_ref_sha1_basic(refname, old_sha1, NULL, flags, type_p); -} - /* * Write an entry to the packed-refs file for the specified refname. * If peeled is non-NULL, write it as the entry's peeled value. @@ -2556,7 +2581,7 @@ static void prune_ref(struct ref_to_prune *r) transaction = ref_transaction_begin(&err); if (!transaction || ref_transaction_delete(transaction, r->name, r->sha1, - REF_ISPRUNING, 1, NULL, &err) || + REF_ISPRUNING, NULL, &err) || ref_transaction_commit(transaction, &err)) { ref_transaction_free(transaction); error("%s", err.buf); @@ -2661,15 +2686,16 @@ static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err) return 0; } -int delete_ref(const char *refname, const unsigned char *sha1, int delopt) +int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flags) { struct ref_transaction *transaction; struct strbuf err = STRBUF_INIT; transaction = ref_transaction_begin(&err); if (!transaction || - ref_transaction_delete(transaction, refname, sha1, delopt, - sha1 && !is_null_sha1(sha1), NULL, &err) || + ref_transaction_delete(transaction, refname, + (sha1 && !is_null_sha1(sha1)) ? sha1 : NULL, + flags, NULL, &err) || ref_transaction_commit(transaction, &err)) { error("%s", err.buf); ref_transaction_free(transaction); @@ -2805,7 +2831,6 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms error("unable to lock %s for update", newrefname); goto rollback; } - lock->force_write = 1; hashcpy(lock->old_sha1, orig_sha1); if (write_ref_sha1(lock, orig_sha1, logmsg)) { error("unable to write current sha1 into %s", newrefname); @@ -2821,7 +2846,6 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms goto rollbacklog; } - lock->force_write = 1; flag = log_all_ref_updates; log_all_ref_updates = 0; if (write_ref_sha1(lock, orig_sha1, NULL)) @@ -2840,7 +2864,7 @@ int rename_ref(const char *oldrefname, const char *newrefname, const char *logms return 1; } -int close_ref(struct ref_lock *lock) +static int close_ref(struct ref_lock *lock) { if (close_lock_file(lock->lk)) return -1; @@ -2848,7 +2872,7 @@ int close_ref(struct ref_lock *lock) return 0; } -int commit_ref(struct ref_lock *lock) +static int commit_ref(struct ref_lock *lock) { if (commit_lock_file(lock->lk)) return -1; @@ -2856,16 +2880,6 @@ int commit_ref(struct ref_lock *lock) return 0; } -void unlock_ref(struct ref_lock *lock) -{ - /* Do not free lock->lk -- atexit() still looks at them */ - if (lock->lk) - rollback_lock_file(lock->lk); - free(lock->ref_name); - free(lock->orig_ref_name); - free(lock); -} - /* * copy the reflog message msg to buf, which has been allocated sufficiently * large, while cleaning up the whitespaces. Especially, convert LF to space, @@ -2942,15 +2956,37 @@ int log_ref_setup(const char *refname, char *logfile, int bufsize) return 0; } +static int log_ref_write_fd(int fd, const unsigned char *old_sha1, + const unsigned char *new_sha1, + const char *committer, const char *msg) +{ + int msglen, written; + unsigned maxlen, len; + char *logrec; + + msglen = msg ? strlen(msg) : 0; + maxlen = strlen(committer) + msglen + 100; + logrec = xmalloc(maxlen); + len = sprintf(logrec, "%s %s %s\n", + sha1_to_hex(old_sha1), + sha1_to_hex(new_sha1), + committer); + if (msglen) + len += copy_msg(logrec + len - 1, msg) - 1; + + written = len <= maxlen ? write_in_full(fd, logrec, len) : -1; + free(logrec); + if (written != len) + return -1; + + return 0; +} + static int log_ref_write(const char *refname, const unsigned char *old_sha1, const unsigned char *new_sha1, const char *msg) { - int logfd, result, written, oflags = O_APPEND | O_WRONLY; - unsigned maxlen, len; - int msglen; + int logfd, result, oflags = O_APPEND | O_WRONLY; char log_file[PATH_MAX]; - char *logrec; - const char *committer; if (log_all_ref_updates < 0) log_all_ref_updates = !is_bare_repository(); @@ -2962,19 +2998,9 @@ static int log_ref_write(const char *refname, const unsigned char *old_sha1, logfd = open(log_file, oflags); if (logfd < 0) return 0; - msglen = msg ? strlen(msg) : 0; - committer = git_committer_info(0); - maxlen = strlen(committer) + msglen + 100; - logrec = xmalloc(maxlen); - len = sprintf(logrec, "%s %s %s\n", - sha1_to_hex(old_sha1), - sha1_to_hex(new_sha1), - committer); - if (msglen) - len += copy_msg(logrec + len - 1, msg) - 1; - written = len <= maxlen ? write_in_full(logfd, logrec, len) : -1; - free(logrec); - if (written != len) { + result = log_ref_write_fd(logfd, old_sha1, new_sha1, + git_committer_info(0), msg); + if (result) { int save_errno = errno; close(logfd); error("Unable to append to %s", log_file); @@ -3005,14 +3031,6 @@ static int write_ref_sha1(struct ref_lock *lock, static char term = '\n'; struct object *o; - if (!lock) { - errno = EINVAL; - return -1; - } - if (!lock->force_write && !hashcmp(lock->old_sha1, sha1)) { - unlock_ref(lock); - return 0; - } o = parse_object(sha1); if (!o) { error("Trying to write ref %s with nonexistent object %s", @@ -3482,16 +3500,27 @@ int for_each_reflog(each_ref_fn fn, void *cb_data) } /** - * Information needed for a single ref update. Set new_sha1 to the - * new value or to zero to delete the ref. To check the old value - * while locking the ref, set have_old to 1 and set old_sha1 to the - * value or to zero to ensure the ref does not exist before update. + * Information needed for a single ref update. Set new_sha1 to the new + * value or to null_sha1 to delete the ref. To check the old value + * while the ref is locked, set (flags & REF_HAVE_OLD) and set + * old_sha1 to the old value, or to null_sha1 to ensure the ref does + * not exist before update. */ struct ref_update { + /* + * If (flags & REF_HAVE_NEW), set the reference to this value: + */ unsigned char new_sha1[20]; + /* + * If (flags & REF_HAVE_OLD), check that the reference + * previously had this value: + */ unsigned char old_sha1[20]; - int flags; /* REF_NODEREF? */ - int have_old; /* 1 if old_sha1 is valid, 0 otherwise */ + /* + * One or more of REF_HAVE_NEW, REF_HAVE_OLD, REF_NODEREF, + * REF_DELETING, and REF_ISPRUNING: + */ + unsigned int flags; struct ref_lock *lock; int type; char *msg; @@ -3563,7 +3592,7 @@ int ref_transaction_update(struct ref_transaction *transaction, const char *refname, const unsigned char *new_sha1, const unsigned char *old_sha1, - int flags, int have_old, const char *msg, + unsigned int flags, const char *msg, struct strbuf *err) { struct ref_update *update; @@ -3573,10 +3602,7 @@ int ref_transaction_update(struct ref_transaction *transaction, if (transaction->state != REF_TRANSACTION_OPEN) die("BUG: update called for transaction that is not open"); - if (have_old && !old_sha1) - die("BUG: have_old is true but old_sha1 is NULL"); - - if (!is_null_sha1(new_sha1) && + if (new_sha1 && !is_null_sha1(new_sha1) && check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) { strbuf_addf(err, "refusing to update ref with bad name %s", refname); @@ -3584,11 +3610,15 @@ int ref_transaction_update(struct ref_transaction *transaction, } update = add_update(transaction, refname); - hashcpy(update->new_sha1, new_sha1); - update->flags = flags; - update->have_old = have_old; - if (have_old) + if (new_sha1) { + hashcpy(update->new_sha1, new_sha1); + flags |= REF_HAVE_NEW; + } + if (old_sha1) { hashcpy(update->old_sha1, old_sha1); + flags |= REF_HAVE_OLD; + } + update->flags = flags; if (msg) update->msg = xstrdup(msg); return 0; @@ -3597,75 +3627,52 @@ int ref_transaction_update(struct ref_transaction *transaction, int ref_transaction_create(struct ref_transaction *transaction, const char *refname, const unsigned char *new_sha1, - int flags, const char *msg, + unsigned int flags, const char *msg, struct strbuf *err) { - struct ref_update *update; - - assert(err); - - if (transaction->state != REF_TRANSACTION_OPEN) - die("BUG: create called for transaction that is not open"); - if (!new_sha1 || is_null_sha1(new_sha1)) - die("BUG: create ref with null new_sha1"); - - if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) { - strbuf_addf(err, "refusing to create ref with bad name %s", - refname); - return -1; - } - - update = add_update(transaction, refname); - - hashcpy(update->new_sha1, new_sha1); - hashclr(update->old_sha1); - update->flags = flags; - update->have_old = 1; - if (msg) - update->msg = xstrdup(msg); - return 0; + die("BUG: create called without valid new_sha1"); + return ref_transaction_update(transaction, refname, new_sha1, + null_sha1, flags, msg, err); } int ref_transaction_delete(struct ref_transaction *transaction, const char *refname, const unsigned char *old_sha1, - int flags, int have_old, const char *msg, + unsigned int flags, const char *msg, struct strbuf *err) { - struct ref_update *update; - - assert(err); - - if (transaction->state != REF_TRANSACTION_OPEN) - die("BUG: delete called for transaction that is not open"); - - if (have_old && !old_sha1) - die("BUG: have_old is true but old_sha1 is NULL"); + if (old_sha1 && is_null_sha1(old_sha1)) + die("BUG: delete called with old_sha1 set to zeros"); + return ref_transaction_update(transaction, refname, + null_sha1, old_sha1, + flags, msg, err); +} - update = add_update(transaction, refname); - update->flags = flags; - update->have_old = have_old; - if (have_old) { - assert(!is_null_sha1(old_sha1)); - hashcpy(update->old_sha1, old_sha1); - } - if (msg) - update->msg = xstrdup(msg); - return 0; +int ref_transaction_verify(struct ref_transaction *transaction, + const char *refname, + const unsigned char *old_sha1, + unsigned int flags, + struct strbuf *err) +{ + if (!old_sha1) + die("BUG: verify called with old_sha1 set to NULL"); + return ref_transaction_update(transaction, refname, + NULL, old_sha1, + flags, NULL, err); } -int update_ref(const char *action, const char *refname, - const unsigned char *sha1, const unsigned char *oldval, - int flags, enum action_on_err onerr) +int update_ref(const char *msg, const char *refname, + const unsigned char *new_sha1, const unsigned char *old_sha1, + unsigned int flags, enum action_on_err onerr) { struct ref_transaction *t; struct strbuf err = STRBUF_INIT; t = ref_transaction_begin(&err); if (!t || - ref_transaction_update(t, refname, sha1, oldval, flags, - !!oldval, action, &err) || + ref_transaction_update(t, refname, new_sha1, old_sha1, + flags, msg, &err) || ref_transaction_commit(t, &err)) { const char *str = "update_ref failed for ref '%s': %s"; @@ -3741,17 +3748,17 @@ int ref_transaction_commit(struct ref_transaction *transaction, /* Acquire all locks while verifying old values */ for (i = 0; i < n; i++) { struct ref_update *update = updates[i]; - int flags = update->flags; + unsigned int flags = update->flags; - if (is_null_sha1(update->new_sha1)) + if ((flags & REF_HAVE_NEW) && is_null_sha1(update->new_sha1)) flags |= REF_DELETING; - update->lock = lock_ref_sha1_basic(update->refname, - (update->have_old ? - update->old_sha1 : - NULL), - NULL, - flags, - &update->type); + update->lock = lock_ref_sha1_basic( + update->refname, + ((update->flags & REF_HAVE_OLD) ? + update->old_sha1 : NULL), + NULL, + flags, + &update->type); if (!update->lock) { ret = (errno == ENOTDIR) ? TRANSACTION_NAME_CONFLICT @@ -3765,31 +3772,46 @@ int ref_transaction_commit(struct ref_transaction *transaction, /* Perform updates first so live commits remain referenced */ for (i = 0; i < n; i++) { struct ref_update *update = updates[i]; + int flags = update->flags; + + if ((flags & REF_HAVE_NEW) && !is_null_sha1(update->new_sha1)) { + int overwriting_symref = ((update->type & REF_ISSYMREF) && + (update->flags & REF_NODEREF)); - if (!is_null_sha1(update->new_sha1)) { - if (write_ref_sha1(update->lock, update->new_sha1, - update->msg)) { + if (!overwriting_symref + && !hashcmp(update->lock->old_sha1, update->new_sha1)) { + /* + * The reference already has the desired + * value, so we don't need to write it. + */ + unlock_ref(update->lock); + update->lock = NULL; + } else if (write_ref_sha1(update->lock, update->new_sha1, + update->msg)) { update->lock = NULL; /* freed by write_ref_sha1 */ strbuf_addf(err, "Cannot update the ref '%s'.", update->refname); ret = TRANSACTION_GENERIC_ERROR; goto cleanup; + } else { + /* freed by write_ref_sha1(): */ + update->lock = NULL; } - update->lock = NULL; /* freed by write_ref_sha1 */ } } /* Perform deletes now that updates are safely completed */ for (i = 0; i < n; i++) { struct ref_update *update = updates[i]; + int flags = update->flags; - if (update->lock) { + if ((flags & REF_HAVE_NEW) && is_null_sha1(update->new_sha1)) { if (delete_ref_loose(update->lock, update->type, err)) { ret = TRANSACTION_GENERIC_ERROR; goto cleanup; } - if (!(update->flags & REF_ISPRUNING)) + if (!(flags & REF_ISPRUNING)) string_list_append(&refs_to_delete, update->lock->ref_name); } @@ -3948,3 +3970,141 @@ int ref_is_hidden(const char *refname) } return 0; } + +struct expire_reflog_cb { + unsigned int flags; + reflog_expiry_should_prune_fn *should_prune_fn; + void *policy_cb; + FILE *newlog; + unsigned char last_kept_sha1[20]; +}; + +static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1, + const char *email, unsigned long timestamp, int tz, + const char *message, void *cb_data) +{ + struct expire_reflog_cb *cb = cb_data; + struct expire_reflog_policy_cb *policy_cb = cb->policy_cb; + + if (cb->flags & EXPIRE_REFLOGS_REWRITE) + osha1 = cb->last_kept_sha1; + + if ((*cb->should_prune_fn)(osha1, nsha1, email, timestamp, tz, + message, policy_cb)) { + if (!cb->newlog) + printf("would prune %s", message); + else if (cb->flags & EXPIRE_REFLOGS_VERBOSE) + printf("prune %s", message); + } else { + if (cb->newlog) { + fprintf(cb->newlog, "%s %s %s %lu %+05d\t%s", + sha1_to_hex(osha1), sha1_to_hex(nsha1), + email, timestamp, tz, message); + hashcpy(cb->last_kept_sha1, nsha1); + } + if (cb->flags & EXPIRE_REFLOGS_VERBOSE) + printf("keep %s", message); + } + return 0; +} + +int reflog_expire(const char *refname, const unsigned char *sha1, + unsigned int flags, + reflog_expiry_prepare_fn prepare_fn, + reflog_expiry_should_prune_fn should_prune_fn, + reflog_expiry_cleanup_fn cleanup_fn, + void *policy_cb_data) +{ + static struct lock_file reflog_lock; + struct expire_reflog_cb cb; + struct ref_lock *lock; + char *log_file; + int status = 0; + int type; + + memset(&cb, 0, sizeof(cb)); + cb.flags = flags; + cb.policy_cb = policy_cb_data; + cb.should_prune_fn = should_prune_fn; + + /* + * The reflog file is locked by holding the lock on the + * reference itself, plus we might need to update the + * reference if --updateref was specified: + */ + lock = lock_ref_sha1_basic(refname, sha1, NULL, 0, &type); + if (!lock) + return error("cannot lock ref '%s'", refname); + if (!reflog_exists(refname)) { + unlock_ref(lock); + return 0; + } + + log_file = git_pathdup("logs/%s", refname); + if (!(flags & EXPIRE_REFLOGS_DRY_RUN)) { + /* + * Even though holding $GIT_DIR/logs/$reflog.lock has + * no locking implications, we use the lock_file + * machinery here anyway because it does a lot of the + * work we need, including cleaning up if the program + * exits unexpectedly. + */ + if (hold_lock_file_for_update(&reflog_lock, log_file, 0) < 0) { + struct strbuf err = STRBUF_INIT; + unable_to_lock_message(log_file, errno, &err); + error("%s", err.buf); + strbuf_release(&err); + goto failure; + } + cb.newlog = fdopen_lock_file(&reflog_lock, "w"); + if (!cb.newlog) { + error("cannot fdopen %s (%s)", + reflog_lock.filename.buf, strerror(errno)); + goto failure; + } + } + + (*prepare_fn)(refname, sha1, cb.policy_cb); + for_each_reflog_ent(refname, expire_reflog_ent, &cb); + (*cleanup_fn)(cb.policy_cb); + + if (!(flags & EXPIRE_REFLOGS_DRY_RUN)) { + /* + * It doesn't make sense to adjust a reference pointed + * to by a symbolic ref based on expiring entries in + * the symbolic reference's reflog. Nor can we update + * a reference if there are no remaining reflog + * entries. + */ + int update = (flags & EXPIRE_REFLOGS_UPDATE_REF) && + !(type & REF_ISSYMREF) && + !is_null_sha1(cb.last_kept_sha1); + + if (close_lock_file(&reflog_lock)) { + status |= error("couldn't write %s: %s", log_file, + strerror(errno)); + } else if (update && + (write_in_full(lock->lock_fd, + sha1_to_hex(cb.last_kept_sha1), 40) != 40 || + write_str_in_full(lock->lock_fd, "\n") != 1 || + close_ref(lock) < 0)) { + status |= error("couldn't write %s", + lock->lk->filename.buf); + rollback_lock_file(&reflog_lock); + } else if (commit_lock_file(&reflog_lock)) { + status |= error("unable to commit reflog '%s' (%s)", + log_file, strerror(errno)); + } else if (update && commit_ref(lock)) { + status |= error("couldn't set %s", lock->ref_name); + } + } + free(log_file); + unlock_ref(lock); + return status; + + failure: + rollback_lock_file(&reflog_lock); + free(log_file); + unlock_ref(lock); + return -1; +} @@ -1,15 +1,6 @@ #ifndef REFS_H #define REFS_H -struct ref_lock { - char *ref_name; - char *orig_ref_name; - struct lock_file *lk; - unsigned char old_sha1[20]; - int lock_fd; - int force_write; -}; - /* * A ref_transaction represents a collection of ref updates * that should succeed or fail together. @@ -189,31 +180,13 @@ extern int is_branch(const char *refname); extern int peel_ref(const char *refname, unsigned char *sha1); /* - * Flags controlling lock_any_ref_for_update(), ref_transaction_update(), - * ref_transaction_create(), etc. + * Flags controlling ref_transaction_update(), ref_transaction_create(), etc. * REF_NODEREF: act on the ref directly, instead of dereferencing * symbolic references. - * REF_DELETING: tolerate broken refs * - * Flags >= 0x100 are reserved for internal use. + * Other flags are reserved for internal use. */ #define REF_NODEREF 0x01 -#define REF_DELETING 0x02 -/* - * This function sets errno to something meaningful on failure. - */ -extern struct ref_lock *lock_any_ref_for_update(const char *refname, - const unsigned char *old_sha1, - int flags, int *type_p); - -/** Close the file descriptor owned by a lock and return the status */ -extern int close_ref(struct ref_lock *lock); - -/** Close and commit the ref locked by the lock */ -extern int commit_ref(struct ref_lock *lock); - -/** Release any lock taken but not written. **/ -extern void unlock_ref(struct ref_lock *lock); /* * Setup reflog before using. Set errno to something meaningful on failure. @@ -282,57 +255,95 @@ enum action_on_err { struct ref_transaction *ref_transaction_begin(struct strbuf *err); /* - * The following functions add a reference check or update to a - * ref_transaction. In all of them, refname is the name of the - * reference to be affected. The functions make internal copies of - * refname and msg, so the caller retains ownership of these parameters. - * flags can be REF_NODEREF; it is passed to update_ref_lock(). + * Reference transaction updates + * + * The following four functions add a reference check or update to a + * ref_transaction. They have some common similar parameters: + * + * transaction -- a pointer to an open ref_transaction, obtained + * from ref_transaction_begin(). + * + * refname -- the name of the reference to be affected. + * + * flags -- flags affecting the update, passed to + * update_ref_lock(). Can be REF_NODEREF, which means that + * symbolic references should not be followed. + * + * msg -- a message describing the change (for the reflog). + * + * err -- a strbuf for receiving a description of any error that + * might have occured. + * + * The functions make internal copies of refname and msg, so the + * caller retains ownership of these parameters. + * + * The functions return 0 on success and non-zero on failure. A + * failure means that the transaction as a whole has failed and needs + * to be rolled back. */ /* - * Add a reference update to transaction. new_sha1 is the value that - * the reference should have after the update, or zeros if it should - * be deleted. If have_old is true, then old_sha1 holds the value - * that the reference should have had before the update, or zeros if - * it must not have existed beforehand. - * Function returns 0 on success and non-zero on failure. A failure to update - * means that the transaction as a whole has failed and will need to be - * rolled back. + * Add a reference update to transaction. new_sha1 is the value that + * the reference should have after the update, or null_sha1 if it + * should be deleted. If new_sha1 is NULL, then the reference is not + * changed at all. old_sha1 is the value that the reference must have + * before the update, or null_sha1 if it must not have existed + * beforehand. The old value is checked after the lock is taken to + * prevent races. If the old value doesn't agree with old_sha1, the + * whole transaction fails. If old_sha1 is NULL, then the previous + * value is not checked. + * + * See the above comment "Reference transaction updates" for more + * information. */ int ref_transaction_update(struct ref_transaction *transaction, const char *refname, const unsigned char *new_sha1, const unsigned char *old_sha1, - int flags, int have_old, const char *msg, + unsigned int flags, const char *msg, struct strbuf *err); /* - * Add a reference creation to transaction. new_sha1 is the value - * that the reference should have after the update; it must not be the - * null SHA-1. It is verified that the reference does not exist + * Add a reference creation to transaction. new_sha1 is the value that + * the reference should have after the update; it must not be + * null_sha1. It is verified that the reference does not exist * already. - * Function returns 0 on success and non-zero on failure. A failure to create - * means that the transaction as a whole has failed and will need to be - * rolled back. + * + * See the above comment "Reference transaction updates" for more + * information. */ int ref_transaction_create(struct ref_transaction *transaction, const char *refname, const unsigned char *new_sha1, - int flags, const char *msg, + unsigned int flags, const char *msg, struct strbuf *err); /* - * Add a reference deletion to transaction. If have_old is true, then - * old_sha1 holds the value that the reference should have had before - * the update (which must not be the null SHA-1). - * Function returns 0 on success and non-zero on failure. A failure to delete - * means that the transaction as a whole has failed and will need to be - * rolled back. + * Add a reference deletion to transaction. If old_sha1 is non-NULL, + * then it holds the value that the reference should have had before + * the update (which must not be null_sha1). + * + * See the above comment "Reference transaction updates" for more + * information. */ int ref_transaction_delete(struct ref_transaction *transaction, const char *refname, const unsigned char *old_sha1, - int flags, int have_old, const char *msg, + unsigned int flags, const char *msg, + struct strbuf *err); + +/* + * Verify, within a transaction, that refname has the value old_sha1, + * or, if old_sha1 is null_sha1, then verify that the reference + * doesn't exist. old_sha1 must be non-NULL. + * + * See the above comment "Reference transaction updates" for more + * information. + */ +int ref_transaction_verify(struct ref_transaction *transaction, + const char *refname, + const unsigned char *old_sha1, + unsigned int flags, struct strbuf *err); /* @@ -353,12 +364,65 @@ int ref_transaction_commit(struct ref_transaction *transaction, */ void ref_transaction_free(struct ref_transaction *transaction); -/** Lock a ref and then write its file */ -int update_ref(const char *action, const char *refname, - const unsigned char *sha1, const unsigned char *oldval, - int flags, enum action_on_err onerr); +/** + * Lock, update, and unlock a single reference. This function + * basically does a transaction containing a single call to + * ref_transaction_update(). The parameters to this function have the + * same meaning as the corresponding parameters to + * ref_transaction_update(). Handle errors as requested by the `onerr` + * argument. + */ +int update_ref(const char *msg, const char *refname, + const unsigned char *new_sha1, const unsigned char *old_sha1, + unsigned int flags, enum action_on_err onerr); extern int parse_hide_refs_config(const char *var, const char *value, const char *); extern int ref_is_hidden(const char *); +enum expire_reflog_flags { + EXPIRE_REFLOGS_DRY_RUN = 1 << 0, + EXPIRE_REFLOGS_UPDATE_REF = 1 << 1, + EXPIRE_REFLOGS_VERBOSE = 1 << 2, + EXPIRE_REFLOGS_REWRITE = 1 << 3 +}; + +/* + * The following interface is used for reflog expiration. The caller + * calls reflog_expire(), supplying it with three callback functions, + * of the following types. The callback functions define the + * expiration policy that is desired. + * + * reflog_expiry_prepare_fn -- Called once after the reference is + * locked. + * + * reflog_expiry_should_prune_fn -- Called once for each entry in the + * existing reflog. It should return true iff that entry should be + * pruned. + * + * reflog_expiry_cleanup_fn -- Called once before the reference is + * unlocked again. + */ +typedef void reflog_expiry_prepare_fn(const char *refname, + const unsigned char *sha1, + void *cb_data); +typedef int reflog_expiry_should_prune_fn(unsigned char *osha1, + unsigned char *nsha1, + const char *email, + unsigned long timestamp, int tz, + const char *message, void *cb_data); +typedef void reflog_expiry_cleanup_fn(void *cb_data); + +/* + * Expire reflog entries for the specified reference. sha1 is the old + * value of the reference. flags is a combination of the constants in + * enum expire_reflog_flags. The three function pointers are described + * above. On success, return zero. + */ +extern int reflog_expire(const char *refname, const unsigned char *sha1, + unsigned int flags, + reflog_expiry_prepare_fn prepare_fn, + reflog_expiry_should_prune_fn should_prune_fn, + reflog_expiry_cleanup_fn cleanup_fn, + void *policy_cb_data); + #endif /* REFS_H */ diff --git a/remote-curl.c b/remote-curl.c index 696a5ecf05..af7b6786dc 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -961,6 +961,8 @@ int main(int argc, const char **argv) struct strbuf buf = STRBUF_INIT; int nongit; + git_setup_gettext(); + git_extract_argv0_path(argv[0]); setup_git_directory_gently(&nongit); if (argc < 2) { @@ -2156,7 +2156,7 @@ struct ref *get_stale_heads(struct refspec *refs, int ref_count, struct ref *fet /* * Compare-and-swap */ -void clear_cas_option(struct push_cas_option *cas) +static void clear_cas_option(struct push_cas_option *cas) { int i; @@ -115,7 +115,8 @@ struct ref { REF_STATUS_REJECT_SHALLOW, REF_STATUS_UPTODATE, REF_STATUS_REMOTE_REJECT, - REF_STATUS_EXPECTING_REPORT + REF_STATUS_EXPECTING_REPORT, + REF_STATUS_ATOMIC_PUSH_FAILED } status; char *remote_status; struct ref *peer_ref; /* when renaming */ @@ -260,7 +261,6 @@ struct push_cas_option { extern int parseopt_push_cas_option(const struct option *, const char *arg, int unset); extern int parse_push_cas_option(struct push_cas_option *, const char *arg, int unset); -extern void clear_cas_option(struct push_cas_option *); extern int is_empty_cas(const struct push_cas_option *); void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *); diff --git a/revision.c b/revision.c index 86406a26a2..6399a0412c 100644 --- a/revision.c +++ b/revision.c @@ -2017,6 +2017,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg grep_set_pattern_type_option(GREP_PATTERN_TYPE_PCRE, &revs->grep_filter); } else if (!strcmp(arg, "--all-match")) { revs->grep_filter.all_match = 1; + } else if (!strcmp(arg, "--invert-grep")) { + revs->invert_grep = 1; } else if ((argcount = parse_long_opt("encoding", argv, &optarg))) { if (strcmp(optarg, "none")) git_log_output_encoding = xstrdup(optarg); @@ -2337,9 +2339,14 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, struct s if (revs->reflog_info && revs->graph) die("cannot combine --walk-reflogs with --graph"); + if (revs->no_walk && revs->graph) + die("cannot combine --no-walk with --graph"); if (!revs->reflog_info && revs->grep_filter.use_reflog_filter) die("cannot use --grep-reflog without --walk-reflogs"); + if (revs->first_parent_only && revs->bisect) + die(_("--first-parent is incompatible with --bisect")); + return left; } @@ -2915,7 +2922,7 @@ static int commit_match(struct commit *commit, struct rev_info *opt) (char *)message, strlen(message)); strbuf_release(&buf); unuse_commit_buffer(commit, message); - return retval; + return opt->invert_grep ? !retval : retval; } static inline int want_ancestry(const struct rev_info *revs) @@ -2968,6 +2975,61 @@ enum commit_action get_commit_action(struct rev_info *revs, struct commit *commi return commit_show; } +define_commit_slab(saved_parents, struct commit_list *); + +#define EMPTY_PARENT_LIST ((struct commit_list *)-1) + +/* + * You may only call save_parents() once per commit (this is checked + * for non-root commits). + */ +static void save_parents(struct rev_info *revs, struct commit *commit) +{ + struct commit_list **pp; + + if (!revs->saved_parents_slab) { + revs->saved_parents_slab = xmalloc(sizeof(struct saved_parents)); + init_saved_parents(revs->saved_parents_slab); + } + + pp = saved_parents_at(revs->saved_parents_slab, commit); + + /* + * When walking with reflogs, we may visit the same commit + * several times: once for each appearance in the reflog. + * + * In this case, save_parents() will be called multiple times. + * We want to keep only the first set of parents. We need to + * store a sentinel value for an empty (i.e., NULL) parent + * list to distinguish it from a not-yet-saved list, however. + */ + if (*pp) + return; + if (commit->parents) + *pp = copy_commit_list(commit->parents); + else + *pp = EMPTY_PARENT_LIST; +} + +static void free_saved_parents(struct rev_info *revs) +{ + if (revs->saved_parents_slab) + clear_saved_parents(revs->saved_parents_slab); +} + +struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit) +{ + struct commit_list *parents; + + if (!revs->saved_parents_slab) + return commit->parents; + + parents = *saved_parents_at(revs->saved_parents_slab, commit); + if (parents == EMPTY_PARENT_LIST) + return NULL; + return parents; +} + enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit) { enum commit_action action = get_commit_action(revs, commit); @@ -3267,54 +3329,3 @@ void put_revision_mark(const struct rev_info *revs, const struct commit *commit) fputs(mark, stdout); putchar(' '); } - -define_commit_slab(saved_parents, struct commit_list *); - -#define EMPTY_PARENT_LIST ((struct commit_list *)-1) - -void save_parents(struct rev_info *revs, struct commit *commit) -{ - struct commit_list **pp; - - if (!revs->saved_parents_slab) { - revs->saved_parents_slab = xmalloc(sizeof(struct saved_parents)); - init_saved_parents(revs->saved_parents_slab); - } - - pp = saved_parents_at(revs->saved_parents_slab, commit); - - /* - * When walking with reflogs, we may visit the same commit - * several times: once for each appearance in the reflog. - * - * In this case, save_parents() will be called multiple times. - * We want to keep only the first set of parents. We need to - * store a sentinel value for an empty (i.e., NULL) parent - * list to distinguish it from a not-yet-saved list, however. - */ - if (*pp) - return; - if (commit->parents) - *pp = copy_commit_list(commit->parents); - else - *pp = EMPTY_PARENT_LIST; -} - -struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit) -{ - struct commit_list *parents; - - if (!revs->saved_parents_slab) - return commit->parents; - - parents = *saved_parents_at(revs->saved_parents_slab, commit); - if (parents == EMPTY_PARENT_LIST) - return NULL; - return parents; -} - -void free_saved_parents(struct rev_info *revs) -{ - if (revs->saved_parents_slab) - clear_saved_parents(revs->saved_parents_slab); -} diff --git a/revision.h b/revision.h index 033a24460e..0ea8b4e255 100644 --- a/revision.h +++ b/revision.h @@ -169,6 +169,8 @@ struct rev_info { /* Filter by commit log message */ struct grep_opt grep_filter; + /* Negate the match of grep_filter */ + int invert_grep; /* Display history graph */ struct git_graph *graph; @@ -298,18 +300,14 @@ extern int rewrite_parents(struct rev_info *revs, struct commit *commit, rewrite_parent_fn_t rewrite_parent); /* - * Save a copy of the parent list, and return the saved copy. This is - * used by the log machinery to retrieve the original parents when - * commit->parents has been modified by history simpification. - * - * You may only call save_parents() once per commit (this is checked - * for non-root commits). + * The log machinery saves the original parent list so that + * get_saved_parents() can later tell what the real parents of the + * commits are, when commit->parents has been modified by history + * simpification. * * get_saved_parents() will transparently return commit->parents if * history simplification is off. */ -extern void save_parents(struct rev_info *revs, struct commit *commit); extern struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit); -extern void free_saved_parents(struct rev_info *revs); #endif diff --git a/run-command.c b/run-command.c index 0b432cc971..aad03ab705 100644 --- a/run-command.c +++ b/run-command.c @@ -4,10 +4,6 @@ #include "sigchain.h" #include "argv-array.h" -#ifndef SHELL_PATH -# define SHELL_PATH "/bin/sh" -#endif - void child_process_init(struct child_process *child) { memset(child, 0, sizeof(*child)); @@ -561,7 +557,12 @@ int finish_command(struct child_process *cmd) int run_command(struct child_process *cmd) { - int code = start_command(cmd); + int code; + + if (cmd->out < 0 || cmd->err < 0) + die("BUG: run_command with a pipe can cause deadlock"); + + code = start_command(cmd); if (code) return code; return finish_command(cmd); @@ -833,3 +834,19 @@ int run_hook_le(const char *const *env, const char *name, ...) return ret; } + +int capture_command(struct child_process *cmd, struct strbuf *buf, size_t hint) +{ + cmd->out = -1; + if (start_command(cmd) < 0) + return -1; + + if (strbuf_read(buf, cmd->out, hint) < 0) { + close(cmd->out); + finish_command(cmd); /* throw away exit code */ + return -1; + } + + close(cmd->out); + return finish_command(cmd); +} diff --git a/run-command.h b/run-command.h index d6868dc8c8..263b9662ad 100644 --- a/run-command.h +++ b/run-command.h @@ -71,6 +71,19 @@ int run_command_v_opt(const char **argv, int opt); */ int run_command_v_opt_cd_env(const char **argv, int opt, const char *dir, const char *const *env); +/** + * Execute the given command, capturing its stdout in the given strbuf. + * Returns -1 if starting the command fails or reading fails, and otherwise + * returns the exit code of the command. The output collected in the + * buffer is kept even if the command returns a non-zero exit. The hint field + * gives a starting size for the strbuf allocation. + * + * The fields of "cmd" should be set up as they would for a normal run_command + * invocation. But note that there is no need to set cmd->out; the function + * sets it up for the caller. + */ +int capture_command(struct child_process *cmd, struct strbuf *buf, size_t hint); + /* * The purpose of the following functions is to feed a pipe by running * a function asynchronously and providing output that the caller reads. diff --git a/send-pack.c b/send-pack.c index 25947d7df9..9d2b0c52ed 100644 --- a/send-pack.c +++ b/send-pack.c @@ -193,10 +193,13 @@ static void advertise_shallow_grafts_buf(struct strbuf *sb) for_each_commit_graft(advertise_shallow_grafts_cb, sb); } -static int ref_update_to_be_sent(const struct ref *ref, const struct send_pack_args *args) +#define CHECK_REF_NO_PUSH -1 +#define CHECK_REF_STATUS_REJECTED -2 +#define CHECK_REF_UPTODATE -3 +static int check_to_send_update(const struct ref *ref, const struct send_pack_args *args) { if (!ref->peer_ref && !args->send_mirror) - return 0; + return CHECK_REF_NO_PUSH; /* Check for statuses set by set_ref_status_for_push() */ switch (ref->status) { @@ -206,10 +209,11 @@ static int ref_update_to_be_sent(const struct ref *ref, const struct send_pack_a case REF_STATUS_REJECT_NEEDS_FORCE: case REF_STATUS_REJECT_STALE: case REF_STATUS_REJECT_NODELETE: + return CHECK_REF_STATUS_REJECTED; case REF_STATUS_UPTODATE: - return 0; + return CHECK_REF_UPTODATE; default: - return 1; + return 0; } } @@ -253,7 +257,7 @@ static int generate_push_cert(struct strbuf *req_buf, strbuf_addstr(&cert, "\n"); for (ref = remote_refs; ref; ref = ref->next) { - if (!ref_update_to_be_sent(ref, args)) + if (check_to_send_update(ref, args) < 0) continue; update_seen = 1; strbuf_addf(&cert, "%s %s %s\n", @@ -281,6 +285,29 @@ free_return: return update_seen; } + +static int atomic_push_failure(struct send_pack_args *args, + struct ref *remote_refs, + struct ref *failing_ref) +{ + struct ref *ref; + /* Mark other refs as failed */ + for (ref = remote_refs; ref; ref = ref->next) { + if (!ref->peer_ref && !args->send_mirror) + continue; + + switch (ref->status) { + case REF_STATUS_EXPECTING_REPORT: + ref->status = REF_STATUS_ATOMIC_PUSH_FAILED; + continue; + default: + break; /* do nothing */ + } + } + return error("atomic push failed for ref %s. status: %d\n", + failing_ref->name, failing_ref->status); +} + int send_pack(struct send_pack_args *args, int fd[], struct child_process *conn, struct ref *remote_refs, @@ -297,6 +324,8 @@ int send_pack(struct send_pack_args *args, int use_sideband = 0; int quiet_supported = 0; int agent_supported = 0; + int use_atomic = 0; + int atomic_supported = 0; unsigned cmds_sent = 0; int ret; struct async demux; @@ -317,6 +346,8 @@ int send_pack(struct send_pack_args *args, agent_supported = 1; if (server_supports("no-thin")) args->use_thin_pack = 0; + if (server_supports("atomic")) + atomic_supported = 1; if (args->push_cert) { int len; @@ -331,6 +362,10 @@ int send_pack(struct send_pack_args *args, "Perhaps you should specify a branch such as 'master'.\n"); return 0; } + if (args->atomic && !atomic_supported) + die(_("server does not support --atomic push")); + + use_atomic = atomic_supported && args->atomic; if (status_report) strbuf_addstr(&cap_buf, " report-status"); @@ -338,6 +373,8 @@ int send_pack(struct send_pack_args *args, strbuf_addstr(&cap_buf, " side-band-64k"); if (quiet_supported && (args->quiet || !args->progress)) strbuf_addstr(&cap_buf, " quiet"); + if (use_atomic) + strbuf_addstr(&cap_buf, " atomic"); if (agent_supported) strbuf_addf(&cap_buf, " agent=%s", git_user_agent_sanitized()); @@ -362,9 +399,21 @@ int send_pack(struct send_pack_args *args, * the pack data. */ for (ref = remote_refs; ref; ref = ref->next) { - if (!ref_update_to_be_sent(ref, args)) + switch (check_to_send_update(ref, args)) { + case 0: /* no error */ + break; + case CHECK_REF_STATUS_REJECTED: + /* + * When we know the server would reject a ref update if + * we were to send it and we're trying to send the refs + * atomically, abort the whole operation. + */ + if (use_atomic) + return atomic_push_failure(args, remote_refs, ref); + /* Fallthrough for non atomic case. */ + default: continue; - + } if (!ref->deletion) need_pack_data = 1; @@ -383,7 +432,7 @@ int send_pack(struct send_pack_args *args, if (args->dry_run || args->push_cert) continue; - if (!ref_update_to_be_sent(ref, args)) + if (check_to_send_update(ref, args) < 0) continue; old_hex = sha1_to_hex(ref->old_sha1); diff --git a/send-pack.h b/send-pack.h index 5635457746..b6646488aa 100644 --- a/send-pack.h +++ b/send-pack.h @@ -13,7 +13,8 @@ struct send_pack_args { use_ofs_delta:1, dry_run:1, push_cert:1, - stateless_rpc:1; + stateless_rpc:1, + atomic:1; }; int send_pack(struct send_pack_args *args, diff --git a/sequencer.c b/sequencer.c index 77a1266760..c4f4b7d571 100644 --- a/sequencer.c +++ b/sequencer.c @@ -252,7 +252,7 @@ static int fast_forward_to(const unsigned char *to, const unsigned char *from, if (!transaction || ref_transaction_update(transaction, "HEAD", to, unborn ? null_sha1 : from, - 0, 1, sb.buf, &err) || + 0, sb.buf, &err) || ref_transaction_commit(transaction, &err)) { ref_transaction_free(transaction); error("%s", err.buf); @@ -373,6 +373,7 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts, { struct argv_array array; int rc; + const char *value; argv_array_init(&array); argv_array_push(&array, "commit"); @@ -385,6 +386,10 @@ static int run_git_commit(const char *defmsg, struct replay_opts *opts, if (!opts->edit) { argv_array_push(&array, "-F"); argv_array_push(&array, defmsg); + if (!opts->signoff && + !opts->record_origin && + git_config_get_value("commit.cleanup", &value)) + argv_array_push(&array, "--cleanup=verbatim"); } if (allow_empty) @@ -137,7 +137,7 @@ struct commit_list *get_shallow_commits(struct object_array *heads, int depth, return result; } -void check_shallow_file_for_update(void) +static void check_shallow_file_for_update(void) { if (is_shallow == -1) die("BUG: shallow must be initialized by now"); @@ -1,22 +1,112 @@ #ifndef STRBUF_H #define STRBUF_H -/* See Documentation/technical/api-strbuf.txt */ +/** + * strbuf's are meant to be used with all the usual C string and memory + * APIs. Given that the length of the buffer is known, it's often better to + * use the mem* functions than a str* one (memchr vs. strchr e.g.). + * Though, one has to be careful about the fact that str* functions often + * stop on NULs and that strbufs may have embedded NULs. + * + * A strbuf is NUL terminated for convenience, but no function in the + * strbuf API actually relies on the string being free of NULs. + * + * strbufs have some invariants that are very important to keep in mind: + * + * - The `buf` member is never NULL, so it can be used in any usual C + * string operations safely. strbuf's _have_ to be initialized either by + * `strbuf_init()` or by `= STRBUF_INIT` before the invariants, though. + * + * Do *not* assume anything on what `buf` really is (e.g. if it is + * allocated memory or not), use `strbuf_detach()` to unwrap a memory + * buffer from its strbuf shell in a safe way. That is the sole supported + * way. This will give you a malloced buffer that you can later `free()`. + * + * However, it is totally safe to modify anything in the string pointed by + * the `buf` member, between the indices `0` and `len-1` (inclusive). + * + * - The `buf` member is a byte array that has at least `len + 1` bytes + * allocated. The extra byte is used to store a `'\0'`, allowing the + * `buf` member to be a valid C-string. Every strbuf function ensure this + * invariant is preserved. + * + * NOTE: It is OK to "play" with the buffer directly if you work it this + * way: + * + * strbuf_grow(sb, SOME_SIZE); <1> + * strbuf_setlen(sb, sb->len + SOME_OTHER_SIZE); + * + * <1> Here, the memory array starting at `sb->buf`, and of length + * `strbuf_avail(sb)` is all yours, and you can be sure that + * `strbuf_avail(sb)` is at least `SOME_SIZE`. + * + * NOTE: `SOME_OTHER_SIZE` must be smaller or equal to `strbuf_avail(sb)`. + * + * Doing so is safe, though if it has to be done in many places, adding the + * missing API to the strbuf module is the way to go. + * + * WARNING: Do _not_ assume that the area that is yours is of size `alloc + * - 1` even if it's true in the current implementation. Alloc is somehow a + * "private" member that should not be messed with. Use `strbuf_avail()` + * instead. +*/ + +/** + * Data Structures + * --------------- + */ -extern char strbuf_slopbuf[]; +/** + * This is the string buffer structure. The `len` member can be used to + * determine the current length of the string, and `buf` member provides + * access to the string itself. + */ struct strbuf { size_t alloc; size_t len; char *buf; }; +extern char strbuf_slopbuf[]; #define STRBUF_INIT { 0, 0, strbuf_slopbuf } -/*----- strbuf life cycle -----*/ +/** + * Life Cycle Functions + * -------------------- + */ + +/** + * Initialize the structure. The second parameter can be zero or a bigger + * number to allocate memory, in case you want to prevent further reallocs. + */ extern void strbuf_init(struct strbuf *, size_t); + +/** + * Release a string buffer and the memory it used. You should not use the + * string buffer after using this function, unless you initialize it again. + */ extern void strbuf_release(struct strbuf *); + +/** + * Detach the string from the strbuf and returns it; you now own the + * storage the string occupies and it is your responsibility from then on + * to release it with `free(3)` when you are done with it. + */ extern char *strbuf_detach(struct strbuf *, size_t *); + +/** + * Attach a string to a buffer. You should specify the string to attach, + * the current length of the string and the amount of allocated memory. + * The amount must be larger than the string length, because the string you + * pass is supposed to be a NUL-terminated string. This string _must_ be + * malloc()ed, and after attaching, the pointer cannot be relied upon + * anymore, and neither be free()d directly. + */ extern void strbuf_attach(struct strbuf *, void *, size_t, size_t); + +/** + * Swap the contents of two string buffers. + */ static inline void strbuf_swap(struct strbuf *a, struct strbuf *b) { struct strbuf tmp = *a; @@ -24,14 +114,36 @@ static inline void strbuf_swap(struct strbuf *a, struct strbuf *b) *b = tmp; } -/*----- strbuf size related -----*/ + +/** + * Functions related to the size of the buffer + * ------------------------------------------- + */ + +/** + * Determine the amount of allocated but unused memory. + */ static inline size_t strbuf_avail(const struct strbuf *sb) { return sb->alloc ? sb->alloc - sb->len - 1 : 0; } +/** + * Ensure that at least this amount of unused memory is available after + * `len`. This is used when you know a typical size for what you will add + * and want to avoid repetitive automatic resizing of the underlying buffer. + * This is never a needed operation, but can be critical for performance in + * some cases. + */ extern void strbuf_grow(struct strbuf *, size_t); +/** + * Set the length of the buffer to a given value. This function does *not* + * allocate new memory, so you should not perform a `strbuf_setlen()` to a + * length that is larger than `len + strbuf_avail()`. `strbuf_setlen()` is + * just meant as a 'please fix invariants from this strbuf I just messed + * with'. + */ static inline void strbuf_setlen(struct strbuf *sb, size_t len) { if (len > (sb->alloc ? sb->alloc - 1 : 0)) @@ -39,78 +151,58 @@ static inline void strbuf_setlen(struct strbuf *sb, size_t len) sb->len = len; sb->buf[len] = '\0'; } + +/** + * Empty the buffer by setting the size of it to zero. + */ #define strbuf_reset(sb) strbuf_setlen(sb, 0) -/*----- content related -----*/ + +/** + * Functions related to the contents of the buffer + * ----------------------------------------------- + */ + +/** + * Strip whitespace from the beginning (`ltrim`), end (`rtrim`), or both side + * (`trim`) of a string. + */ extern void strbuf_trim(struct strbuf *); extern void strbuf_rtrim(struct strbuf *); extern void strbuf_ltrim(struct strbuf *); -extern int strbuf_reencode(struct strbuf *sb, const char *from, const char *to); -extern void strbuf_tolower(struct strbuf *sb); -extern int strbuf_cmp(const struct strbuf *, const struct strbuf *); -static inline int strbuf_strip_suffix(struct strbuf *sb, const char *suffix) -{ - if (strip_suffix_mem(sb->buf, &sb->len, suffix)) { - strbuf_setlen(sb, sb->len); - return 1; - } else - return 0; -} - -/* - * Split str (of length slen) at the specified terminator character. - * Return a null-terminated array of pointers to strbuf objects - * holding the substrings. The substrings include the terminator, - * except for the last substring, which might be unterminated if the - * original string did not end with a terminator. If max is positive, - * then split the string into at most max substrings (with the last - * substring containing everything following the (max-1)th terminator - * character). - * - * For lighter-weight alternatives, see string_list_split() and - * string_list_split_in_place(). +/** + * Replace the contents of the strbuf with a reencoded form. Returns -1 + * on error, 0 on success. */ -extern struct strbuf **strbuf_split_buf(const char *, size_t, - int terminator, int max); +extern int strbuf_reencode(struct strbuf *sb, const char *from, const char *to); -/* - * Split a NUL-terminated string at the specified terminator - * character. See strbuf_split_buf() for more information. +/** + * Lowercase each character in the buffer using `tolower`. */ -static inline struct strbuf **strbuf_split_str(const char *str, - int terminator, int max) -{ - return strbuf_split_buf(str, strlen(str), terminator, max); -} +extern void strbuf_tolower(struct strbuf *sb); -/* - * Split a strbuf at the specified terminator character. See - * strbuf_split_buf() for more information. +/** + * Compare two buffers. Returns an integer less than, equal to, or greater + * than zero if the first buffer is found, respectively, to be less than, + * to match, or be greater than the second buffer. */ -static inline struct strbuf **strbuf_split_max(const struct strbuf *sb, - int terminator, int max) -{ - return strbuf_split_buf(sb->buf, sb->len, terminator, max); -} +extern int strbuf_cmp(const struct strbuf *, const struct strbuf *); -/* - * Split a strbuf at the specified terminator character. See - * strbuf_split_buf() for more information. - */ -static inline struct strbuf **strbuf_split(const struct strbuf *sb, - int terminator) -{ - return strbuf_split_max(sb, terminator, 0); -} -/* - * Free a NULL-terminated list of strbufs (for example, the return - * values of the strbuf_split*() functions). +/** + * Adding data to the buffer + * ------------------------- + * + * NOTE: All of the functions in this section will grow the buffer as + * necessary. If they fail for some reason other than memory shortage and the + * buffer hadn't been allocated before (i.e. the `struct strbuf` was set to + * `STRBUF_INIT`), then they will free() it. */ -extern void strbuf_list_free(struct strbuf **); -/*----- add data in your buffer -----*/ +/** + * Add a single character to the buffer. + */ static inline void strbuf_addch(struct strbuf *sb, int c) { strbuf_grow(sb, 1); @@ -118,47 +210,276 @@ static inline void strbuf_addch(struct strbuf *sb, int c) sb->buf[sb->len] = '\0'; } +/** + * Add a character the specified number of times to the buffer. + */ +extern void strbuf_addchars(struct strbuf *sb, int c, size_t n); + +/** + * Insert data to the given position of the buffer. The remaining contents + * will be shifted, not overwritten. + */ extern void strbuf_insert(struct strbuf *, size_t pos, const void *, size_t); + +/** + * Remove given amount of data from a given position of the buffer. + */ extern void strbuf_remove(struct strbuf *, size_t pos, size_t len); -/* splice pos..pos+len with given data */ +/** + * Remove the bytes between `pos..pos+len` and replace it with the given + * data. + */ extern void strbuf_splice(struct strbuf *, size_t pos, size_t len, - const void *, size_t); + const void *, size_t); +/** + * Add a NUL-terminated string to the buffer. Each line will be prepended + * by a comment character and a blank. + */ extern void strbuf_add_commented_lines(struct strbuf *out, const char *buf, size_t size); + +/** + * Add data of given length to the buffer. + */ extern void strbuf_add(struct strbuf *, const void *, size_t); + +/** + * Add a NUL-terminated string to the buffer. + * + * NOTE: This function will *always* be implemented as an inline or a macro + * using strlen, meaning that this is efficient to write things like: + * + * strbuf_addstr(sb, "immediate string"); + * + */ static inline void strbuf_addstr(struct strbuf *sb, const char *s) { strbuf_add(sb, s, strlen(s)); } + +/** + * Copy the contents of another buffer at the end of the current one. + */ static inline void strbuf_addbuf(struct strbuf *sb, const struct strbuf *sb2) { strbuf_grow(sb, sb2->len); strbuf_add(sb, sb2->buf, sb2->len); } + +/** + * Copy part of the buffer from a given position till a given length to the + * end of the buffer. + */ extern void strbuf_adddup(struct strbuf *sb, size_t pos, size_t len); -extern void strbuf_addchars(struct strbuf *sb, int c, size_t n); +/** + * This function can be used to expand a format string containing + * placeholders. To that end, it parses the string and calls the specified + * function for every percent sign found. + * + * The callback function is given a pointer to the character after the `%` + * and a pointer to the struct strbuf. It is expected to add the expanded + * version of the placeholder to the strbuf, e.g. to add a newline + * character if the letter `n` appears after a `%`. The function returns + * the length of the placeholder recognized and `strbuf_expand()` skips + * over it. + * + * The format `%%` is automatically expanded to a single `%` as a quoting + * mechanism; callers do not need to handle the `%` placeholder themselves, + * and the callback function will not be invoked for this placeholder. + * + * All other characters (non-percent and not skipped ones) are copied + * verbatim to the strbuf. If the callback returned zero, meaning that the + * placeholder is unknown, then the percent sign is copied, too. + * + * In order to facilitate caching and to make it possible to give + * parameters to the callback, `strbuf_expand()` passes a context pointer, + * which can be used by the programmer of the callback as she sees fit. + */ typedef size_t (*expand_fn_t) (struct strbuf *sb, const char *placeholder, void *context); extern void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn, void *context); + +/** + * Used as callback for `strbuf_expand()`, expects an array of + * struct strbuf_expand_dict_entry as context, i.e. pairs of + * placeholder and replacement string. The array needs to be + * terminated by an entry with placeholder set to NULL. + */ struct strbuf_expand_dict_entry { const char *placeholder; const char *value; }; extern size_t strbuf_expand_dict_cb(struct strbuf *sb, const char *placeholder, void *context); + +/** + * Append the contents of one strbuf to another, quoting any + * percent signs ("%") into double-percents ("%%") in the + * destination. This is useful for literal data to be fed to either + * strbuf_expand or to the *printf family of functions. + */ extern void strbuf_addbuf_percentquote(struct strbuf *dst, const struct strbuf *src); +/** + * Append the given byte size as a human-readable string (i.e. 12.23 KiB, + * 3.50 MiB). + */ +extern void strbuf_humanise_bytes(struct strbuf *buf, off_t bytes); + +/** + * Add a formatted string to the buffer. + */ __attribute__((format (printf,2,3))) extern void strbuf_addf(struct strbuf *sb, const char *fmt, ...); + +/** + * Add a formatted string prepended by a comment character and a + * blank to the buffer. + */ __attribute__((format (printf, 2, 3))) extern void strbuf_commented_addf(struct strbuf *sb, const char *fmt, ...); + __attribute__((format (printf,2,0))) extern void strbuf_vaddf(struct strbuf *sb, const char *fmt, va_list ap); +/** + * Read a given size of data from a FILE* pointer to the buffer. + * + * NOTE: The buffer is rewound if the read fails. If -1 is returned, + * `errno` must be consulted, like you would do for `read(3)`. + * `strbuf_read()`, `strbuf_read_file()` and `strbuf_getline()` has the + * same behaviour as well. + */ +extern size_t strbuf_fread(struct strbuf *, size_t, FILE *); + +/** + * Read the contents of a given file descriptor. The third argument can be + * used to give a hint about the file size, to avoid reallocs. If read fails, + * any partial read is undone. + */ +extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint); + +/** + * Read the contents of a file, specified by its path. The third argument + * can be used to give a hint about the file size, to avoid reallocs. + */ +extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint); + +/** + * Read the target of a symbolic link, specified by its path. The third + * argument can be used to give a hint about the size, to avoid reallocs. + */ +extern int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint); + +/** + * Read a line from a FILE *, overwriting the existing contents + * of the strbuf. The second argument specifies the line + * terminator character, typically `'\n'`. + * Reading stops after the terminator or at EOF. The terminator + * is removed from the buffer before returning. Returns 0 unless + * there was nothing left before EOF, in which case it returns `EOF`. + */ +extern int strbuf_getline(struct strbuf *, FILE *, int); + +/** + * Like `strbuf_getline`, but keeps the trailing terminator (if + * any) in the buffer. + */ +extern int strbuf_getwholeline(struct strbuf *, FILE *, int); + +/** + * Like `strbuf_getwholeline`, but operates on a file descriptor. + * It reads one character at a time, so it is very slow. Do not + * use it unless you need the correct position in the file + * descriptor. + */ +extern int strbuf_getwholeline_fd(struct strbuf *, int, int); + +/** + * Set the buffer to the path of the current working directory. + */ +extern int strbuf_getcwd(struct strbuf *sb); + +/** + * Add a path to a buffer, converting a relative path to an + * absolute one in the process. Symbolic links are not + * resolved. + */ +extern void strbuf_add_absolute_path(struct strbuf *sb, const char *path); + +/** + * Strip whitespace from a buffer. The second parameter controls if + * comments are considered contents to be removed or not. + */ +extern void stripspace(struct strbuf *buf, int skip_comments); + +static inline int strbuf_strip_suffix(struct strbuf *sb, const char *suffix) +{ + if (strip_suffix_mem(sb->buf, &sb->len, suffix)) { + strbuf_setlen(sb, sb->len); + return 1; + } else + return 0; +} + +/** + * Split str (of length slen) at the specified terminator character. + * Return a null-terminated array of pointers to strbuf objects + * holding the substrings. The substrings include the terminator, + * except for the last substring, which might be unterminated if the + * original string did not end with a terminator. If max is positive, + * then split the string into at most max substrings (with the last + * substring containing everything following the (max-1)th terminator + * character). + * + * The most generic form is `strbuf_split_buf`, which takes an arbitrary + * pointer/len buffer. The `_str` variant takes a NUL-terminated string, + * the `_max` variant takes a strbuf, and just `strbuf_split` is a convenience + * wrapper to drop the `max` parameter. + * + * For lighter-weight alternatives, see string_list_split() and + * string_list_split_in_place(). + */ +extern struct strbuf **strbuf_split_buf(const char *, size_t, + int terminator, int max); + +static inline struct strbuf **strbuf_split_str(const char *str, + int terminator, int max) +{ + return strbuf_split_buf(str, strlen(str), terminator, max); +} + +static inline struct strbuf **strbuf_split_max(const struct strbuf *sb, + int terminator, int max) +{ + return strbuf_split_buf(sb->buf, sb->len, terminator, max); +} + +static inline struct strbuf **strbuf_split(const struct strbuf *sb, + int terminator) +{ + return strbuf_split_max(sb, terminator, 0); +} + +/** + * Free a NULL-terminated list of strbufs (for example, the return + * values of the strbuf_split*() functions). + */ +extern void strbuf_list_free(struct strbuf **); + +/** + * Launch the user preferred editor to edit a file and fill the buffer + * with the file's contents upon the user completing their editing. The + * third argument can be used to set the environment which the editor is + * run in. If the buffer is NULL the editor is launched as usual but the + * file's contents are not read into the buffer upon completion. + */ +extern int launch_editor(const char *path, struct strbuf *buffer, const char *const *env); + extern void strbuf_add_lines(struct strbuf *sb, const char *prefix, const char *buf, size_t size); -/* +/** * Append s to sb, with the characters '<', '>', '&' and '"' converted * into XML entities. */ @@ -170,28 +491,11 @@ static inline void strbuf_complete_line(struct strbuf *sb) strbuf_addch(sb, '\n'); } -extern size_t strbuf_fread(struct strbuf *, size_t, FILE *); -/* XXX: if read fails, any partial read is undone */ -extern ssize_t strbuf_read(struct strbuf *, int fd, size_t hint); -extern int strbuf_read_file(struct strbuf *sb, const char *path, size_t hint); -extern int strbuf_readlink(struct strbuf *sb, const char *path, size_t hint); -extern int strbuf_getcwd(struct strbuf *sb); - -extern int strbuf_getwholeline(struct strbuf *, FILE *, int); -extern int strbuf_getline(struct strbuf *, FILE *, int); -extern int strbuf_getwholeline_fd(struct strbuf *, int, int); - -extern void stripspace(struct strbuf *buf, int skip_comments); -extern int launch_editor(const char *path, struct strbuf *buffer, const char *const *env); - extern int strbuf_branchname(struct strbuf *sb, const char *name); extern int strbuf_check_branch_ref(struct strbuf *sb, const char *name); extern void strbuf_addstr_urlencode(struct strbuf *, const char *, int reserved); -extern void strbuf_humanise_bytes(struct strbuf *buf, off_t bytes); - -extern void strbuf_add_absolute_path(struct strbuf *sb, const char *path); __attribute__((format (printf,1,2))) extern int printf_ln(const char *fmt, ...); @@ -200,7 +504,7 @@ extern int fprintf_ln(FILE *fp, const char *fmt, ...); char *xstrdup_tolower(const char *); -/* +/** * Create a newly allocated string using printf format. You can do this easily * with a strbuf, but this provides a shortcut to save a few lines. */ diff --git a/submodule.c b/submodule.c index d37d400b22..c0e6c81fc4 100644 --- a/submodule.c +++ b/submodule.c @@ -576,12 +576,10 @@ static int is_submodule_commit_present(const char *path, unsigned char sha1[20]) cp.env = local_repo_env; cp.git_cmd = 1; cp.no_stdin = 1; - cp.out = -1; cp.dir = path; - if (!run_command(&cp) && !strbuf_read(&buf, cp.out, 1024)) + if (!capture_command(&cp, &buf, 1024) && !buf.len) is_present = 1; - close(cp.out); strbuf_release(&buf); } return is_present; @@ -168,6 +168,16 @@ appropriately before running "make". Using this option with a RAM-based filesystem (such as tmpfs) can massively speed up the test suite. +--chain-lint:: +--no-chain-lint:: + If --chain-lint is enabled, the test harness will check each + test to make sure that it properly "&&-chains" all commands (so + that a failure in the middle does not go unnoticed by the final + exit code of the test). This check is performed in addition to + running the tests themselves. You may also enable or disable + this feature by setting the GIT_TEST_CHAIN_LINT environment + variable to "1" or "0", respectively. + You can also set the GIT_TEST_INSTALLED environment variable to the bindir of an existing git installation to test that installation. You still need to have built this git sandbox, from which various diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh index 071e4d7d3e..f5c01758ca 100644 --- a/t/annotate-tests.sh +++ b/t/annotate-tests.sh @@ -405,7 +405,7 @@ test_expect_success 'setup -L :regex' ' mv hello.c hello.orig && echo "#include <stdio.h>" >hello.c && cat hello.orig >>hello.c && - tr Q "\\t" >>hello.c <<-\EOF + tr Q "\\t" >>hello.c <<-\EOF && void mail() { Qputs("mail"); diff --git a/t/lib-httpd.sh b/t/lib-httpd.sh index d154d1ed1d..e6adf2f82d 100644 --- a/t/lib-httpd.sh +++ b/t/lib-httpd.sh @@ -79,6 +79,7 @@ HTTPD_DOCUMENT_ROOT_PATH=$HTTPD_ROOT_PATH/www # hack to suppress apache PassEnv warnings GIT_VALGRIND=$GIT_VALGRIND; export GIT_VALGRIND GIT_VALGRIND_OPTIONS=$GIT_VALGRIND_OPTIONS; export GIT_VALGRIND_OPTIONS +GIT_TRACE=$GIT_TRACE; export GIT_TRACE if ! test -x "$LIB_HTTPD_PATH" then diff --git a/t/lib-httpd/apache.conf b/t/lib-httpd/apache.conf index 03a4c2ee84..0b81a0047b 100644 --- a/t/lib-httpd/apache.conf +++ b/t/lib-httpd/apache.conf @@ -70,6 +70,7 @@ PassEnv GIT_VALGRIND PassEnv GIT_VALGRIND_OPTIONS PassEnv GNUPGHOME PassEnv ASAN_OPTIONS +PassEnv GIT_TRACE Alias /dumb/ www/ Alias /auth/dumb/ www/auth/dumb/ diff --git a/t/lib-terminal.sh b/t/lib-terminal.sh index 51845491bb..cd220e378e 100644 --- a/t/lib-terminal.sh +++ b/t/lib-terminal.sh @@ -1,7 +1,7 @@ # Helpers for terminal output tests. # Catch tests which should depend on TTY but forgot to. There's no need -# to aditionally check that the TTY prereq is set here. If the test declared +# to additionally check that the TTY prereq is set here. If the test declared # it and we are running the test, then it must have been set. test_terminal () { if ! test_declared_prereq TTY diff --git a/t/perf/perf-lib.sh b/t/perf/perf-lib.sh index a8c9574291..5cf74eddec 100644 --- a/t/perf/perf-lib.sh +++ b/t/perf/perf-lib.sh @@ -91,7 +91,7 @@ test_perf_create_repo_from () { */objects|*/hooks|*/config) ;; *) - cp -R "$stuff" . || break + cp -R "$stuff" . || exit 1 ;; esac done && diff --git a/t/t0000-basic.sh b/t/t0000-basic.sh index f10ba4a01e..79b9074172 100755 --- a/t/t0000-basic.sh +++ b/t/t0000-basic.sh @@ -253,7 +253,7 @@ test_expect_success 'test --verbose' ' test_expect_success "failing test" false test_done EOF - mv test-verbose/out test-verbose/out+ + mv test-verbose/out test-verbose/out+ && grep -v "^Initialized empty" test-verbose/out+ >test-verbose/out && check_sub_test_lib_test test-verbose <<-\EOF > expecting success: true @@ -974,7 +974,7 @@ test_expect_success 'writing this tree with --missing-ok' ' ################################################################ test_expect_success 'git read-tree followed by write-tree should be idempotent' ' - rm -f .git/index + rm -f .git/index && git read-tree $tree && test -f .git/index && newtree=$(git write-tree) && diff --git a/t/t0005-signals.sh b/t/t0005-signals.sh index aeea50c633..e7f27ebbc1 100755 --- a/t/t0005-signals.sh +++ b/t/t0005-signals.sh @@ -10,8 +10,8 @@ one EOF test_expect_success 'sigchain works' ' - test-sigchain >actual - case "$?" in + { test-sigchain >actual; ret=$?; } && + case "$ret" in 143) true ;; # POSIX w/ SIGTERM=15 271) true ;; # ksh w/ SIGTERM=15 3) true ;; # Windows @@ -40,12 +40,12 @@ test_expect_success 'create blob' ' ' test_expect_success !MINGW 'a constipated git dies with SIGPIPE' ' - OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) + OUT=$( ((large_git; echo $? 1>&3) | :) 3>&1 ) && test "$OUT" -eq 141 ' test_expect_success !MINGW 'a constipated git dies with SIGPIPE even if parent ignores it' ' - OUT=$( ((trap "" PIPE; large_git; echo $? 1>&3) | :) 3>&1 ) + OUT=$( ((trap "" PIPE; large_git; echo $? 1>&3) | :) 3>&1 ) && test "$OUT" -eq 141 ' diff --git a/t/t0011-hashmap.sh b/t/t0011-hashmap.sh index f97c80556f..9c217d948c 100755 --- a/t/t0011-hashmap.sh +++ b/t/t0011-hashmap.sh @@ -218,7 +218,7 @@ test_expect_success 'grow / shrink' ' echo size >> in && echo 64 51 >> expect && echo put key52 value52 >> in && - echo NULL >> expect + echo NULL >> expect && echo size >> in && echo 256 52 >> expect && for n in $(test_seq 12) diff --git a/t/t0020-crlf.sh b/t/t0020-crlf.sh index d2e51a81bc..f94120a894 100755 --- a/t/t0020-crlf.sh +++ b/t/t0020-crlf.sh @@ -8,6 +8,13 @@ has_cr() { tr '\015' Q <"$1" | grep Q >/dev/null } +# add or remove CRs to disk file in-place +# usage: munge_cr <append|remove> <file> +munge_cr () { + "${1}_cr" <"$2" >tmp && + mv tmp "$2" +} + test_expect_success setup ' git config core.autocrlf false && @@ -28,9 +35,7 @@ test_expect_success setup ' for w in Some extra lines here; do echo $w; done >>one && git diff >patch.file && patched=$(git hash-object --stdin <one) && - git read-tree --reset -u HEAD && - - echo happy. + git read-tree --reset -u HEAD ' test_expect_success 'safecrlf: autocrlf=input, all CRLF' ' @@ -100,22 +105,11 @@ test_expect_success 'update with autocrlf=input' ' rm -f tmp one dir/two three && git read-tree --reset -u HEAD && git config core.autocrlf input && - - for f in one dir/two - do - append_cr <$f >tmp && mv -f tmp $f && - git update-index -- $f || { - echo Oops - false - break - } - done && - + munge_cr append one && + munge_cr append dir/two && + git update-index -- one dir/two && differs=$(git diff-index --cached HEAD) && - test -z "$differs" || { - echo Oops "$differs" - false - } + verbose test -z "$differs" ' @@ -124,22 +118,11 @@ test_expect_success 'update with autocrlf=true' ' rm -f tmp one dir/two three && git read-tree --reset -u HEAD && git config core.autocrlf true && - - for f in one dir/two - do - append_cr <$f >tmp && mv -f tmp $f && - git update-index -- $f || { - echo "Oops $f" - false - break - } - done && - + munge_cr append one && + munge_cr append dir/two && + git update-index -- one dir/two && differs=$(git diff-index --cached HEAD) && - test -z "$differs" || { - echo Oops "$differs" - false - } + verbose test -z "$differs" ' @@ -148,23 +131,13 @@ test_expect_success 'checkout with autocrlf=true' ' rm -f tmp one dir/two three && git config core.autocrlf true && git read-tree --reset -u HEAD && - - for f in one dir/two - do - remove_cr <"$f" >tmp && mv -f tmp $f && - git update-index -- $f || { - echo "Eh? $f" - false - break - } - done && + munge_cr remove one && + munge_cr remove dir/two && + git update-index -- one dir/two && test "$one" = $(git hash-object --stdin <one) && test "$two" = $(git hash-object --stdin <dir/two) && differs=$(git diff-index --cached HEAD) && - test -z "$differs" || { - echo Oops "$differs" - false - } + verbose test -z "$differs" ' test_expect_success 'checkout with autocrlf=input' ' @@ -172,25 +145,13 @@ test_expect_success 'checkout with autocrlf=input' ' rm -f tmp one dir/two three && git config core.autocrlf input && git read-tree --reset -u HEAD && - - for f in one dir/two - do - if has_cr "$f" - then - echo "Eh? $f" - false - break - else - git update-index -- $f - fi - done && + test_must_fail has_cr one && + test_must_fail has_cr two && + git update-index -- one dir/two && test "$one" = $(git hash-object --stdin <one) && test "$two" = $(git hash-object --stdin <dir/two) && differs=$(git diff-index --cached HEAD) && - test -z "$differs" || { - echo Oops "$differs" - false - } + verbose test -z "$differs" ' test_expect_success 'apply patch (autocrlf=input)' ' @@ -200,10 +161,7 @@ test_expect_success 'apply patch (autocrlf=input)' ' git read-tree --reset -u HEAD && git apply patch.file && - test "$patched" = "$(git hash-object --stdin <one)" || { - echo "Eh? apply without index" - false - } + verbose test "$patched" = "$(git hash-object --stdin <one)" ' test_expect_success 'apply patch --cached (autocrlf=input)' ' @@ -213,10 +171,7 @@ test_expect_success 'apply patch --cached (autocrlf=input)' ' git read-tree --reset -u HEAD && git apply --cached patch.file && - test "$patched" = $(git rev-parse :one) || { - echo "Eh? apply with --cached" - false - } + verbose test "$patched" = $(git rev-parse :one) ' test_expect_success 'apply patch --index (autocrlf=input)' ' @@ -226,11 +181,8 @@ test_expect_success 'apply patch --index (autocrlf=input)' ' git read-tree --reset -u HEAD && git apply --index patch.file && - test "$patched" = $(git rev-parse :one) && - test "$patched" = $(git hash-object --stdin <one) || { - echo "Eh? apply with --index" - false - } + verbose test "$patched" = $(git rev-parse :one) && + verbose test "$patched" = $(git hash-object --stdin <one) ' test_expect_success 'apply patch (autocrlf=true)' ' @@ -240,10 +192,7 @@ test_expect_success 'apply patch (autocrlf=true)' ' git read-tree --reset -u HEAD && git apply patch.file && - test "$patched" = "$(remove_cr <one | git hash-object --stdin)" || { - echo "Eh? apply without index" - false - } + verbose test "$patched" = "$(remove_cr <one | git hash-object --stdin)" ' test_expect_success 'apply patch --cached (autocrlf=true)' ' @@ -253,10 +202,7 @@ test_expect_success 'apply patch --cached (autocrlf=true)' ' git read-tree --reset -u HEAD && git apply --cached patch.file && - test "$patched" = $(git rev-parse :one) || { - echo "Eh? apply without index" - false - } + verbose test "$patched" = $(git rev-parse :one) ' test_expect_success 'apply patch --index (autocrlf=true)' ' @@ -266,11 +212,8 @@ test_expect_success 'apply patch --index (autocrlf=true)' ' git read-tree --reset -u HEAD && git apply --index patch.file && - test "$patched" = $(git rev-parse :one) && - test "$patched" = "$(remove_cr <one | git hash-object --stdin)" || { - echo "Eh? apply with --index" - false - } + verbose test "$patched" = $(git rev-parse :one) && + verbose test "$patched" = "$(remove_cr <one | git hash-object --stdin)" ' test_expect_success '.gitattributes says two is binary' ' @@ -280,29 +223,9 @@ test_expect_success '.gitattributes says two is binary' ' git config core.autocrlf true && git read-tree --reset -u HEAD && - if has_cr dir/two - then - echo "Huh?" - false - else - : happy - fi && - - if has_cr one - then - : happy - else - echo "Huh?" - false - fi && - - if has_cr three - then - echo "Huh?" - false - else - : happy - fi + test_must_fail has_cr dir/two && + verbose has_cr one && + test_must_fail has_cr three ' test_expect_success '.gitattributes says two is input' ' @@ -311,13 +234,7 @@ test_expect_success '.gitattributes says two is input' ' echo "two crlf=input" >.gitattributes && git read-tree --reset -u HEAD && - if has_cr dir/two - then - echo "Huh?" - false - else - : happy - fi + test_must_fail has_cr dir/two ' test_expect_success '.gitattributes says two and three are text' ' @@ -326,21 +243,8 @@ test_expect_success '.gitattributes says two and three are text' ' echo "t* crlf" >.gitattributes && git read-tree --reset -u HEAD && - if has_cr dir/two - then - : happy - else - echo "Huh?" - false - fi && - - if has_cr three - then - : happy - else - echo "Huh?" - false - fi + verbose has_cr dir/two && + verbose has_cr three ' test_expect_success 'in-tree .gitattributes (1)' ' @@ -352,17 +256,8 @@ test_expect_success 'in-tree .gitattributes (1)' ' rm -rf tmp one dir .gitattributes patch.file three && git read-tree --reset -u HEAD && - if has_cr one - then - echo "Eh? one should not have CRLF" - false - else - : happy - fi && - has_cr three || { - echo "Eh? three should still have CRLF" - false - } + test_must_fail has_cr one && + verbose has_cr three ' test_expect_success 'in-tree .gitattributes (2)' ' @@ -371,17 +266,8 @@ test_expect_success 'in-tree .gitattributes (2)' ' git read-tree --reset HEAD && git checkout-index -f -q -u -a && - if has_cr one - then - echo "Eh? one should not have CRLF" - false - else - : happy - fi && - has_cr three || { - echo "Eh? three should still have CRLF" - false - } + test_must_fail has_cr one && + verbose has_cr three ' test_expect_success 'in-tree .gitattributes (3)' ' @@ -391,17 +277,8 @@ test_expect_success 'in-tree .gitattributes (3)' ' git checkout-index -u .gitattributes && git checkout-index -u one dir/two three && - if has_cr one - then - echo "Eh? one should not have CRLF" - false - else - : happy - fi && - has_cr three || { - echo "Eh? three should still have CRLF" - false - } + test_must_fail has_cr one && + verbose has_cr three ' test_expect_success 'in-tree .gitattributes (4)' ' @@ -411,17 +288,8 @@ test_expect_success 'in-tree .gitattributes (4)' ' git checkout-index -u one dir/two three && git checkout-index -u .gitattributes && - if has_cr one - then - echo "Eh? one should not have CRLF" - false - else - : happy - fi && - has_cr three || { - echo "Eh? three should still have CRLF" - false - } + test_must_fail has_cr one && + verbose has_cr three ' test_expect_success 'checkout with existing .gitattributes' ' diff --git a/t/t0040-parse-options.sh b/t/t0040-parse-options.sh index a90c86bfa3..b044785175 100755 --- a/t/t0040-parse-options.sh +++ b/t/t0040-parse-options.sh @@ -172,12 +172,9 @@ test_expect_success 'long options' ' ' test_expect_success 'missing required value' ' - test-parse-options -s; - test $? = 129 && - test-parse-options --string; - test $? = 129 && - test-parse-options --file; - test $? = 129 + test_expect_code 129 test-parse-options -s && + test_expect_code 129 test-parse-options --string && + test_expect_code 129 test-parse-options --file ' cat > expect << EOF @@ -227,8 +224,7 @@ test_expect_success 'unambiguously abbreviated option with "="' ' ' test_expect_success 'ambiguously abbreviated option' ' - test-parse-options --strin 123; - test $? = 129 + test_expect_code 129 test-parse-options --strin 123 ' cat > expect << EOF diff --git a/t/t0050-filesystem.sh b/t/t0050-filesystem.sh index 988c3925d5..b29d749bb7 100755 --- a/t/t0050-filesystem.sh +++ b/t/t0050-filesystem.sh @@ -33,16 +33,20 @@ test_expect_success "detection of case insensitive filesystem during repo init" ' else test_expect_success "detection of case insensitive filesystem during repo init" ' - test_must_fail git config --bool core.ignorecase >/dev/null || - test $(git config --bool core.ignorecase) = false + { + test_must_fail git config --bool core.ignorecase >/dev/null || + test $(git config --bool core.ignorecase) = false + } ' fi if test_have_prereq SYMLINKS then test_expect_success "detection of filesystem w/o symlink support during repo init" ' - test_must_fail git config --bool core.symlinks || - test "$(git config --bool core.symlinks)" = true + { + test_must_fail git config --bool core.symlinks || + test "$(git config --bool core.symlinks)" = true + } ' else test_expect_success "detection of filesystem w/o symlink support during repo init" ' diff --git a/t/t0062-revision-walking.sh b/t/t0062-revision-walking.sh index 3d98eb847f..113c728e67 100755 --- a/t/t0062-revision-walking.sh +++ b/t/t0062-revision-walking.sh @@ -26,7 +26,7 @@ test_expect_success 'setup' ' ' test_expect_success 'revision walking can be done twice' ' - test-revision-walking run-twice > run_twice_actual + test-revision-walking run-twice >run_twice_actual && test_cmp run_twice_expected run_twice_actual ' diff --git a/t/t0201-gettext-fallbacks.sh b/t/t0201-gettext-fallbacks.sh index 5d80a985fb..90da1c7ddc 100755 --- a/t/t0201-gettext-fallbacks.sh +++ b/t/t0201-gettext-fallbacks.sh @@ -50,17 +50,17 @@ test_expect_success 'eval_gettext: our eval_gettext() fallback can interpolate v test_expect_success 'eval_gettext: our eval_gettext() fallback can interpolate variables with spaces' ' cmdline="git am" && - export cmdline; + export cmdline && printf "When you have resolved this problem, run git am --resolved." >expect && - eval_gettext "When you have resolved this problem, run \$cmdline --resolved." >actual + eval_gettext "When you have resolved this problem, run \$cmdline --resolved." >actual && test_i18ncmp expect actual ' test_expect_success 'eval_gettext: our eval_gettext() fallback can interpolate variables with spaces and quotes' ' cmdline="git am" && - export cmdline; + export cmdline && printf "When you have resolved this problem, run \"git am --resolved\"." >expect && - eval_gettext "When you have resolved this problem, run \"\$cmdline --resolved\"." >actual + eval_gettext "When you have resolved this problem, run \"\$cmdline --resolved\"." >actual && test_i18ncmp expect actual ' diff --git a/t/t1002-read-tree-m-u-2way.sh b/t/t1002-read-tree-m-u-2way.sh index fed877b20f..e3bf821694 100755 --- a/t/t1002-read-tree-m-u-2way.sh +++ b/t/t1002-read-tree-m-u-2way.sh @@ -75,8 +75,8 @@ test_expect_success \ echo yomin >yomin && git update-index --add yomin && read_tree_u_must_succeed -m -u $treeH $treeM && - git ls-files --stage >4.out || return 1 - git diff -U0 --no-index M.out 4.out >4diff.out + git ls-files --stage >4.out && + test_might_fail git diff -U0 --no-index M.out 4.out >4diff.out && compare_change 4diff.out expected && check_cache_at yomin clean && sum bozbar frotz nitfol >actual4.sum && @@ -94,8 +94,8 @@ test_expect_success \ git update-index --add yomin && echo yomin yomin >yomin && read_tree_u_must_succeed -m -u $treeH $treeM && - git ls-files --stage >5.out || return 1 - git diff -U0 --no-index M.out 5.out >5diff.out + git ls-files --stage >5.out && + test_might_fail git diff -U0 --no-index M.out 5.out >5diff.out && compare_change 5diff.out expected && check_cache_at yomin dirty && sum bozbar frotz nitfol >actual5.sum && diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh index a72e700ae4..ab36b1eb72 100755 --- a/t/t1006-cat-file.sh +++ b/t/t1006-cat-file.sh @@ -274,7 +274,7 @@ test_expect_success 'setup blobs which are likely to delta' ' ' test_expect_success 'confirm that neither loose blob is a delta' ' - cat >expect <<-EOF + cat >expect <<-EOF && $_z40 $_z40 EOF diff --git a/t/t1300-repo-config.sh b/t/t1300-repo-config.sh index 938fc8bfd7..66dd28644f 100755 --- a/t/t1300-repo-config.sh +++ b/t/t1300-repo-config.sh @@ -677,7 +677,7 @@ test_expect_success 'invalid unit' ' echo 1auto >expect && git config aninvalid.unit >actual && test_cmp expect actual && - cat >expect <<-\EOF + cat >expect <<-\EOF && fatal: bad numeric config value '\''1auto'\'' for '\''aninvalid.unit'\'' in .git/config: invalid unit EOF test_must_fail git config --int --get aninvalid.unit 2>actual && @@ -1165,7 +1165,7 @@ test_expect_failure 'adding a key into an empty section reuses header' ' Qkey = value EOF - git config section.key value + git config section.key value && test_cmp expect .git/config ' diff --git a/t/t1301-shared-repo.sh b/t/t1301-shared-repo.sh index 7eecfb836a..ac10875408 100755 --- a/t/t1301-shared-repo.sh +++ b/t/t1301-shared-repo.sh @@ -12,12 +12,11 @@ setfacl -k . 2>/dev/null # User must have read permissions to the repo -> failure on --shared=0400 test_expect_success 'shared = 0400 (faulty permission u-w)' ' + test_when_finished "rm -rf sub" && mkdir sub && ( - cd sub && git init --shared=0400 + cd sub && + test_must_fail git init --shared=0400 ) - ret="$?" - rm -rf sub - test $ret != "0" ' modebits () { @@ -33,7 +32,7 @@ do git init --shared=1 && test 1 = "$(git config core.sharedrepository)" ) && - actual=$(ls -l sub/.git/HEAD) + actual=$(ls -l sub/.git/HEAD) && case "$actual" in -rw-rw-r--*) : happy @@ -90,10 +89,8 @@ do rm -f .git/info/refs && git update-server-info && actual="$(modebits .git/info/refs)" && - test "x$actual" = "x-$y" || { - ls -lt .git/info - false - } + verbose test "x$actual" = "x-$y" + ' umask 077 && @@ -102,10 +99,7 @@ do rm -f .git/info/refs && git update-server-info && actual="$(modebits .git/info/refs)" && - test "x$actual" = "x-$x" || { - ls -lt .git/info - false - } + verbose test "x$actual" = "x-$x" ' diff --git a/t/t1403-show-ref.sh b/t/t1403-show-ref.sh index 3e500ed7da..7e10bcfe39 100755 --- a/t/t1403-show-ref.sh +++ b/t/t1403-show-ref.sh @@ -28,7 +28,7 @@ test_expect_success 'show-ref' ' >expect && - test_must_fail git show-ref D >actual + test_must_fail git show-ref D >actual && test_cmp expect actual ' @@ -62,7 +62,7 @@ test_expect_success 'show-ref --verify' ' test_must_fail git show-ref --verify tags/A >actual && test_cmp expect actual && - test_must_fail git show-ref --verify D >actual + test_must_fail git show-ref --verify D >actual && test_cmp expect actual ' @@ -78,7 +78,7 @@ test_expect_success 'show-ref --verify -q' ' test_must_fail git show-ref --verify -q tags/A >actual && test_cmp expect actual && - test_must_fail git show-ref --verify -q D >actual + test_must_fail git show-ref --verify -q D >actual && test_cmp expect actual ' @@ -105,10 +105,10 @@ test_expect_success 'show-ref -d' ' test_cmp expect actual && git show-ref -d refs/heads/master >actual && - test_cmp expect actual + test_cmp expect actual && git show-ref -d --verify refs/heads/master >actual && - test_cmp expect actual + test_cmp expect actual && >expect && diff --git a/t/t1700-split-index.sh b/t/t1700-split-index.sh index 92f7298fba..193d55c3f4 100755 --- a/t/t1700-split-index.sh +++ b/t/t1700-split-index.sh @@ -191,7 +191,7 @@ test_expect_success 'unify index, two files remain' ' 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 one 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 two EOF - test_cmp ls-files.expect ls-files.actual + test_cmp ls-files.expect ls-files.actual && test-dump-split-index .git/index | sed "/^own/d" >actual && cat >expect <<EOF && diff --git a/t/t3001-ls-files-others-exclude.sh b/t/t3001-ls-files-others-exclude.sh index b2798feef7..3fc484e8c3 100755 --- a/t/t3001-ls-files-others-exclude.sh +++ b/t/t3001-ls-files-others-exclude.sh @@ -294,7 +294,7 @@ one/a.1 one/two/a.1 three/a.1 EOF - git ls-files -o -i --exclude "**/a.1" >actual + git ls-files -o -i --exclude "**/a.1" >actual && test_cmp expect actual ' diff --git a/t/t3010-ls-files-killed-modified.sh b/t/t3010-ls-files-killed-modified.sh index 6d3b828a95..580e158f99 100755 --- a/t/t3010-ls-files-killed-modified.sh +++ b/t/t3010-ls-files-killed-modified.sh @@ -55,14 +55,11 @@ test_expect_success 'git update-index --add to add various paths.' ' : >path9 && date >path10 && git update-index --add -- path0 path?/file? pathx/ju path7 path8 path9 path10 && - for i in 1 2 - do - git init submod$i && - ( - cd submod$i && git commit --allow-empty -m "empty $i" - ) || break - done && - git update-index --add submod[12] + git init submod1 && + git -C submod1 commit --allow-empty -m "empty 1" && + git init submod2 && + git -C submod2 commit --allow-empty -m "empty 2" && + git update-index --add submod[12] && ( cd submod1 && git commit --allow-empty -m "empty 1 (updated)" @@ -99,12 +96,12 @@ test_expect_success 'git ls-files -k to show killed files.' ' ' test_expect_success 'git ls-files -k output (w/o icase)' ' - git ls-files -k >.output + git ls-files -k >.output && test_cmp .expected .output ' test_expect_success 'git ls-files -k output (w/ icase)' ' - git -c core.ignorecase=true ls-files -k >.output + git -c core.ignorecase=true ls-files -k >.output && test_cmp .expected .output ' diff --git a/t/t3031-merge-criscross.sh b/t/t3031-merge-criscross.sh index 7f41607c56..e59b0a32d6 100755 --- a/t/t3031-merge-criscross.sh +++ b/t/t3031-merge-criscross.sh @@ -32,7 +32,7 @@ test_expect_success 'setup repo with criss-cross history' ' do echo $n > data/$n && n=$(($n+1)) || - break + return 1 done && # check them in diff --git a/t/t3060-ls-files-with-tree.sh b/t/t3060-ls-files-with-tree.sh index 61c1f53d1b..44f378ce41 100755 --- a/t/t3060-ls-files-with-tree.sh +++ b/t/t3060-ls-files-with-tree.sh @@ -18,22 +18,16 @@ test_expect_success setup ' echo file >expected && mkdir sub && - bad= && for n in 0 1 2 3 4 5 do for m in 0 1 2 3 4 5 6 7 8 9 do num=00$n$m && >sub/file-$num && - echo file-$num >>expected || { - bad=t - break - } - done && test -z "$bad" || { - bad=t - break - } - done && test -z "$bad" && + echo file-$num >>expected || + return 1 + done + done && git add . && git commit -m "add a bunch of files" && diff --git a/t/t3202-show-branch-octopus.sh b/t/t3202-show-branch-octopus.sh index 0a5d5e669f..6adf47869c 100755 --- a/t/t3202-show-branch-octopus.sh +++ b/t/t3202-show-branch-octopus.sh @@ -19,7 +19,7 @@ test_expect_success 'setup' ' > file$i && git add file$i && test_tick && - git commit -m branch$i || break + git commit -m branch$i || return 1 done ' diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh index ba4f98e800..f51d0f3cad 100755 --- a/t/t3203-branch-output.sh +++ b/t/t3203-branch-output.sh @@ -96,7 +96,7 @@ test_expect_success 'git branch -v pattern does not show branch summaries' ' test_expect_success 'git branch shows detached HEAD properly' ' cat >expect <<EOF && -* (detached from $(git rev-parse --short HEAD^0)) +* (HEAD detached at $(git rev-parse --short HEAD^0)) branch-one branch-two master @@ -106,4 +106,41 @@ EOF test_i18ncmp expect actual ' +test_expect_success 'git branch shows detached HEAD properly after moving' ' + cat >expect <<EOF && +* (HEAD detached from $(git rev-parse --short HEAD)) + branch-one + branch-two + master +EOF + git reset --hard HEAD^1 && + git branch >actual && + test_i18ncmp expect actual +' + +test_expect_success 'git branch shows detached HEAD properly from tag' ' + cat >expect <<EOF && +* (HEAD detached at fromtag) + branch-one + branch-two + master +EOF + git tag fromtag master && + git checkout fromtag && + git branch >actual && + test_i18ncmp expect actual +' + +test_expect_success 'git branch shows detached HEAD properly after moving from tag' ' + cat >expect <<EOF && +* (HEAD detached from fromtag) + branch-one + branch-two + master +EOF + git reset --hard HEAD^1 && + git branch >actual && + test_i18ncmp expect actual +' + test_done diff --git a/t/t3305-notes-fanout.sh b/t/t3305-notes-fanout.sh index b1ea64b213..54460beec4 100755 --- a/t/t3305-notes-fanout.sh +++ b/t/t3305-notes-fanout.sh @@ -51,15 +51,12 @@ test_expect_success 'deleting most notes with git-notes' ' num_notes=250 && i=0 && git rev-list HEAD | - while read sha1 + while test $i -lt $num_notes && read sha1 do i=$(($i + 1)) && - if test $i -gt $num_notes - then - break - fi && test_tick && - git notes remove "$sha1" + git notes remove "$sha1" || + exit 1 done ' diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 034eb35cdf..eed76cca55 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -950,7 +950,7 @@ test_expect_success 'rebase --edit-todo can be used to modify todo' ' set_fake_editor && FAKE_LINES="edit 1 2 3" git rebase -i HEAD~3 && FAKE_LINES="2 1" git rebase --edit-todo && - git rebase --continue + git rebase --continue && test M = $(git cat-file commit HEAD^ | sed -ne \$p) && test L = $(git cat-file commit HEAD | sed -ne \$p) ' @@ -1007,7 +1007,7 @@ test_expect_success 'rebase -i with --strategy and -X' ' ' test_expect_success 'rebase -i error on commits with \ in message' ' - current_head=$(git rev-parse HEAD) + current_head=$(git rev-parse HEAD) && test_when_finished "git rebase --abort; git reset --hard $current_head; rm -f error" && test_commit TO-REMOVE will-conflict old-content && test_commit "\temp" will-conflict new-content dummy && diff --git a/t/t3405-rebase-malformed.sh b/t/t3405-rebase-malformed.sh index 19eddadcf7..ff8c360cd5 100755 --- a/t/t3405-rebase-malformed.sh +++ b/t/t3405-rebase-malformed.sh @@ -24,7 +24,7 @@ test_expect_success setup ' git add file1 file2 && test_tick && git commit -m "Initial commit" && - git branch diff-in-message + git branch diff-in-message && git checkout -b multi-line-subject && cat F >file2 && @@ -36,7 +36,7 @@ test_expect_success setup ' git checkout diff-in-message && echo "commit log message containing a diff" >G && - echo "" >>G + echo "" >>G && cat G >file2 && git add file2 && git diff --cached >>G && diff --git a/t/t3425-rebase-topology-merges.sh b/t/t3425-rebase-topology-merges.sh index 1d195fbd64..846f85c27e 100755 --- a/t/t3425-rebase-topology-merges.sh +++ b/t/t3425-rebase-topology-merges.sh @@ -24,7 +24,7 @@ test_expect_success 'setup of non-linear-history' ' test_commit c && git checkout b && test_commit d && - test_commit e + test_commit e && git checkout c && test_commit g && @@ -33,7 +33,7 @@ test_expect_success 'setup of non-linear-history' ' cherry_pick gp g && test_commit i && git checkout b && - test_commit f + test_commit f && git checkout d && test_commit n && diff --git a/t/t3511-cherry-pick-x.sh b/t/t3511-cherry-pick-x.sh index f97727975b..b7dff09d06 100755 --- a/t/t3511-cherry-pick-x.sh +++ b/t/t3511-cherry-pick-x.sh @@ -36,6 +36,20 @@ mesg_with_cherry_footer="$mesg_with_footer_sob (cherry picked from commit da39a3ee5e6b4b0d3255bfef95601890afd80709) Tested-by: C.U. Thor <cuthor@example.com>" +mesg_unclean="$mesg_one_line + + +leading empty lines + + +consecutive empty lines + +# hash tag comment + +trailing empty lines + + +" test_expect_success setup ' git config advice.detachedhead false && @@ -53,6 +67,10 @@ test_expect_success setup ' test_commit "$mesg_with_footer_sob" foo b mesg-with-footer-sob && git reset --hard initial && test_commit "$mesg_with_cherry_footer" foo b mesg-with-cherry-footer && + git reset --hard initial && + test_config commit.cleanup verbatim && + test_commit "$mesg_unclean" foo b mesg-unclean && + test_unconfig commit.cleanup && pristine_detach initial && test_commit conflicting unrelated ' @@ -216,4 +234,14 @@ test_expect_success 'cherry-pick -x -s treats "(cherry picked from..." line as p test_cmp expect actual ' +test_expect_success 'cherry-pick preserves commit message' ' + pristine_detach initial && + printf "$mesg_unclean" >expect && + git log -1 --pretty=format:%B mesg-unclean >actual && + test_cmp expect actual && + git cherry-pick mesg-unclean && + git log -1 --pretty=format:%B >actual && + test_cmp expect actual +' + test_done diff --git a/t/t3600-rm.sh b/t/t3600-rm.sh index e00d7d2b61..9d90d2c935 100755 --- a/t/t3600-rm.sh +++ b/t/t3600-rm.sh @@ -38,37 +38,37 @@ test_expect_success \ test_expect_success \ 'Test that git rm --cached foo succeeds if the index matches the file' \ - 'echo content > foo - git add foo + 'echo content >foo && + git add foo && git rm --cached foo' test_expect_success \ 'Test that git rm --cached foo succeeds if the index matches the file' \ - 'echo content > foo - git add foo - git commit -m foo - echo "other content" > foo + 'echo content >foo && + git add foo && + git commit -m foo && + echo "other content" >foo && git rm --cached foo' test_expect_success \ 'Test that git rm --cached foo fails if the index matches neither the file nor HEAD' ' - echo content > foo - git add foo - git commit -m foo - echo "other content" > foo - git add foo - echo "yet another content" > foo + echo content >foo && + git add foo && + git commit -m foo --allow-empty && + echo "other content" >foo && + git add foo && + echo "yet another content" >foo && test_must_fail git rm --cached foo ' test_expect_success \ 'Test that git rm --cached -f foo works in case where --cached only did not' \ - 'echo content > foo - git add foo - git commit -m foo - echo "other content" > foo - git add foo - echo "yet another content" > foo + 'echo content >foo && + git add foo && + git commit -m foo --allow-empty && + echo "other content" >foo && + git add foo && + echo "yet another content" >foo && git rm --cached -f foo' test_expect_success \ @@ -170,7 +170,7 @@ test_expect_success 'but with -f it should work.' ' git rm -f foo baz && test ! -f foo && test ! -f baz && - test_must_fail git ls-files --error-unmatch foo + test_must_fail git ls-files --error-unmatch foo && test_must_fail git ls-files --error-unmatch baz ' @@ -183,7 +183,7 @@ test_expect_success 'refuse to remove cached empty file with modifications' ' test_expect_success 'remove intent-to-add file without --force' ' echo content >intent-to-add && - git add -N intent-to-add + git add -N intent-to-add && git rm --cached intent-to-add ' @@ -201,7 +201,7 @@ test_expect_success 'Recursive without -r fails' ' ' test_expect_success 'Recursive with -r but dirty' ' - echo qfwfq >>frotz/nitfol + echo qfwfq >>frotz/nitfol && test_must_fail git rm -r frotz && test -d frotz && test -f frotz/nitfol diff --git a/t/t3901-i18n-patch.sh b/t/t3901-i18n-patch.sh index a392f3d1d6..75cf3ff9bd 100755 --- a/t/t3901-i18n-patch.sh +++ b/t/t3901-i18n-patch.sh @@ -9,7 +9,7 @@ test_description='i18n settings and format-patch | am pipe' check_encoding () { # Make sure characters are not corrupted - cnt="$1" header="$2" i=1 j=0 bad=0 + cnt="$1" header="$2" i=1 j=0 while test "$i" -le $cnt do git format-patch --encoding=UTF-8 --stdout HEAD~$i..HEAD~$j | @@ -20,14 +20,10 @@ check_encoding () { grep "^encoding ISO8859-1" ;; *) grep "^encoding ISO8859-1"; test "$?" != 0 ;; - esac || { - bad=1 - break - } + esac || return 1 j=$i i=$(($i+1)) done - (exit $bad) } test_expect_success setup ' diff --git a/t/t4013/diff.log_--decorate_--all b/t/t4013/diff.log_--decorate_--all index 27d3eabc26..3aa16a9e42 100644 --- a/t/t4013/diff.log_--decorate_--all +++ b/t/t4013/diff.log_--decorate_--all @@ -5,7 +5,7 @@ Date: Mon Jun 26 00:06:00 2006 +0000 Rearranged lines in dir/sub -commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (HEAD, master) +commit 59d314ad6f356dd08601a4cd5e530381da3e3c64 (HEAD -> master) Merge: 9a6d494 c7a2ab9 Author: A U Thor <author@example.com> Date: Mon Jun 26 00:04:00 2006 +0000 diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index 256affce89..c39e50028f 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -802,7 +802,7 @@ test_expect_success '--no-signature suppresses format.signaturefile ' ' ' test_expect_success '--signature-file overrides format.signaturefile' ' - cat >other-mail-signature <<-\EOF + cat >other-mail-signature <<-\EOF && Use this other signature instead of mail-signature. EOF test_config format.signaturefile mail-signature && diff --git a/t/t4022-diff-rewrite.sh b/t/t4022-diff-rewrite.sh index 2d030a4ec3..cb51d9f9d4 100755 --- a/t/t4022-diff-rewrite.sh +++ b/t/t4022-diff-rewrite.sh @@ -20,10 +20,7 @@ test_expect_success setup ' test_expect_success 'detect rewrite' ' actual=$(git diff-files -B --summary test) && - expr "$actual" : " rewrite test ([0-9]*%)$" || { - echo "Eh? <<$actual>>" - false - } + verbose expr "$actual" : " rewrite test ([0-9]*%)$" ' diff --git a/t/t4024-diff-optimize-common.sh b/t/t4024-diff-optimize-common.sh index c4d733f5db..7e76018296 100755 --- a/t/t4024-diff-optimize-common.sh +++ b/t/t4024-diff-optimize-common.sh @@ -139,7 +139,7 @@ test_expect_success setup ' ( printf C; zs $n ) >file-c$n && ( echo D; zs $n ) >file-d$n && - expect_pattern $n || break + expect_pattern $n || return 1 done >expect ' diff --git a/t/t4026-color.sh b/t/t4026-color.sh index 4d20feacfe..2b32c4fbe6 100755 --- a/t/t4026-color.sh +++ b/t/t4026-color.sh @@ -111,9 +111,9 @@ test_expect_success 'unknown color slots are ignored (branch)' ' ' test_expect_success 'unknown color slots are ignored (status)' ' - git config color.status.nosuchslotwilleverbedefined white || exit - git status - case $? in 0|1) : ok ;; *) false ;; esac + git config color.status.nosuchslotwilleverbedefined white && + { git status; ret=$?; } && + case $ret in 0|1) : ok ;; *) false ;; esac ' test_done diff --git a/t/t4035-diff-quiet.sh b/t/t4035-diff-quiet.sh index e8ae2a03fd..461f4bb583 100755 --- a/t/t4035-diff-quiet.sh +++ b/t/t4035-diff-quiet.sh @@ -29,67 +29,65 @@ test_expect_success 'setup' ' ' test_expect_success 'git diff-tree HEAD^ HEAD' ' - git diff-tree --quiet HEAD^ HEAD >cnt - test $? = 1 && test_line_count = 0 cnt + test_expect_code 1 git diff-tree --quiet HEAD^ HEAD >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-tree HEAD^ HEAD -- a' ' - git diff-tree --quiet HEAD^ HEAD -- a >cnt - test $? = 0 && test_line_count = 0 cnt + test_expect_code 0 git diff-tree --quiet HEAD^ HEAD -- a >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-tree HEAD^ HEAD -- b' ' - git diff-tree --quiet HEAD^ HEAD -- b >cnt - test $? = 1 && test_line_count = 0 cnt + test_expect_code 1 git diff-tree --quiet HEAD^ HEAD -- b >cnt && + test_line_count = 0 cnt ' # this diff outputs one line: sha1 of the given head test_expect_success 'echo HEAD | git diff-tree --stdin' ' - echo $(git rev-parse HEAD) | git diff-tree --quiet --stdin >cnt - test $? = 1 && test_line_count = 1 cnt + echo $(git rev-parse HEAD) | + test_expect_code 1 git diff-tree --quiet --stdin >cnt && + test_line_count = 1 cnt ' test_expect_success 'git diff-tree HEAD HEAD' ' - git diff-tree --quiet HEAD HEAD >cnt - test $? = 0 && test_line_count = 0 cnt + test_expect_code 0 git diff-tree --quiet HEAD HEAD >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-files' ' - git diff-files --quiet >cnt - test $? = 0 && test_line_count = 0 cnt + test_expect_code 0 git diff-files --quiet >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-index --cached HEAD' ' - git diff-index --quiet --cached HEAD >cnt - test $? = 0 && test_line_count = 0 cnt + test_expect_code 0 git diff-index --quiet --cached HEAD >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-index --cached HEAD^' ' - git diff-index --quiet --cached HEAD^ >cnt - test $? = 1 && test_line_count = 0 cnt + test_expect_code 1 git diff-index --quiet --cached HEAD^ >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-index --cached HEAD^' ' echo text >>b && echo 3 >c && - git add . && { - git diff-index --quiet --cached HEAD^ >cnt - test $? = 1 && test_line_count = 0 cnt - } + git add . && + test_expect_code 1 git diff-index --quiet --cached HEAD^ >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-tree -Stext HEAD^ HEAD -- b' ' - git commit -m "text in b" && { - git diff-tree --quiet -Stext HEAD^ HEAD -- b >cnt - test $? = 1 && test_line_count = 0 cnt - } + git commit -m "text in b" && + test_expect_code 1 git diff-tree --quiet -Stext HEAD^ HEAD -- b >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-tree -Snot-found HEAD^ HEAD -- b' ' - git diff-tree --quiet -Snot-found HEAD^ HEAD -- b >cnt - test $? = 0 && test_line_count = 0 cnt + test_expect_code 0 git diff-tree --quiet -Snot-found HEAD^ HEAD -- b >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff-files' ' - echo 3 >>c && { - git diff-files --quiet >cnt - test $? = 1 && test_line_count = 0 cnt - } + echo 3 >>c && + test_expect_code 1 git diff-files --quiet >cnt && + test_line_count = 0 cnt ' + test_expect_success 'git diff-index --cached HEAD' ' - git update-index c && { - git diff-index --quiet --cached HEAD >cnt - test $? = 1 && test_line_count = 0 cnt - } + git update-index c && + test_expect_code 1 git diff-index --quiet --cached HEAD >cnt && + test_line_count = 0 cnt ' test_expect_success 'git diff, one file outside repo' ' diff --git a/t/t4041-diff-submodule-option.sh b/t/t4041-diff-submodule-option.sh index e4328964a7..2d9731b52d 100755 --- a/t/t4041-diff-submodule-option.sh +++ b/t/t4041-diff-submodule-option.sh @@ -528,10 +528,12 @@ test_expect_success 'diff --submodule with objects referenced by alternates' ' sha1_before=$(git rev-parse --short HEAD) echo b >b && git add b && - git commit -m b - sha1_after=$(git rev-parse --short HEAD) - echo "Submodule sub $sha1_before..$sha1_after: - > b" >../expected + git commit -m b && + sha1_after=$(git rev-parse --short HEAD) && + { + echo "Submodule sub $sha1_before..$sha1_after:" && + echo " > b" + } >../expected ) && (cd super && (cd sub && @@ -539,7 +541,7 @@ test_expect_success 'diff --submodule with objects referenced by alternates' ' git checkout origin/master ) && git diff --submodule > ../actual - ) + ) && test_cmp expected actual ' diff --git a/t/t4046-diff-unmerged.sh b/t/t4046-diff-unmerged.sh index 25d50a654a..d0f14475ca 100755 --- a/t/t4046-diff-unmerged.sh +++ b/t/t4046-diff-unmerged.sh @@ -8,7 +8,7 @@ test_expect_success setup ' do blob=$(echo $i | git hash-object --stdin) && eval "blob$i=$blob" && - eval "m$i=\"100644 \$blob$i $i\"" || break + eval "m$i=\"100644 \$blob$i $i\"" || return 1 done && paths= && for b in o x @@ -24,9 +24,9 @@ test_expect_success setup ' case "$b" in x) echo "$m1$p" ;; esac && case "$o" in x) echo "$m2$p" ;; esac && case "$t" in x) echo "$m3$p" ;; esac || - break - done || break - done || break + return 1 + done + done done >ls-files-s.expect && git update-index --index-info <ls-files-s.expect && git ls-files -s >ls-files-s.actual && diff --git a/t/t4047-diff-dirstat.sh b/t/t4047-diff-dirstat.sh index 0d50dce97e..3b8b7921d6 100755 --- a/t/t4047-diff-dirstat.sh +++ b/t/t4047-diff-dirstat.sh @@ -374,7 +374,7 @@ test_expect_success 'later options override earlier options:' ' git diff --dirstat=files,10,cumulative,changes,noncumulative,3 -M HEAD^..HEAD >actual_diff_dirstat_M && test_cmp expect_diff_dirstat_M actual_diff_dirstat_M && git diff --dirstat=files,10,cumulative,changes,noncumulative,3 -C -C HEAD^..HEAD >actual_diff_dirstat_CC && - test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC + test_cmp expect_diff_dirstat_CC actual_diff_dirstat_CC && git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 HEAD^..HEAD >actual_diff_dirstat && test_cmp expect_diff_dirstat actual_diff_dirstat && git diff --dirstat=files --dirstat=10 --dirstat=cumulative --dirstat=changes --dirstat=noncumulative -X3 -M HEAD^..HEAD >actual_diff_dirstat_M && diff --git a/t/t4049-diff-stat-count.sh b/t/t4049-diff-stat-count.sh index 5b594e878f..a34121740a 100755 --- a/t/t4049-diff-stat-count.sh +++ b/t/t4049-diff-stat-count.sh @@ -18,7 +18,7 @@ test_expect_success 'mode-only change show as a 0-line change' ' test_chmod +x b d && echo a >a && echo c >c && - cat >expect <<-\EOF + cat >expect <<-\EOF && a | 1 + b | 0 ... @@ -33,7 +33,7 @@ test_expect_success 'binary changes do not count in lines' ' echo a >a && echo c >c && cat "$TEST_DIRECTORY"/test-binary-1.png >d && - cat >expect <<-\EOF + cat >expect <<-\EOF && a | 1 + c | 1 + ... @@ -55,7 +55,7 @@ test_expect_success 'exclude unmerged entries from total file count' ' done | git update-index --index-info && echo d >d && - cat >expect <<-\EOF + cat >expect <<-\EOF && a | 1 + b | 1 + ... diff --git a/t/t4052-stat-output.sh b/t/t4052-stat-output.sh index b68afefa3c..9f563db20a 100755 --- a/t/t4052-stat-output.sh +++ b/t/t4052-stat-output.sh @@ -94,15 +94,15 @@ EOF while read verb expect cmd args do test_expect_success "$cmd $verb COLUMNS (big change)" ' - COLUMNS=200 git $cmd $args >output + COLUMNS=200 git $cmd $args >output && grep " | " output >actual && test_cmp "$expect" actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success "$cmd --graph $verb COLUMNS (big change)" ' - COLUMNS=200 git $cmd $args --graph >output + COLUMNS=200 git $cmd $args --graph >output && grep " | " output >actual && test_cmp "$expect-graph" actual ' @@ -122,15 +122,15 @@ EOF while read verb expect cmd args do test_expect_success "$cmd $verb not enough COLUMNS (big change)" ' - COLUMNS=40 git $cmd $args >output + COLUMNS=40 git $cmd $args >output && grep " | " output >actual && test_cmp "$expect" actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success "$cmd --graph $verb not enough COLUMNS (big change)" ' - COLUMNS=40 git $cmd $args --graph >output + COLUMNS=40 git $cmd $args --graph >output && grep " | " output >actual && test_cmp "$expect-graph" actual ' @@ -150,15 +150,15 @@ EOF while read verb expect cmd args do test_expect_success "$cmd $verb statGraphWidth config" ' - git -c diff.statGraphWidth=26 $cmd $args >output + git -c diff.statGraphWidth=26 $cmd $args >output && grep " | " output >actual && test_cmp "$expect" actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success "$cmd --graph $verb statGraphWidth config" ' - git -c diff.statGraphWidth=26 $cmd $args --graph >output + git -c diff.statGraphWidth=26 $cmd $args --graph >output && grep " | " output >actual && test_cmp "$expect-graph" actual ' @@ -179,33 +179,33 @@ EOF while read cmd args do test_expect_success "$cmd --stat=width with big change" ' - git $cmd $args --stat=40 >output + git $cmd $args --stat=40 >output && grep " | " output >actual && test_cmp expect actual ' test_expect_success "$cmd --stat-width=width with big change" ' - git $cmd $args --stat-width=40 >output + git $cmd $args --stat-width=40 >output && grep " | " output >actual && test_cmp expect actual ' test_expect_success "$cmd --stat-graph-width with big change" ' - git $cmd $args --stat-graph-width=26 >output + git $cmd $args --stat-graph-width=26 >output && grep " | " output >actual && test_cmp expect actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success "$cmd --stat-width=width --graph with big change" ' - git $cmd $args --stat-width=40 --graph >output + git $cmd $args --stat-width=40 --graph >output && grep " | " output >actual && test_cmp expect-graph actual ' test_expect_success "$cmd --stat-graph-width --graph with big change" ' - git $cmd $args --stat-graph-width=26 --graph >output + git $cmd $args --stat-graph-width=26 --graph >output && grep " | " output >actual && test_cmp expect-graph actual ' @@ -236,7 +236,7 @@ do test_cmp expect actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success "$cmd --stat=width --graph with big change is balanced" ' git $cmd $args --stat-width=60 --graph >output && @@ -265,15 +265,15 @@ EOF while read verb expect cmd args do test_expect_success "$cmd $verb COLUMNS (long filename)" ' - COLUMNS=200 git $cmd $args >output + COLUMNS=200 git $cmd $args >output && grep " | " output >actual && test_cmp "$expect" actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success "$cmd --graph $verb COLUMNS (long filename)" ' - COLUMNS=200 git $cmd $args --graph >output + COLUMNS=200 git $cmd $args --graph >output && grep " | " output >actual && test_cmp "$expect-graph" actual ' @@ -294,16 +294,16 @@ while read verb expect cmd args do test_expect_success COLUMNS_CAN_BE_1 \ "$cmd $verb prefix greater than COLUMNS (big change)" ' - COLUMNS=1 git $cmd $args >output + COLUMNS=1 git $cmd $args >output && grep " | " output >actual && test_cmp "$expect" actual ' - test "$cmd" != diff || continue + case "$cmd" in diff|show) continue;; esac test_expect_success COLUMNS_CAN_BE_1 \ "$cmd --graph $verb prefix greater than COLUMNS (big change)" ' - COLUMNS=1 git $cmd $args --graph >output + COLUMNS=1 git $cmd $args --graph >output && grep " | " output >actual && test_cmp "$expect-graph" actual ' @@ -320,7 +320,7 @@ EOF test_expect_success 'merge --stat respects COLUMNS (big change)' ' git checkout -b branch HEAD^^ && COLUMNS=100 git merge --stat --no-ff master^ >output && - grep " | " output >actual + grep " | " output >actual && test_cmp expect actual ' @@ -329,7 +329,7 @@ cat >expect <<'EOF' EOF test_expect_success 'merge --stat respects COLUMNS (long filename)' ' COLUMNS=100 git merge --stat --no-ff master >output && - grep " | " output >actual + grep " | " output >actual && test_cmp expect actual ' diff --git a/t/t4053-diff-no-index.sh b/t/t4053-diff-no-index.sh index 2ab3c48734..075ece6db1 100755 --- a/t/t4053-diff-no-index.sh +++ b/t/t4053-diff-no-index.sh @@ -17,8 +17,8 @@ test_expect_success 'setup' ' ' test_expect_success 'git diff --no-index directories' ' - git diff --no-index a b >cnt - test $? = 1 && test_line_count = 14 cnt + test_expect_code 1 git diff --no-index a b >cnt && + test_line_count = 14 cnt ' test_expect_success 'git diff --no-index relative path outside repo' ' diff --git a/t/t4054-diff-bogus-tree.sh b/t/t4054-diff-bogus-tree.sh index 0843c87890..1d6efab3c5 100755 --- a/t/t4054-diff-bogus-tree.sh +++ b/t/t4054-diff-bogus-tree.sh @@ -16,7 +16,7 @@ test_expect_success 'create bogus tree' ' test_expect_success 'create tree with matching file' ' echo bar >foo && git add foo && - good_tree=$(git write-tree) + good_tree=$(git write-tree) && blob=$(git rev-parse :foo) ' diff --git a/t/t4104-apply-boundary.sh b/t/t4104-apply-boundary.sh index c617c2a33d..32e3b0ee0b 100755 --- a/t/t4104-apply-boundary.sh +++ b/t/t4104-apply-boundary.sh @@ -18,7 +18,7 @@ test_expect_success setup ' cat victim >original && git update-index --add victim && - : add to the head + # add to the head for i in a b '"$L"' y do echo $i @@ -27,7 +27,7 @@ test_expect_success setup ' git diff victim >add-a-patch.with && git diff --unified=0 >add-a-patch.without && - : insert at line two + # insert at line two for i in b a '"$L"' y do echo $i @@ -36,7 +36,7 @@ test_expect_success setup ' git diff victim >insert-a-patch.with && git diff --unified=0 >insert-a-patch.without && - : modify at the head + # modify at the head for i in a '"$L"' y do echo $i @@ -45,16 +45,16 @@ test_expect_success setup ' git diff victim >mod-a-patch.with && git diff --unified=0 >mod-a-patch.without && - : remove from the head + # remove from the head for i in '"$L"' y do echo $i done >victim && cat victim >del-a-expect && - git diff victim >del-a-patch.with + git diff victim >del-a-patch.with && git diff --unified=0 >del-a-patch.without && - : add to the tail + # add to the tail for i in b '"$L"' y z do echo $i @@ -63,7 +63,7 @@ test_expect_success setup ' git diff victim >add-z-patch.with && git diff --unified=0 >add-z-patch.without && - : modify at the tail + # modify at the tail for i in b '"$L"' z do echo $i @@ -72,16 +72,16 @@ test_expect_success setup ' git diff victim >mod-z-patch.with && git diff --unified=0 >mod-z-patch.without && - : remove from the tail + # remove from the tail for i in b '"$L"' do echo $i done >victim && cat victim >del-z-expect && - git diff victim >del-z-patch.with - git diff --unified=0 >del-z-patch.without && + git diff victim >del-z-patch.with && + git diff --unified=0 >del-z-patch.without - : done + # done ' for with in with without @@ -95,10 +95,7 @@ do test_expect_success "apply $kind-patch $with context" ' cat original >victim && git update-index victim && - git apply --index '"$u$kind-patch.$with"' || { - cat '"$kind-patch.$with"' - (exit 1) - } && + git apply --index '"$u$kind-patch.$with"' && test_cmp '"$kind"'-expect victim ' done @@ -113,10 +110,7 @@ do test_expect_success "apply non-git $kind-patch without context" ' cat original >victim && git update-index victim && - git apply --unidiff-zero --index '"$kind-ng.without"' || { - cat '"$kind-ng.without"' - (exit 1) - } && + git apply --unidiff-zero --index '"$kind-ng.without"' && test_cmp '"$kind"'-expect victim ' done diff --git a/t/t4117-apply-reject.sh b/t/t4117-apply-reject.sh index 8e15ecbdfd..d80187de94 100755 --- a/t/t4117-apply-reject.sh +++ b/t/t4117-apply-reject.sh @@ -56,23 +56,13 @@ test_expect_success 'apply --reject is incompatible with --3way' ' test_expect_success 'apply without --reject should fail' ' - if git apply patch.1 - then - echo "Eh? Why?" - exit 1 - fi - + test_must_fail git apply patch.1 && test_cmp file1 saved.file1 ' test_expect_success 'apply without --reject should fail' ' - if git apply --verbose patch.1 - then - echo "Eh? Why?" - exit 1 - fi - + test_must_fail git apply --verbose patch.1 && test_cmp file1 saved.file1 ' @@ -81,21 +71,11 @@ test_expect_success 'apply with --reject should fail but update the file' ' cat saved.file1 >file1 && rm -f file1.rej file2.rej && - if git apply --reject patch.1 - then - echo "succeeds with --reject?" - exit 1 - fi - + test_must_fail git apply --reject patch.1 && test_cmp file1 expected && cat file1.rej && - - if test -f file2.rej - then - echo "file2 should not have been touched" - exit 1 - fi + test_path_is_missing file2.rej ' test_expect_success 'apply with --reject should fail but update the file' ' @@ -103,25 +83,12 @@ test_expect_success 'apply with --reject should fail but update the file' ' cat saved.file1 >file1 && rm -f file1.rej file2.rej file2 && - if git apply --reject patch.2 >rejects - then - echo "succeeds with --reject?" - exit 1 - fi - - test -f file1 && { - echo "file1 still exists?" - exit 1 - } + test_must_fail git apply --reject patch.2 >rejects && + test_path_is_missing file1 && test_cmp file2 expected && cat file2.rej && - - if test -f file1.rej - then - echo "file2 should not have been touched" - exit 1 - fi + test_path_is_missing file1.rej ' @@ -130,25 +97,12 @@ test_expect_success 'the same test with --verbose' ' cat saved.file1 >file1 && rm -f file1.rej file2.rej file2 && - if git apply --reject --verbose patch.2 >rejects - then - echo "succeeds with --reject?" - exit 1 - fi - - test -f file1 && { - echo "file1 still exists?" - exit 1 - } + test_must_fail git apply --reject --verbose patch.2 >rejects && + test_path_is_missing file1 && test_cmp file2 expected && cat file2.rej && - - if test -f file1.rej - then - echo "file2 should not have been touched" - exit 1 - fi + test_path_is_missing file1.rej ' diff --git a/t/t4122-apply-symlink-inside.sh b/t/t4122-apply-symlink-inside.sh index 1779c0a568..4acb3f336e 100755 --- a/t/t4122-apply-symlink-inside.sh +++ b/t/t4122-apply-symlink-inside.sh @@ -3,17 +3,10 @@ test_description='apply to deeper directory without getting fooled with symlink' . ./test-lib.sh -lecho () { - for l_ - do - echo "$l_" - done -} - test_expect_success setup ' mkdir -p arch/i386/boot arch/x86_64 && - lecho 1 2 3 4 5 >arch/i386/boot/Makefile && + test_write_lines 1 2 3 4 5 >arch/i386/boot/Makefile && test_ln_s_add ../i386/boot arch/x86_64/boot && git add . && test_tick && @@ -22,7 +15,7 @@ test_expect_success setup ' rm arch/x86_64/boot && mkdir arch/x86_64/boot && - lecho 2 3 4 5 6 >arch/x86_64/boot/Makefile && + test_write_lines 2 3 4 5 6 >arch/x86_64/boot/Makefile && git add . && test_tick && git commit -a -m second && diff --git a/t/t4124-apply-ws-rule.sh b/t/t4124-apply-ws-rule.sh index c6474de4c8..d350065f25 100755 --- a/t/t4124-apply-ws-rule.sh +++ b/t/t4124-apply-ws-rule.sh @@ -99,9 +99,8 @@ test_expect_success 'whitespace=warn, default rule' ' test_expect_success 'whitespace=error-all, default rule' ' - apply_patch --whitespace=error-all && return 1 - test -s target && return 1 - : happy + test_must_fail apply_patch --whitespace=error-all && + ! test -s target ' diff --git a/t/t4151-am-abort.sh b/t/t4151-am-abort.sh index 1176bcccf3..8d90634ab8 100755 --- a/t/t4151-am-abort.sh +++ b/t/t4151-am-abort.sh @@ -20,7 +20,7 @@ test_expect_success setup ' echo $i >otherfile-$i && git add otherfile-$i && test_tick && - git commit -a -m $i || break + git commit -a -m $i || return 1 done && git format-patch --no-numbered initial && git checkout -b side initial && diff --git a/t/t4202-log.sh b/t/t4202-log.sh index 99ab7ca21f..1b2e981a00 100755 --- a/t/t4202-log.sh +++ b/t/t4202-log.sh @@ -113,11 +113,7 @@ test_expect_success 'diff-filter=M' ' actual=$(git log --pretty="format:%s" --diff-filter=M HEAD) && expect=$(echo second) && - test "$actual" = "$expect" || { - echo Oops - echo "Actual: $actual" - false - } + verbose test "$actual" = "$expect" ' @@ -125,11 +121,7 @@ test_expect_success 'diff-filter=D' ' actual=$(git log --pretty="format:%s" --diff-filter=D HEAD) && expect=$(echo sixth ; echo third) && - test "$actual" = "$expect" || { - echo Oops - echo "Actual: $actual" - false - } + verbose test "$actual" = "$expect" ' @@ -137,11 +129,7 @@ test_expect_success 'diff-filter=R' ' actual=$(git log -M --pretty="format:%s" --diff-filter=R HEAD) && expect=$(echo third) && - test "$actual" = "$expect" || { - echo Oops - echo "Actual: $actual" - false - } + verbose test "$actual" = "$expect" ' @@ -149,11 +137,7 @@ test_expect_success 'diff-filter=C' ' actual=$(git log -C -C --pretty="format:%s" --diff-filter=C HEAD) && expect=$(echo fourth) && - test "$actual" = "$expect" || { - echo Oops - echo "Actual: $actual" - false - } + verbose test "$actual" = "$expect" ' @@ -161,11 +145,7 @@ test_expect_success 'git log --follow' ' actual=$(git log --follow --pretty="format:%s" ichi) && expect=$(echo third ; echo second ; echo initial) && - test "$actual" = "$expect" || { - echo Oops - echo "Actual: $actual" - false - } + verbose test "$actual" = "$expect" ' @@ -212,6 +192,21 @@ test_expect_success 'log --grep' ' test_cmp expect actual ' +cat > expect << EOF +second +initial +EOF +test_expect_success 'log --invert-grep --grep' ' + git log --pretty="tformat:%s" --invert-grep --grep=th --grep=Sec >actual && + test_cmp expect actual +' + +test_expect_success 'log --invert-grep --grep -i' ' + echo initial >expect && + git log --pretty="tformat:%s" --invert-grep -i --grep=th --grep=Sec >actual && + test_cmp expect actual +' + test_expect_success 'log --grep option parsing' ' echo second >expect && git log -1 --pretty="tformat:%s" --grep sec >actual && @@ -466,7 +461,7 @@ test_expect_success 'log.decorate configuration' ' git log --oneline --no-decorate >actual && test_cmp expect.none actual && git log --oneline --decorate >actual && - test_cmp expect.short actual + test_cmp expect.short actual && test_unconfig log.decorate && git log --pretty=raw >expect.raw && @@ -872,4 +867,8 @@ test_expect_success GPG 'log --graph --show-signature for merged tag' ' grep "^| | gpg: Good signature" actual ' +test_expect_success 'log --graph --no-walk is forbidden' ' + test_must_fail git log --graph --no-walk +' + test_done diff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh index 6b8ad4f5b0..f8008b6a3d 100755 --- a/t/t4207-log-decoration-colors.sh +++ b/t/t4207-log-decoration-colors.sh @@ -44,10 +44,10 @@ test_expect_success setup ' ' cat >expected <<EOF -${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD${c_reset}${c_commit},\ +${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_HEAD}HEAD${c_reset}${c_commit} ->\ + ${c_reset}${c_branch}master${c_reset}${c_commit},\ ${c_reset}${c_tag}tag: v1.0${c_reset}${c_commit},\ - ${c_reset}${c_tag}tag: B${c_reset}${c_commit},\ - ${c_reset}${c_branch}master${c_reset}${c_commit})${c_reset} B + ${c_reset}${c_tag}tag: B${c_reset}${c_commit})${c_reset} B ${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_tag}tag: A1${c_reset}${c_commit},\ ${c_reset}${c_remoteBranch}other/master${c_reset}${c_commit})${c_reset} A1 ${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}${c_stash}refs/stash${c_reset}${c_commit})${c_reset}\ diff --git a/t/t4212-log-corrupt.sh b/t/t4212-log-corrupt.sh index 67bd8ec020..22aa8b7c0e 100755 --- a/t/t4212-log-corrupt.sh +++ b/t/t4212-log-corrupt.sh @@ -61,7 +61,7 @@ test_expect_success 'unparsable dates produce sentinel value' ' test_expect_success 'unparsable dates produce sentinel value (%ad)' ' commit=$(munge_author_date HEAD totally_bogus) && echo >expect && - git log -1 --format=%ad $commit >actual + git log -1 --format=%ad $commit >actual && test_cmp expect actual ' diff --git a/t/t5003-archive-zip.sh b/t/t5003-archive-zip.sh index c929db5633..14744b2a4b 100755 --- a/t/t5003-archive-zip.sh +++ b/t/t5003-archive-zip.sh @@ -33,6 +33,37 @@ check_zip() { test_expect_success UNZIP " validate file contents" " diff -r a ${dir_with_prefix}a " + + dir=eol_$1 + dir_with_prefix=$dir/$2 + extracted=${dir_with_prefix}a + original=a + + test_expect_success UNZIP " extract ZIP archive with EOL conversion" ' + (mkdir $dir && cd $dir && "$GIT_UNZIP" -a ../$zipfile) + ' + + test_expect_success UNZIP " validate that text files are converted" " + test_cmp_bin $extracted/text.cr $extracted/text.crlf && + test_cmp_bin $extracted/text.cr $extracted/text.lf + " + + test_expect_success UNZIP " validate that binary files are unchanged" " + test_cmp_bin $original/binary.cr $extracted/binary.cr && + test_cmp_bin $original/binary.crlf $extracted/binary.crlf && + test_cmp_bin $original/binary.lf $extracted/binary.lf + " + + test_expect_success UNZIP " validate that diff files are converted" " + test_cmp_bin $extracted/diff.cr $extracted/diff.crlf && + test_cmp_bin $extracted/diff.cr $extracted/diff.lf + " + + test_expect_success UNZIP " validate that -diff files are unchanged" " + test_cmp_bin $original/nodiff.cr $extracted/nodiff.cr && + test_cmp_bin $original/nodiff.crlf $extracted/nodiff.crlf && + test_cmp_bin $original/nodiff.lf $extracted/nodiff.lf + " } test_expect_success \ @@ -41,6 +72,18 @@ test_expect_success \ echo simple textfile >a/a && mkdir a/bin && cp /bin/sh a/bin && + printf "text\r" >a/text.cr && + printf "text\r\n" >a/text.crlf && + printf "text\n" >a/text.lf && + printf "text\r" >a/nodiff.cr && + printf "text\r\n" >a/nodiff.crlf && + printf "text\n" >a/nodiff.lf && + printf "\0\r" >a/binary.cr && + printf "\0\r\n" >a/binary.crlf && + printf "\0\n" >a/binary.lf && + printf "\0\r" >a/diff.cr && + printf "\0\r\n" >a/diff.crlf && + printf "\0\n" >a/diff.lf && printf "A\$Format:%s\$O" "$SUBSTFORMAT" >a/substfile1 && printf "A not substituted O" >a/substfile2 && (p=long_path_to_a_file && cd a && @@ -66,7 +109,9 @@ test_expect_success 'add files to repository' ' GIT_COMMITTER_DATE="2005-05-27 22:00" git commit -m initial ' -test_expect_success 'setup export-subst' ' +test_expect_success 'setup export-subst and diff attributes' ' + echo "a/nodiff.* -diff" >>.git/info/attributes && + echo "a/diff.* diff" >>.git/info/attributes && echo "substfile?" export-subst >>.git/info/attributes && git log --max-count=1 "--pretty=format:A${SUBSTFORMAT}O" HEAD \ >a/substfile1 diff --git a/t/t5004-archive-corner-cases.sh b/t/t5004-archive-corner-cases.sh index 305bcac6b7..654addaae3 100755 --- a/t/t5004-archive-corner-cases.sh +++ b/t/t5004-archive-corner-cases.sh @@ -66,8 +66,10 @@ test_expect_success UNZIP 'zip archive of empty tree is empty' ' # handle the empty repo at all, making our later check of its exit code # a no-op). But we cannot do anything reasonable except skip the test # on such platforms anyway, and this is the moral equivalent. - "$GIT_UNZIP" "$TEST_DIRECTORY"/t5004/empty.zip - expect_code=$? + { + "$GIT_UNZIP" "$TEST_DIRECTORY"/t5004/empty.zip + expect_code=$? + } && git archive --format=zip HEAD >empty.zip && make_dir extract && diff --git a/t/t5100-mailinfo.sh b/t/t5100-mailinfo.sh index 60df10f46a..e97cfb2ab8 100755 --- a/t/t5100-mailinfo.sh +++ b/t/t5100-mailinfo.sh @@ -34,7 +34,7 @@ do if test -f "$TEST_DIRECTORY"/t5100/msg$mail--no-inbody-headers then check_mailinfo $mail --no-inbody-headers - fi + fi && if test -f "$TEST_DIRECTORY"/t5100/msg$mail--message-id then check_mailinfo $mail --message-id diff --git a/t/t5500-fetch-pack.sh b/t/t5500-fetch-pack.sh index bd37f040b6..692d71738b 100755 --- a/t/t5500-fetch-pack.sh +++ b/t/t5500-fetch-pack.sh @@ -414,7 +414,7 @@ test_expect_success 'setup tests for the --stdin parameter' ' do git tag $head $head done && - cat >input <<-\EOF + cat >input <<-\EOF && refs/heads/C refs/heads/A refs/heads/D diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh index f30c03885c..4ca48f0276 100755 --- a/t/t5503-tagfollow.sh +++ b/t/t5503-tagfollow.sh @@ -139,8 +139,8 @@ EOF ' test_expect_success 'new clone fetch master and tags' ' - git branch -D cat - rm -f $U + test_might_fail git branch -D cat && + rm -f $U && ( mkdir clone2 && cd clone2 && diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index 17c6330f98..7a8499ce66 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -579,7 +579,7 @@ test_expect_success 'update with arguments' ' cd one && for b in $(git branch -r) do - git branch -r -d $b || break + git branch -r -d $b || exit 1 done && git remote add manduca ../mirror && git remote add megaloprepus ../mirror && @@ -622,7 +622,7 @@ test_expect_success 'update default' ' cd one && for b in $(git branch -r) do - git branch -r -d $b || break + git branch -r -d $b || exit 1 done && git config remote.drosophila.skipDefaultUpdate true && git remote update default && @@ -642,7 +642,7 @@ test_expect_success 'update default (overridden, with funny whitespace)' ' cd one && for b in $(git branch -r) do - git branch -r -d $b || break + git branch -r -d $b || exit 1 done && git config remotes.default "$(printf "\t drosophila \n")" && git remote update default && @@ -656,7 +656,7 @@ test_expect_success 'update (with remotes.default defined)' ' cd one && for b in $(git branch -r) do - git branch -r -d $b || break + git branch -r -d $b || exit 1 done && git config remotes.default "drosophila" && git remote update && diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index d78f3201f4..0ba9db0884 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -124,7 +124,7 @@ test_expect_success 'fetch --prune handles overlapping refspecs' ' git rev-parse origin/master && git rev-parse origin/pr/42 && - git config --unset-all remote.origin.fetch + git config --unset-all remote.origin.fetch && git config remote.origin.fetch refs/pull/*/head:refs/remotes/origin/pr/* && git config --add remote.origin.fetch refs/heads/*:refs/remotes/origin/* && @@ -596,7 +596,7 @@ test_configured_prune () { test_unconfig remote.origin.prune && git fetch && git rev-parse --verify refs/remotes/origin/newbranch - ) + ) && # now remove it git branch -d newbranch && diff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh index 321c3e5234..3bd9759e0f 100755 --- a/t/t5512-ls-remote.sh +++ b/t/t5512-ls-remote.sh @@ -103,8 +103,10 @@ test_expect_success 'confuses pattern as remote when no remote specified' ' ' test_expect_success 'die with non-2 for wrong repository even with --exit-code' ' - git ls-remote --exit-code ./no-such-repository ;# not && - status=$? && + { + git ls-remote --exit-code ./no-such-repository + status=$? + } && test $status != 2 && test $status != 0 ' diff --git a/t/t5514-fetch-multiple.sh b/t/t5514-fetch-multiple.sh index 0f8140957f..4b4b6673b8 100755 --- a/t/t5514-fetch-multiple.sh +++ b/t/t5514-fetch-multiple.sh @@ -120,7 +120,7 @@ test_expect_success 'git fetch --all (skipFetchAll)' ' (cd test4 && for b in $(git branch -r) do - git branch -r -d $b || break + git branch -r -d $b || exit 1 done && git remote add three ../three && git config remote.three.skipFetchAll true && @@ -144,7 +144,7 @@ test_expect_success 'git fetch --multiple (ignoring skipFetchAll)' ' (cd test4 && for b in $(git branch -r) do - git branch -r -d $b || break + git branch -r -d $b || exit 1 done && git fetch --multiple one two three && git branch -r > output && diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 050877f181..5e04d64109 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -1441,4 +1441,67 @@ test_expect_success 'receive.denyCurrentBranch = updateInstead' ' ' +test_expect_success 'updateInstead with push-to-checkout hook' ' + rm -fr testrepo && + git init testrepo && + ( + cd testrepo && + git pull .. master && + git reset --hard HEAD^^ && + git tag initial && + git config receive.denyCurrentBranch updateInstead && + write_script .git/hooks/push-to-checkout <<-\EOF + echo >&2 updating from $(git rev-parse HEAD) + echo >&2 updating to "$1" + + git update-index -q --refresh && + git read-tree -u -m HEAD "$1" || { + status=$? + echo >&2 read-tree failed + exit $status + } + EOF + ) && + + # Try pushing into a pristine + git push testrepo master && + ( + cd testrepo && + git diff --quiet && + git diff HEAD --quiet && + test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD) + ) && + + # Try pushing into a repository with conflicting change + ( + cd testrepo && + git reset --hard initial && + echo conflicting >path2 + ) && + test_must_fail git push testrepo master && + ( + cd testrepo && + test $(git rev-parse initial) = $(git rev-parse HEAD) && + test conflicting = "$(cat path2)" && + git diff-index --quiet --cached HEAD + ) && + + # Try pushing into a repository with unrelated change + ( + cd testrepo && + git reset --hard initial && + echo unrelated >path1 && + echo irrelevant >path5 && + git add path5 + ) && + git push testrepo master && + ( + cd testrepo && + test "$(cat path1)" = unrelated && + test "$(cat path5)" = irrelevant && + test "$(git diff --name-only --cached HEAD)" = path5 && + test $(git -C .. rev-parse HEAD) = $(git rev-parse HEAD) + ) +' + test_done diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh index ca5b027c55..a4532b00d6 100755 --- a/t/t5526-fetch-submodules.sh +++ b/t/t5526-fetch-submodules.sh @@ -216,7 +216,7 @@ test_expect_success "Recursion stops when no new submodule commits are fetched" head2=$(git rev-parse --short HEAD) && echo "Fetching submodule submodule" > expect.out.sub && echo "From $pwd/." > expect.err.sub && - echo " $head1..$head2 master -> origin/master" >> expect.err.sub + echo " $head1..$head2 master -> origin/master" >>expect.err.sub && head -2 expect.err >> expect.err.sub && ( cd downstream && @@ -315,7 +315,7 @@ test_expect_success "'--recurse-submodules=on-demand' doesn't recurse when no ne ) && head1=$(git rev-parse --short HEAD^) && git add subdir/deepsubmodule && - git commit -m "new deepsubmodule" + git commit -m "new deepsubmodule" && head2=$(git rev-parse --short HEAD) && echo "From $pwd/submodule" > ../expect.err.sub && echo " $head1..$head2 master -> origin/master" >> ../expect.err.sub @@ -337,7 +337,7 @@ test_expect_success "'--recurse-submodules=on-demand' recurses as deep as necess head2=$(git rev-parse --short HEAD) && tail -2 expect.err > expect.err.deepsub && echo "From $pwd/." > expect.err && - echo " $head1..$head2 master -> origin/master" >> expect.err + echo " $head1..$head2 master -> origin/master" >>expect.err && cat expect.err.sub >> expect.err && cat expect.err.deepsub >> expect.err && ( @@ -387,7 +387,7 @@ test_expect_success "'fetch.recurseSubmodules=on-demand' overrides global config git commit -m "new submodule" && head2=$(git rev-parse --short HEAD) && echo "From $pwd/." > expect.err.2 && - echo " $head1..$head2 master -> origin/master" >> expect.err.2 + echo " $head1..$head2 master -> origin/master" >>expect.err.2 && head -2 expect.err >> expect.err.2 && ( cd downstream && @@ -415,7 +415,7 @@ test_expect_success "'submodule.<sub>.fetchRecurseSubmodules=on-demand' override git commit -m "new submodule" && head2=$(git rev-parse --short HEAD) && echo "From $pwd/." > expect.err.2 && - echo " $head1..$head2 master -> origin/master" >> expect.err.2 + echo " $head1..$head2 master -> origin/master" >>expect.err.2 && head -2 expect.err >> expect.err.2 && ( cd downstream && diff --git a/t/t5528-push-default.sh b/t/t5528-push-default.sh index cc7451908b..73f4bb6346 100755 --- a/t/t5528-push-default.sh +++ b/t/t5528-push-default.sh @@ -26,7 +26,7 @@ check_pushed_commit () { # $2 = expected target branch for the push # $3 = [optional] repo to check for actual output (repo1 by default) test_push_success () { - git ${1:+-c push.default="$1"} push && + git ${1:+-c} ${1:+push.default="$1"} push && check_pushed_commit HEAD "$2" "$3" } @@ -34,7 +34,7 @@ test_push_success () { # check that push fails and does not modify any remote branch test_push_failure () { git --git-dir=repo1 log --no-walk --format='%h %s' --all >expect && - test_must_fail git ${1:+-c push.default="$1"} push && + test_must_fail git ${1:+-c} ${1:+push.default="$1"} push && git --git-dir=repo1 log --no-walk --format='%h %s' --all >actual && test_cmp expect actual } diff --git a/t/t5531-deep-submodule-push.sh b/t/t5531-deep-submodule-push.sh index 445bb5fe26..6507487c1a 100755 --- a/t/t5531-deep-submodule-push.sh +++ b/t/t5531-deep-submodule-push.sh @@ -104,7 +104,7 @@ test_expect_success 'push fails when commit on multiple branches if one branch h ' test_expect_success 'push succeeds if submodule has no remote and is on the first superproject commit' ' - git init --bare a + git init --bare a && git clone a a1 && ( cd a1 && diff --git a/t/t5533-push-cas.sh b/t/t5533-push-cas.sh index ba20d83333..c402d8d3d7 100755 --- a/t/t5533-push-cas.sh +++ b/t/t5533-push-cas.sh @@ -14,7 +14,7 @@ setup_srcdst_basic () { } test_expect_success setup ' - : create template repository + # create template repository test_commit A && test_commit B && test_commit C @@ -159,7 +159,7 @@ test_expect_success 'cover everything with default force-with-lease (protected)' ( cd src && git branch naster master^ - ) + ) && git ls-remote src refs/heads/\* >expect && ( cd dst && @@ -174,7 +174,7 @@ test_expect_success 'cover everything with default force-with-lease (allowed)' ' ( cd src && git branch naster master^ - ) + ) && ( cd dst && git fetch && diff --git a/t/t5540-http-push-webdav.sh b/t/t5540-http-push-webdav.sh index 8d7b3c57e3..88ff5a49e4 100755 --- a/t/t5540-http-push-webdav.sh +++ b/t/t5540-http-push-webdav.sh @@ -169,7 +169,7 @@ test_expect_failure 'push to password-protected repository (no user in URL)' ' test_commit pw-nouser && set_askpass user@host pass@host && git push "$HTTPD_URL/auth/dumb/test_repo.git" HEAD && - expect_askpass both user@host + expect_askpass both user@host && git rev-parse --verify HEAD >expect && git --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git" \ rev-parse --verify HEAD >actual && diff --git a/t/t5541-http-push-smart.sh b/t/t5541-http-push-smart.sh index d2c681ebfd..9cf27e8c99 100755 --- a/t/t5541-http-push-smart.sh +++ b/t/t5541-http-push-smart.sh @@ -158,7 +158,7 @@ test_http_push_nonff "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \ test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper' ' # create a dissimilarly-named remote ref so that git is unable to match the # two refs (viz. local, remote) unless an explicit refspec is provided. - git push origin master:retsam + git push origin master:retsam && echo "change changed" > path2 && git commit -a -m path2 --amend && @@ -324,12 +324,6 @@ test_expect_success 'push into half-auth-complete requires password' ' test_cmp expect actual ' -run_with_limited_cmdline () { - (ulimit -s 128 && "$@") -} - -test_lazy_prereq CMDLINE_LIMIT 'run_with_limited_cmdline true' - test_expect_success CMDLINE_LIMIT 'push 2000 tags over http' ' sha1=$(git rev-parse HEAD) && test_seq 2000 | diff --git a/t/t5543-atomic-push.sh b/t/t5543-atomic-push.sh new file mode 100755 index 0000000000..3480b33007 --- /dev/null +++ b/t/t5543-atomic-push.sh @@ -0,0 +1,194 @@ +#!/bin/sh + +test_description='pushing to a repository using the atomic push option' + +. ./test-lib.sh + +mk_repo_pair () { + rm -rf workbench upstream && + test_create_repo upstream && + test_create_repo workbench && + ( + cd upstream && + git config receive.denyCurrentBranch warn + ) && + ( + cd workbench && + git remote add up ../upstream + ) +} + +# Compare the ref ($1) in upstream with a ref value from workbench ($2) +# i.e. test_refs second HEAD@{2} +test_refs () { + test $# = 2 && + git -C upstream rev-parse --verify "$1" >expect && + git -C workbench rev-parse --verify "$2" >actual && + test_cmp expect actual +} + +test_expect_success 'atomic push works for a single branch' ' + mk_repo_pair && + ( + cd workbench && + test_commit one && + git push --mirror up && + test_commit two && + git push --atomic up master + ) && + test_refs master master +' + +test_expect_success 'atomic push works for two branches' ' + mk_repo_pair && + ( + cd workbench && + test_commit one && + git branch second && + git push --mirror up && + test_commit two && + git checkout second && + test_commit three && + git push --atomic up master second + ) && + test_refs master master && + test_refs second second +' + +test_expect_success 'atomic push works in combination with --mirror' ' + mk_repo_pair && + ( + cd workbench && + test_commit one && + git checkout -b second && + test_commit two && + git push --atomic --mirror up + ) && + test_refs master master && + test_refs second second +' + +test_expect_success 'atomic push works in combination with --force' ' + mk_repo_pair && + ( + cd workbench && + test_commit one && + git branch second master && + test_commit two_a && + git checkout second && + test_commit two_b && + test_commit three_b && + test_commit four && + git push --mirror up && + # The actual test is below + git checkout master && + test_commit three_a && + git checkout second && + git reset --hard HEAD^ && + git push --force --atomic up master second + ) && + test_refs master master && + test_refs second second +' + +# set up two branches where master can be pushed but second can not +# (non-fast-forward). Since second can not be pushed the whole operation +# will fail and leave master untouched. +test_expect_success 'atomic push fails if one branch fails' ' + mk_repo_pair && + ( + cd workbench && + test_commit one && + git checkout -b second master && + test_commit two && + test_commit three && + test_commit four && + git push --mirror up && + git reset --hard HEAD~2 && + test_commit five && + git checkout master && + test_commit six && + test_must_fail git push --atomic --all up + ) && + test_refs master HEAD@{7} && + test_refs second HEAD@{4} +' + +test_expect_success 'atomic push fails if one tag fails remotely' ' + # prepare the repo + mk_repo_pair && + ( + cd workbench && + test_commit one && + git checkout -b second master && + test_commit two && + git push --mirror up + ) && + # a third party modifies the server side: + ( + cd upstream && + git checkout second && + git tag test_tag second + ) && + # see if we can now push both branches. + ( + cd workbench && + git checkout master && + test_commit three && + git checkout second && + test_commit four && + git tag test_tag && + test_must_fail git push --tags --atomic up master second + ) && + test_refs master HEAD@{3} && + test_refs second HEAD@{1} +' + +test_expect_success 'atomic push obeys update hook preventing a branch to be pushed' ' + mk_repo_pair && + ( + cd workbench && + test_commit one && + git checkout -b second master && + test_commit two && + git push --mirror up + ) && + ( + cd upstream && + HOOKDIR="$(git rev-parse --git-dir)/hooks" && + HOOK="$HOOKDIR/update" && + mkdir -p "$HOOKDIR" && + write_script "$HOOK" <<-\EOF + # only allow update to master from now on + test "$1" = "refs/heads/master" + EOF + ) && + ( + cd workbench && + git checkout master && + test_commit three && + git checkout second && + test_commit four && + test_must_fail git push --atomic up master second + ) && + test_refs master HEAD@{3} && + test_refs second HEAD@{1} +' + +test_expect_success 'atomic push is not advertised if configured' ' + mk_repo_pair && + ( + cd upstream + git config receive.advertiseatomic 0 + ) && + ( + cd workbench && + test_commit one && + git push --mirror up && + test_commit two && + test_must_fail git push --atomic up master + ) && + test_refs master HEAD@{1} +' + +test_done diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh index 6da9422431..3d11b7a6bb 100755 --- a/t/t5550-http-fetch-dumb.sh +++ b/t/t5550-http-fetch-dumb.sh @@ -15,7 +15,7 @@ test_expect_success 'setup repository' ' git config push.default matching && echo content1 >file && git add file && - git commit -m one + git commit -m one && echo content2 >file && git add file && git commit -m two @@ -184,8 +184,8 @@ test_expect_success 'fetch can handle previously-fetched .idx files' ' ' test_expect_success 'did not use upload-pack service' ' - grep '/git-upload-pack' <"$HTTPD_ROOT_PATH"/access.log >act - : >exp + test_might_fail grep '/git-upload-pack' <"$HTTPD_ROOT_PATH"/access.log >act && + : >exp && test_cmp exp act ' @@ -214,5 +214,47 @@ test_expect_success 'reencoding is robust to whitespace oddities' ' grep "this is the error message" stderr ' +check_language () { + case "$2" in + '') + >expect + ;; + ?*) + echo "Accept-Language: $1" >expect + ;; + esac && + GIT_CURL_VERBOSE=1 \ + LANGUAGE=$2 \ + git ls-remote "$HTTPD_URL/dumb/repo.git" >output 2>&1 && + tr -d '\015' <output | + sort -u | + sed -ne '/^Accept-Language:/ p' >actual && + test_cmp expect actual +} + +test_expect_success 'git client sends Accept-Language based on LANGUAGE' ' + check_language "ko-KR, *;q=0.9" ko_KR.UTF-8' + +test_expect_success 'git client sends Accept-Language correctly with unordinary LANGUAGE' ' + check_language "ko-KR, *;q=0.9" "ko_KR:" && + check_language "ko-KR, en-US;q=0.9, *;q=0.8" "ko_KR::en_US" && + check_language "ko-KR, *;q=0.9" ":::ko_KR" && + check_language "ko-KR, en-US;q=0.9, *;q=0.8" "ko_KR!!:en_US" && + check_language "ko-KR, ja-JP;q=0.9, *;q=0.8" "ko_KR en_US:ja_JP"' + +test_expect_success 'git client sends Accept-Language with many preferred languages' ' + check_language "ko-KR, en-US;q=0.9, fr-CA;q=0.8, de;q=0.7, sr;q=0.6, \ +ja;q=0.5, zh;q=0.4, sv;q=0.3, pt;q=0.2, *;q=0.1" \ + ko_KR.EUC-KR:en_US.UTF-8:fr_CA:de.UTF-8@euro:sr@latin:ja:zh:sv:pt && + check_language "ko-KR, en-US;q=0.99, fr-CA;q=0.98, de;q=0.97, sr;q=0.96, \ +ja;q=0.95, zh;q=0.94, sv;q=0.93, pt;q=0.92, nb;q=0.91, *;q=0.90" \ + ko_KR.EUC-KR:en_US.UTF-8:fr_CA:de.UTF-8@euro:sr@latin:ja:zh:sv:pt:nb +' + +test_expect_success 'git client does not send an empty Accept-Language' ' + GIT_CURL_VERBOSE=1 LANGUAGE= git ls-remote "$HTTPD_URL/dumb/repo.git" 2>stderr && + ! grep "^Accept-Language:" stderr +' + stop_httpd test_done diff --git a/t/t5551-http-fetch-smart.sh b/t/t5551-http-fetch-smart.sh index b97077351d..66439e58fc 100755 --- a/t/t5551-http-fetch-smart.sh +++ b/t/t5551-http-fetch-smart.sh @@ -83,7 +83,7 @@ test_expect_success 'clone http repository' ' test_expect_success 'fetch changes via http' ' echo content >>file && git commit -a -m two && - git push public + git push public && (cd clone && git pull) && test_cmp file clone/file ' @@ -169,7 +169,7 @@ test_expect_success 'GIT_SMART_HTTP can disable smart http' ' ' test_expect_success 'invalid Content-Type rejected' ' - test_must_fail git clone $HTTPD_URL/broken_smart/repo.git 2>actual + test_must_fail git clone $HTTPD_URL/broken_smart/repo.git 2>actual && grep "not valid:" actual ' @@ -209,7 +209,7 @@ test_expect_success 'cookies stored in http.cookiefile when http.savecookies set git config http.cookiefile cookies.txt && git config http.savecookies true && git ls-remote $HTTPD_URL/smart_cookies/repo.git master && - tail -3 cookies.txt > cookies_tail.txt + tail -3 cookies.txt >cookies_tail.txt && test_cmp expect_cookies.txt cookies_tail.txt ' @@ -224,10 +224,10 @@ test_expect_success 'transfer.hiderefs works over smart-http' ' git -C hidden.git rev-parse --verify b ' -test_expect_success EXPENSIVE 'create 50,000 tags in the repo' ' +test_expect_success 'create 2,000 tags in the repo' ' ( cd "$HTTPD_DOCUMENT_ROOT_PATH/repo.git" && - for i in `test_seq 50000` + for i in $(test_seq 2000) do echo "commit refs/heads/too-many-refs" echo "mark :$i" @@ -248,13 +248,22 @@ test_expect_success EXPENSIVE 'create 50,000 tags in the repo' ' ) ' -test_expect_success EXPENSIVE 'clone the 50,000 tag repo to check OS command line overflow' ' - git clone $HTTPD_URL/smart/repo.git too-many-refs && +test_expect_success CMDLINE_LIMIT \ + 'clone the 2,000 tag repo to check OS command line overflow' ' + run_with_limited_cmdline git clone $HTTPD_URL/smart/repo.git too-many-refs && ( cd too-many-refs && - test $(git for-each-ref refs/tags | wc -l) = 50000 + git for-each-ref refs/tags >actual && + test_line_count = 2000 actual ) ' +test_expect_success 'large fetch-pack requests can be split across POSTs' ' + GIT_CURL_VERBOSE=1 git -c http.postbuffer=65536 \ + clone --bare "$HTTPD_URL/smart/repo.git" split.git 2>err && + grep "^> POST" err >posts && + test_line_count = 2 posts +' + stop_httpd test_done diff --git a/t/t5709-clone-refspec.sh b/t/t5709-clone-refspec.sh index 6f1ea984d4..7ace2535c8 100755 --- a/t/t5709-clone-refspec.sh +++ b/t/t5709-clone-refspec.sh @@ -147,7 +147,7 @@ test_expect_success '--single-branch with detached' ' git for-each-ref refs/remotes/origin | sed -e "/HEAD$/d" \ -e "s|/remotes/origin/|/heads/|" >../actual - ) + ) && # nothing >expect && test_cmp expect actual diff --git a/t/t6000-rev-list-misc.sh b/t/t6000-rev-list-misc.sh index 2602086303..3e752ce032 100755 --- a/t/t6000-rev-list-misc.sh +++ b/t/t6000-rev-list-misc.sh @@ -42,7 +42,7 @@ test_expect_success 'rev-list --objects with pathspecs and copied files' ' test_tick && git commit -m that && - ONE=$(git rev-parse HEAD:one) + ONE=$(git rev-parse HEAD:one) && git rev-list --objects HEAD two >output && grep "$ONE two/three" output && ! grep one output @@ -85,7 +85,7 @@ test_expect_success 'rev-list can show index objects' ' # - we do not show the root tree; since we updated the index, it # does not have a valid cache tree # - cat >expect <<-\EOF + cat >expect <<-\EOF && 8e4020bb5a8d8c873b25de15933e75cc0fc275df one d9d3a7417b9605cfd88ee6306b28dadc29e6ab08 only-in-index 9200b628cf9dc883a85a7abc8d6e6730baee589c two @@ -96,4 +96,8 @@ test_expect_success 'rev-list can show index objects' ' test_cmp expect actual ' +test_expect_success '--bisect and --first-parent can not be combined' ' + test_must_fail git rev-list --bisect --first-parent HEAD +' + test_done diff --git a/t/t6006-rev-list-format.sh b/t/t6006-rev-list-format.sh index a02a45afd2..b77d4c97c1 100755 --- a/t/t6006-rev-list-format.sh +++ b/t/t6006-rev-list-format.sh @@ -45,7 +45,7 @@ test_expect_success 'setup' ' head2=$(git rev-parse --verify HEAD) && head2_short=$(git rev-parse --verify --short $head2) && tree2=$(git rev-parse --verify HEAD:) && - tree2_short=$(git rev-parse --verify --short $tree2) + tree2_short=$(git rev-parse --verify --short $tree2) && git config --unset i18n.commitEncoding ' @@ -358,10 +358,7 @@ test_expect_success 'empty email' ' test_tick && C=$(GIT_AUTHOR_EMAIL= git commit-tree HEAD^{tree} </dev/null) && A=$(git show --pretty=format:%an,%ae,%ad%n -s $C) && - test "$A" = "A U Thor,,Thu Apr 7 15:14:13 2005 -0700" || { - echo "Eh? $A" >failure - false - } + verbose test "$A" = "A U Thor,,Thu Apr 7 15:14:13 2005 -0700" ' test_expect_success 'del LF before empty (1)' ' diff --git a/t/t6012-rev-list-simplify.sh b/t/t6012-rev-list-simplify.sh index fde5e712eb..b89cd6b07a 100755 --- a/t/t6012-rev-list-simplify.sh +++ b/t/t6012-rev-list-simplify.sh @@ -95,10 +95,7 @@ check_outcome () { git log --pretty="$FMT" --parents $param | unnote >actual && sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual && - test_cmp expect check || { - cat actual - false - } + test_cmp expect check ' } @@ -121,10 +118,7 @@ test_expect_success 'full history simplification without parent' ' git log --pretty="$FMT" --full-history E -- lost | unnote >actual && sed -e "s/^.* \([^ ]*\) .*/\1/" >check <actual && - test_cmp expect check || { - cat actual - false - } + test_cmp expect check ' test_expect_success '--full-diff is not affected by --parents' ' diff --git a/t/t6014-rev-list-all.sh b/t/t6014-rev-list-all.sh index 991ab4a65b..c9bedd29cb 100755 --- a/t/t6014-rev-list-all.sh +++ b/t/t6014-rev-list-all.sh @@ -35,4 +35,8 @@ test_expect_success 'repack does not lose detached HEAD' ' ' +test_expect_success 'rev-list --graph --no-walk is forbidden' ' + test_must_fail git rev-list --graph --no-walk HEAD +' + test_done diff --git a/t/t6022-merge-rename.sh b/t/t6022-merge-rename.sh index a89dfbef08..05ebba7afa 100755 --- a/t/t6022-merge-rename.sh +++ b/t/t6022-merge-rename.sh @@ -685,7 +685,7 @@ test_expect_success 'setup avoid unnecessary update, dir->(file,nothing)' ' git add -A && git commit -mA && - git checkout -b side + git checkout -b side && git rm -rf df && git commit -mB && @@ -716,7 +716,7 @@ test_expect_success 'setup avoid unnecessary update, modify/delete' ' git add -A && git commit -mA && - git checkout -b side + git checkout -b side && git rm -f file && git commit -m "Delete file" && @@ -745,7 +745,7 @@ test_expect_success 'setup avoid unnecessary update, rename/add-dest' ' git add -A && git commit -mA && - git checkout -b side + git checkout -b side && cp file newfile && git add -A && git commit -m "Add file copy" && diff --git a/t/t6026-merge-attr.sh b/t/t6026-merge-attr.sh index 5e439972be..3c21938a68 100755 --- a/t/t6026-merge-attr.sh +++ b/t/t6026-merge-attr.sh @@ -11,7 +11,7 @@ test_expect_success setup ' for f in text binary union do - echo Initial >$f && git add $f || break + echo Initial >$f && git add $f || return 1 done && test_tick && git commit -m Initial && @@ -19,7 +19,7 @@ test_expect_success setup ' git branch side && for f in text binary union do - echo Master >>$f && git add $f || break + echo Master >>$f && git add $f || return 1 done && test_tick && git commit -m Master && @@ -27,7 +27,7 @@ test_expect_success setup ' git checkout side && for f in text binary union do - echo Side >>$f && git add $f || break + echo Side >>$f && git add $f || return 1 done && test_tick && git commit -m Side && diff --git a/t/t6028-merge-up-to-date.sh b/t/t6028-merge-up-to-date.sh index c518e9c30c..7763c1ba98 100755 --- a/t/t6028-merge-up-to-date.sh +++ b/t/t6028-merge-up-to-date.sh @@ -83,7 +83,7 @@ test_expect_success 'merge fast-forward octopus' ' git reset --hard c0 && test_tick && - git merge c1 c2 + git merge c1 c2 && expect=$(git rev-parse c2) && current=$(git rev-parse HEAD) && test "$expect" = "$current" diff --git a/t/t6030-bisect-porcelain.sh b/t/t6030-bisect-porcelain.sh index e6abe65d5c..06b4868109 100755 --- a/t/t6030-bisect-porcelain.sh +++ b/t/t6030-bisect-porcelain.sh @@ -52,15 +52,8 @@ test_expect_success 'bisect starts with only one bad' ' test_expect_success 'bisect does not start with only one good' ' git bisect reset && git bisect start && - git bisect good $HASH1 || return 1 - - if git bisect next - then - echo Oops, should have failed. - false - else - : - fi + git bisect good $HASH1 && + test_must_fail git bisect next ' test_expect_success 'bisect start with one bad and good' ' @@ -191,34 +184,27 @@ test_expect_success 'bisect start: no ".git/BISECT_START" if checkout error' ' # but $HASH2 is bad, # so we should find $HASH2 as the first bad commit test_expect_success 'bisect skip: successful result' ' + test_when_finished git bisect reset && git bisect reset && git bisect start $HASH4 $HASH1 && git bisect skip && git bisect bad > my_bisect_log.txt && - grep "$HASH2 is the first bad commit" my_bisect_log.txt && - git bisect reset + grep "$HASH2 is the first bad commit" my_bisect_log.txt ' # $HASH1 is good, $HASH4 is bad, we skip $HASH3 and $HASH2 # so we should not be able to tell the first bad commit # among $HASH2, $HASH3 and $HASH4 test_expect_success 'bisect skip: cannot tell between 3 commits' ' + test_when_finished git bisect reset && git bisect start $HASH4 $HASH1 && - git bisect skip || return 1 - - if git bisect skip > my_bisect_log.txt - then - echo Oops, should have failed. - false - else - test $? -eq 2 && - grep "first bad commit could be any of" my_bisect_log.txt && - ! grep $HASH1 my_bisect_log.txt && - grep $HASH2 my_bisect_log.txt && - grep $HASH3 my_bisect_log.txt && - grep $HASH4 my_bisect_log.txt && - git bisect reset - fi + git bisect skip && + test_expect_code 2 git bisect skip >my_bisect_log.txt && + grep "first bad commit could be any of" my_bisect_log.txt && + ! grep $HASH1 my_bisect_log.txt && + grep $HASH2 my_bisect_log.txt && + grep $HASH3 my_bisect_log.txt && + grep $HASH4 my_bisect_log.txt ' # $HASH1 is good, $HASH4 is bad, we skip $HASH3 @@ -226,22 +212,15 @@ test_expect_success 'bisect skip: cannot tell between 3 commits' ' # so we should not be able to tell the first bad commit # among $HASH3 and $HASH4 test_expect_success 'bisect skip: cannot tell between 2 commits' ' + test_when_finished git bisect reset && git bisect start $HASH4 $HASH1 && - git bisect skip || return 1 - - if git bisect good > my_bisect_log.txt - then - echo Oops, should have failed. - false - else - test $? -eq 2 && - grep "first bad commit could be any of" my_bisect_log.txt && - ! grep $HASH1 my_bisect_log.txt && - ! grep $HASH2 my_bisect_log.txt && - grep $HASH3 my_bisect_log.txt && - grep $HASH4 my_bisect_log.txt && - git bisect reset - fi + git bisect skip && + test_expect_code 2 git bisect good >my_bisect_log.txt && + grep "first bad commit could be any of" my_bisect_log.txt && + ! grep $HASH1 my_bisect_log.txt && + ! grep $HASH2 my_bisect_log.txt && + grep $HASH3 my_bisect_log.txt && + grep $HASH4 my_bisect_log.txt ' # $HASH1 is good, $HASH4 is both skipped and bad, we skip $HASH3 @@ -249,24 +228,18 @@ test_expect_success 'bisect skip: cannot tell between 2 commits' ' # so we should not be able to tell the first bad commit # among $HASH3 and $HASH4 test_expect_success 'bisect skip: with commit both bad and skipped' ' + test_when_finished git bisect reset && git bisect start && git bisect skip && git bisect bad && git bisect good $HASH1 && git bisect skip && - if git bisect good > my_bisect_log.txt - then - echo Oops, should have failed. - false - else - test $? -eq 2 && - grep "first bad commit could be any of" my_bisect_log.txt && - ! grep $HASH1 my_bisect_log.txt && - ! grep $HASH2 my_bisect_log.txt && - grep $HASH3 my_bisect_log.txt && - grep $HASH4 my_bisect_log.txt && - git bisect reset - fi + test_expect_code 2 git bisect good >my_bisect_log.txt && + grep "first bad commit could be any of" my_bisect_log.txt && + ! grep $HASH1 my_bisect_log.txt && + ! grep $HASH2 my_bisect_log.txt && + grep $HASH3 my_bisect_log.txt && + grep $HASH4 my_bisect_log.txt ' # We want to automatically find the commit that @@ -601,8 +574,7 @@ test_expect_success 'test bisection on bare repo - --no-checkout specified' ' git bisect bad $HASH4 && git bisect run eval \ "test \$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \ - >../nocheckout.log && - git bisect reset + >../nocheckout.log ) && grep "$HASH3 is the first bad commit" nocheckout.log ' @@ -617,8 +589,7 @@ test_expect_success 'test bisection on bare repo - --no-checkout defaulted' ' git bisect bad $HASH4 && git bisect run eval \ "test \$(git rev-list BISECT_HEAD ^$HASH2 --max-count=1 | wc -l) = 0" \ - >../defaulted.log && - git bisect reset + >../defaulted.log ) && grep "$HASH3 is the first bad commit" defaulted.log ' @@ -642,14 +613,14 @@ test_expect_success 'broken branch creation' ' mkdir missing && :> missing/MISSING && git add missing/MISSING && - git commit -m "6(broken): Added file that will be deleted" + git commit -m "6(broken): Added file that will be deleted" && git tag BROKEN_HASH6 && add_line_into_file "7(broken): second line on a broken branch" hello2 && git tag BROKEN_HASH7 && add_line_into_file "8(broken): third line on a broken branch" hello2 && git tag BROKEN_HASH8 && git rm missing/MISSING && - git commit -m "9(broken): Remove missing file" + git commit -m "9(broken): Remove missing file" && git tag BROKEN_HASH9 && rm .git/objects/39/f7e61a724187ab767d2e08442d9b6b9dab587d ' diff --git a/t/t6032-merge-large-rename.sh b/t/t6032-merge-large-rename.sh index 15beecc3c6..0f79268917 100755 --- a/t/t6032-merge-large-rename.sh +++ b/t/t6032-merge-large-rename.sh @@ -28,10 +28,10 @@ make_text() { test_rename() { test_expect_success "rename ($1, $2)" ' - n='$1' - expect='$2' + n='$1' && + expect='$2' && git checkout -f master && - git branch -D test$n || true && + test_might_fail git branch -D test$n && git reset --hard initial && for i in $(count $n); do make_text $i initial initial >$i diff --git a/t/t6034-merge-rename-nocruft.sh b/t/t6034-merge-rename-nocruft.sh index 65be95fbaa..89871aa5b0 100755 --- a/t/t6034-merge-rename-nocruft.sh +++ b/t/t6034-merge-rename-nocruft.sh @@ -73,33 +73,12 @@ test_expect_success 'merge white into red (A->B,M->N)' \ ' git checkout -b red-white red && git merge white && - git write-tree >/dev/null || { - echo "BAD: merge did not complete" - return 1 - } - - test -f B || { - echo "BAD: B does not exist in working directory" - return 1 - } - test -f N || { - echo "BAD: N does not exist in working directory" - return 1 - } - test -f R || { - echo "BAD: R does not exist in working directory" - return 1 - } - - test -f A && { - echo "BAD: A still exists in working directory" - return 1 - } - test -f M && { - echo "BAD: M still exists in working directory" - return 1 - } - return 0 + git write-tree && + test_path_is_file B && + test_path_is_file N && + test_path_is_file R && + test_path_is_missing A && + test_path_is_missing M ' # This test broke in 8371234ecaaf6e14fe3f2082a855eff1bbd79ae9 @@ -108,32 +87,13 @@ test_expect_success 'merge blue into white (A->B, mod A, A untracked)' \ git checkout -b white-blue white && echo dirty >A && git merge blue && - git write-tree >/dev/null || { - echo "BAD: merge did not complete" - return 1 - } - - test -f A || { - echo "BAD: A does not exist in working directory" - return 1 - } - test `cat A` = dirty || { - echo "BAD: A content is wrong" - return 1 - } - test -f B || { - echo "BAD: B does not exist in working directory" - return 1 - } - test -f N || { - echo "BAD: N does not exist in working directory" - return 1 - } - test -f M && { - echo "BAD: M still exists in working directory" - return 1 - } - return 0 + git write-tree && + test_path_is_file A && + echo dirty >expect && + test_cmp expect A && + test_path_is_file B && + test_path_is_file N && + test_path_is_missing M ' test_done diff --git a/t/t6036-recursive-corner-cases.sh b/t/t6036-recursive-corner-cases.sh index a86087be95..9d6621c056 100755 --- a/t/t6036-recursive-corner-cases.sh +++ b/t/t6036-recursive-corner-cases.sh @@ -86,7 +86,7 @@ test_expect_success 'setup criss-cross + rename merges with basic modification' rm -rf .git && git init && - ten="0 1 2 3 4 5 6 7 8 9" + ten="0 1 2 3 4 5 6 7 8 9" && for i in $ten do echo line $i in a sample file @@ -195,12 +195,7 @@ test_expect_success 'git detects differently handled merges conflict' ' git reset --hard && git checkout D^0 && - git merge -s recursive E^0 && { - echo "BAD: should have conflicted" - test "Incorrectly merged content" = "$(cat new_a)" && - echo "BAD: Silently accepted wrong content" - return 1 - } + test_must_fail git merge -s recursive E^0 && test 3 = $(git ls-files -s | wc -l) && test 3 = $(git ls-files -u | wc -l) && @@ -533,7 +528,7 @@ test_expect_success 'merge of E2 & D fails but has appropriate contents' ' test $(git rev-parse :3:a) = $(git rev-parse B:a) && test $(git rev-parse :2:a/file) = $(git rev-parse E2:a/file) && - test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) + test $(git rev-parse :1:a/file) = $(git rev-parse C:a/file) && test $(git rev-parse :0:ignore-me) = $(git rev-parse A:ignore-me) && test -f a~D^0 diff --git a/t/t6039-merge-ignorecase.sh b/t/t6039-merge-ignorecase.sh index a977653147..531850d834 100755 --- a/t/t6039-merge-ignorecase.sh +++ b/t/t6039-merge-ignorecase.sh @@ -15,7 +15,7 @@ test_expect_success 'merge with case-changing rename' ' >TestCase && git add TestCase && git commit -m "add TestCase" && - git tag baseline + git tag baseline && git checkout -b with-camel && >foo && git add foo && diff --git a/t/t6040-tracking-info.sh b/t/t6040-tracking-info.sh index 7ac8fd06c3..3d5c238c81 100755 --- a/t/t6040-tracking-info.sh +++ b/t/t6040-tracking-info.sh @@ -12,10 +12,9 @@ advance () { } test_expect_success setup ' - for i in a b c; - do - advance $i || break - done && + advance a && + advance b && + advance c && git clone . test && ( cd test && diff --git a/t/t6111-rev-list-treesame.sh b/t/t6111-rev-list-treesame.sh index 88b84dfa73..32474c23d3 100755 --- a/t/t6111-rev-list-treesame.sh +++ b/t/t6111-rev-list-treesame.sh @@ -58,7 +58,7 @@ test_expect_success setup ' git checkout master && test_tick && git merge --no-ff fiddler-branch && - note K + note K && test_commit "file=Part 1" file "Part 1" L && @@ -92,10 +92,7 @@ check_outcome () { git log --format="$FMT" $param | unnote >actual && sed -e "$munge_actual" <actual >check && - test_cmp expect check || { - cat actual - false - } + test_cmp expect check ' } diff --git a/t/t6132-pathspec-exclude.sh b/t/t6132-pathspec-exclude.sh index 62049be0c7..e1e1b1fa38 100755 --- a/t/t6132-pathspec-exclude.sh +++ b/t/t6132-pathspec-exclude.sh @@ -30,7 +30,7 @@ test_expect_success 'exclude only should error out' ' ' test_expect_success 't_e_i() exclude sub' ' - git log --oneline --format=%s -- . ":(exclude)sub" >actual + git log --oneline --format=%s -- . ":(exclude)sub" >actual && cat <<EOF >expect && sub2/file file @@ -39,7 +39,7 @@ EOF ' test_expect_success 't_e_i() exclude sub/sub/file' ' - git log --oneline --format=%s -- . ":(exclude)sub/sub/file" >actual + git log --oneline --format=%s -- . ":(exclude)sub/sub/file" >actual && cat <<EOF >expect && sub2/file sub/sub/sub/file @@ -51,7 +51,7 @@ EOF ' test_expect_success 't_e_i() exclude sub using mnemonic' ' - git log --oneline --format=%s -- . ":!sub" >actual + git log --oneline --format=%s -- . ":!sub" >actual && cat <<EOF >expect && sub2/file file @@ -60,7 +60,7 @@ EOF ' test_expect_success 't_e_i() exclude :(icase)SUB' ' - git log --oneline --format=%s -- . ":(exclude,icase)SUB" >actual + git log --oneline --format=%s -- . ":(exclude,icase)SUB" >actual && cat <<EOF >expect && sub2/file file @@ -71,7 +71,7 @@ EOF test_expect_success 't_e_i() exclude sub2 from sub' ' ( cd sub && - git log --oneline --format=%s -- :/ ":/!sub2" >actual + git log --oneline --format=%s -- :/ ":/!sub2" >actual && cat <<EOF >expect && sub/sub/sub/file sub/file2 @@ -84,7 +84,7 @@ EOF ' test_expect_success 't_e_i() exclude sub/*file' ' - git log --oneline --format=%s -- . ":(exclude)sub/*file" >actual + git log --oneline --format=%s -- . ":(exclude)sub/*file" >actual && cat <<EOF >expect && sub2/file sub/file2 @@ -94,7 +94,7 @@ EOF ' test_expect_success 't_e_i() exclude :(glob)sub/*/file' ' - git log --oneline --format=%s -- . ":(exclude,glob)sub/*/file" >actual + git log --oneline --format=%s -- . ":(exclude,glob)sub/*/file" >actual && cat <<EOF >expect && sub2/file sub/sub/sub/file @@ -106,7 +106,7 @@ EOF ' test_expect_success 'm_p_d() exclude sub' ' - git ls-files -- . ":(exclude)sub" >actual + git ls-files -- . ":(exclude)sub" >actual && cat <<EOF >expect && file sub2/file @@ -115,7 +115,7 @@ EOF ' test_expect_success 'm_p_d() exclude sub/sub/file' ' - git ls-files -- . ":(exclude)sub/sub/file" >actual + git ls-files -- . ":(exclude)sub/sub/file" >actual && cat <<EOF >expect && file sub/file @@ -127,7 +127,7 @@ EOF ' test_expect_success 'm_p_d() exclude sub using mnemonic' ' - git ls-files -- . ":!sub" >actual + git ls-files -- . ":!sub" >actual && cat <<EOF >expect && file sub2/file @@ -136,7 +136,7 @@ EOF ' test_expect_success 'm_p_d() exclude :(icase)SUB' ' - git ls-files -- . ":(exclude,icase)SUB" >actual + git ls-files -- . ":(exclude,icase)SUB" >actual && cat <<EOF >expect && file sub2/file @@ -147,7 +147,7 @@ EOF test_expect_success 'm_p_d() exclude sub2 from sub' ' ( cd sub && - git ls-files -- :/ ":/!sub2" >actual + git ls-files -- :/ ":/!sub2" >actual && cat <<EOF >expect && ../file file @@ -160,7 +160,7 @@ EOF ' test_expect_success 'm_p_d() exclude sub/*file' ' - git ls-files -- . ":(exclude)sub/*file" >actual + git ls-files -- . ":(exclude)sub/*file" >actual && cat <<EOF >expect && file sub/file2 @@ -170,7 +170,7 @@ EOF ' test_expect_success 'm_p_d() exclude :(glob)sub/*/file' ' - git ls-files -- . ":(exclude,glob)sub/*/file" >actual + git ls-files -- . ":(exclude,glob)sub/*/file" >actual && cat <<EOF >expect && file sub/file diff --git a/t/t6200-fmt-merge-msg.sh b/t/t6200-fmt-merge-msg.sh index 54b5744cc5..2e2fb0e957 100755 --- a/t/t6200-fmt-merge-msg.sh +++ b/t/t6200-fmt-merge-msg.sh @@ -194,7 +194,7 @@ test_expect_success '--log=5 with custom comment character' ' ' test_expect_success 'merge.log=0 disables shortlog' ' - echo "Merge branch ${apos}left${apos}" >expected + echo "Merge branch ${apos}left${apos}" >expected && git -c merge.log=0 fmt-merge-msg <.git/FETCH_HEAD >actual && test_cmp expected actual ' diff --git a/t/t7001-mv.sh b/t/t7001-mv.sh index 69f11bd40d..7b56081137 100755 --- a/t/t7001-mv.sh +++ b/t/t7001-mv.sh @@ -161,10 +161,7 @@ test_expect_success "Michael Cassar's test case" ' git mv papers/unsorted/Thesis.pdf papers/all-papers/moo-blah.pdf && T=`git write-tree` && - git ls-tree -r $T | grep partA/outline.txt || { - git ls-tree -r $T - (exit 1) - } + git ls-tree -r $T | verbose grep partA/outline.txt ' rm -fr papers partA path? diff --git a/t/t7004-tag.sh b/t/t7004-tag.sh index 35c805a44e..fa207f3b8c 100755 --- a/t/t7004-tag.sh +++ b/t/t7004-tag.sh @@ -1180,8 +1180,8 @@ test_expect_success 'message in editor has initial comment: first line' ' test_expect_success \ 'message in editor has initial comment: remainder' ' # remove commented lines from the remainder -- should be empty - >rest.expect - sed -e 1d -e '/^#/d' <actual >rest.actual && + >rest.expect && + sed -e 1d -e "/^#/d" <actual >rest.actual && test_cmp rest.expect rest.actual ' @@ -1459,6 +1459,34 @@ test_expect_success 'invalid sort parameter in configuratoin' ' test_cmp expect actual ' +test_expect_success 'version sort with prerelease reordering' ' + git config --unset tag.sort && + git config versionsort.prereleaseSuffix -rc && + git tag foo1.6-rc1 && + git tag foo1.6-rc2 && + git tag -l --sort=version:refname "foo*" >actual && + cat >expect <<-\EOF && + foo1.3 + foo1.6-rc1 + foo1.6-rc2 + foo1.6 + foo1.10 + EOF + test_cmp expect actual +' + +test_expect_success 'reverse version sort with prerelease reordering' ' + git tag -l --sort=-version:refname "foo*" >actual && + cat >expect <<-\EOF && + foo1.10 + foo1.6 + foo1.6-rc2 + foo1.6-rc1 + foo1.3 + EOF + test_cmp expect actual +' + run_with_limited_stack () { (ulimit -s 128 && "$@") } diff --git a/t/t7006-pager.sh b/t/t7006-pager.sh index da958a8b56..947b690fd7 100755 --- a/t/t7006-pager.sh +++ b/t/t7006-pager.sh @@ -396,7 +396,7 @@ test_expect_success TTY 'command-specific pager overrides core.pager' ' sane_unset PAGER GIT_PAGER && echo "foo:initial" >expect && >actual && - test_config core.pager "exit 1" + test_config core.pager "exit 1" && test_config pager.log "sed s/^/foo:/ >actual" && test_terminal git log --format=%s -1 && test_cmp expect actual diff --git a/t/t7007-show.sh b/t/t7007-show.sh index 1b824fe5ed..42d3db6246 100755 --- a/t/t7007-show.sh +++ b/t/t7007-show.sh @@ -124,4 +124,8 @@ test_expect_success '--quiet suppresses diff' ' test_cmp expect actual ' +test_expect_success 'show --graph is forbidden' ' + test_must_fail git show --graph HEAD +' + test_done diff --git a/t/t7009-filter-branch-null-sha1.sh b/t/t7009-filter-branch-null-sha1.sh index a997f7ac3a..c27f90f285 100755 --- a/t/t7009-filter-branch-null-sha1.sh +++ b/t/t7009-filter-branch-null-sha1.sh @@ -13,7 +13,7 @@ test_expect_success 'setup: a commit with a bogus null sha1 in the tree' ' { git ls-tree HEAD && printf "160000 commit $_z40\\tbroken\\n" - } >broken-tree + } >broken-tree && echo "add broken entry" >msg && tree=$(git mktree <broken-tree) && diff --git a/t/t7201-co.sh b/t/t7201-co.sh index eae9e5a937..885923610a 100755 --- a/t/t7201-co.sh +++ b/t/t7201-co.sh @@ -88,14 +88,10 @@ test_expect_success "checkout with unrelated dirty tree without -m" ' git checkout -f master && fill 0 1 2 3 4 5 6 7 8 >same && - cp same kept + cp same kept && git checkout side >messages && - test_cmp same kept - (cat > messages.expect <<EOF -M same -EOF -) && - touch messages.expect && + test_cmp same kept && + printf "M\t%s\n" same >messages.expect && test_cmp messages.expect messages ' @@ -109,10 +105,7 @@ test_expect_success "checkout -m with dirty tree" ' test "$(git symbolic-ref HEAD)" = "refs/heads/side" && - (cat >expect.messages <<EOF -M one -EOF -) && + printf "M\t%s\n" one >expect.messages && test_cmp expect.messages messages && fill "M one" "A three" "D two" >expect.master && @@ -409,12 +402,12 @@ test_expect_success \ test_expect_success \ 'checkout w/autosetupmerge=always sets up tracking' ' + test_when_finished git config branch.autosetupmerge false && git config branch.autosetupmerge always && git checkout master && git checkout -b track2 && test "$(git config branch.track2.remote)" && - test "$(git config branch.track2.merge)" - git config branch.autosetupmerge false' + test "$(git config branch.track2.merge)"' test_expect_success 'checkout w/--track from non-branch HEAD fails' ' git checkout master^0 && @@ -591,7 +584,7 @@ test_expect_success 'checkout --conflict=merge, overriding config' ' ' test_expect_success 'checkout --conflict=diff3' ' - git config --unset merge.conflictstyle + test_unconfig merge.conflictstyle && setup_conflicting_index && echo "none of the above" >sample && echo ourside >expect && diff --git a/t/t7300-clean.sh b/t/t7300-clean.sh index 04118ad75b..99be5d95d0 100755 --- a/t/t7300-clean.sh +++ b/t/t7300-clean.sh @@ -119,10 +119,7 @@ test_expect_success C_LOCALE_OUTPUT 'git clean with relative prefix' ' git clean -n ../src | sed -n -e "s|^Would remove ||p" ) && - test "$would_clean" = ../src/part3.c || { - echo "OOps <$would_clean>" - false - } + verbose test "$would_clean" = ../src/part3.c ' test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' ' @@ -134,10 +131,7 @@ test_expect_success C_LOCALE_OUTPUT 'git clean with absolute path' ' git clean -n "$(pwd)/../src" | sed -n -e "s|^Would remove ||p" ) && - test "$would_clean" = ../src/part3.c || { - echo "OOps <$would_clean>" - false - } + verbose test "$would_clean" = ../src/part3.c ' test_expect_success 'git clean with out of work tree relative path' ' diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 5811a982f4..540771ca41 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -766,7 +766,7 @@ test_expect_success 'moving the superproject does not break submodules' ' ( cd addtest && git submodule status >expect - ) + ) && mv addtest addtest2 && ( cd addtest2 && @@ -987,7 +987,7 @@ test_expect_success 'submodule with UTF-8 name' ' test_expect_success 'submodule add clone shallow submodule' ' mkdir super && - pwd=$(pwd) + pwd=$(pwd) && ( cd super && git init && diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh index 29d3d2cca0..dda3929d99 100755 --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ -754,7 +754,7 @@ test_expect_success SYMLINKS 'submodule update can handle symbolic links in pwd' test_expect_success 'submodule update clone shallow submodule' ' git clone cloned super3 && - pwd=$(pwd) + pwd=$(pwd) && (cd super3 && sed -e "s#url = ../#url = file://$pwd/#" <.gitmodules >.gitmodules.tmp && mv -f .gitmodules.tmp .gitmodules && diff --git a/t/t7508-status.sh b/t/t7508-status.sh index 8ed5788808..c3ed7cb51c 100755 --- a/t/t7508-status.sh +++ b/t/t7508-status.sh @@ -66,6 +66,12 @@ strip_comments () { rm "$1" && mv "$1".tmp "$1" } +cat >.gitignore <<\EOF +.gitignore +expect* +output* +EOF + test_expect_success 'status --column' ' cat >expect <<\EOF && # On branch master @@ -83,8 +89,8 @@ test_expect_success 'status --column' ' # Untracked files: # (use "git add <file>..." to include in what will be committed) # -# dir1/untracked dir2/untracked output -# dir2/modified expect untracked +# dir1/untracked dir2/untracked +# dir2/modified untracked # EOF COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output && @@ -116,8 +122,6 @@ cat >expect <<\EOF # dir1/untracked # dir2/modified # dir2/untracked -# expect -# output # untracked # EOF @@ -133,6 +137,23 @@ test_expect_success 'status with status.displayCommentPrefix=false' ' test_i18ncmp expect output ' +test_expect_success 'status -v' ' + (cat expect && git diff --cached) >expect-with-v && + git status -v >output && + test_i18ncmp expect-with-v output +' + +test_expect_success 'status -v -v' ' + (cat expect && + echo "Changes to be committed:" && + git -c diff.mnemonicprefix=true diff --cached && + echo "--------------------------------------------------" && + echo "Changes not staged for commit:" && + git -c diff.mnemonicprefix=true diff) >expect-with-v && + git status -v -v >output && + test_i18ncmp expect-with-v output +' + test_expect_success 'setup fake editor' ' cat >.git/editor <<-\EOF && #! /bin/sh @@ -167,8 +188,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -186,8 +205,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF @@ -201,7 +218,7 @@ test_expect_success 'status -s' ' test_expect_success 'status with gitignore' ' { echo ".gitignore" && - echo "expect" && + echo "expect*" && echo "output" && echo "untracked" } >.gitignore && @@ -222,6 +239,7 @@ test_expect_success 'status with gitignore' ' !! dir1/untracked !! dir2/untracked !! expect + !! expect-with-v !! output !! untracked EOF @@ -253,6 +271,7 @@ Ignored files: dir1/untracked dir2/untracked expect + expect-with-v output untracked @@ -264,7 +283,7 @@ EOF test_expect_success 'status with gitignore (nothing untracked)' ' { echo ".gitignore" && - echo "expect" && + echo "expect*" && echo "dir2/modified" && echo "output" && echo "untracked" @@ -285,6 +304,7 @@ test_expect_success 'status with gitignore (nothing untracked)' ' !! dir2/modified !! dir2/untracked !! expect + !! expect-with-v !! output !! untracked EOF @@ -312,6 +332,7 @@ Ignored files: dir2/modified dir2/untracked expect + expect-with-v output untracked @@ -320,7 +341,11 @@ EOF test_i18ncmp expect output ' -rm -f .gitignore +cat >.gitignore <<\EOF +.gitignore +expect* +output* +EOF cat >expect <<\EOF ## master @@ -329,8 +354,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF @@ -408,7 +431,7 @@ test_expect_success 'status -s -uno' ' ' test_expect_success 'status -s (status.showUntrackedFiles no)' ' - git config status.showuntrackedfiles no + git config status.showuntrackedfiles no && git status -s >output && test_cmp expect output ' @@ -434,8 +457,6 @@ Untracked files: dir2/modified dir2/untracked dir3/ - expect - output untracked EOF @@ -444,7 +465,7 @@ EOF ' test_expect_success 'status (status.showUntrackedFiles normal)' ' - test_config status.showuntrackedfiles normal + test_config status.showuntrackedfiles normal && git status >output && test_i18ncmp expect output ' @@ -456,8 +477,6 @@ A dir2/added ?? dir2/modified ?? dir2/untracked ?? dir3/ -?? expect -?? output ?? untracked EOF test_expect_success 'status -s -unormal' ' @@ -466,7 +485,7 @@ test_expect_success 'status -s -unormal' ' ' test_expect_success 'status -s (status.showUntrackedFiles normal)' ' - git config status.showuntrackedfiles normal + git config status.showuntrackedfiles normal && git status -s >output && test_cmp expect output ' @@ -493,8 +512,6 @@ Untracked files: dir2/untracked dir3/untracked1 dir3/untracked2 - expect - output untracked EOF @@ -503,7 +520,7 @@ EOF ' test_expect_success 'status (status.showUntrackedFiles all)' ' - test_config status.showuntrackedfiles all + test_config status.showuntrackedfiles all && git status >output && test_i18ncmp expect output ' @@ -518,12 +535,10 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s -uall' ' - git config --unset status.showuntrackedfiles + test_unconfig status.showuntrackedfiles && git status -s -uall >output && test_cmp expect output ' @@ -554,8 +569,6 @@ Untracked files: untracked ../dir2/modified ../dir2/untracked - ../expect - ../output ../untracked EOF @@ -569,8 +582,6 @@ A ../dir2/added ?? untracked ?? ../dir2/modified ?? ../dir2/untracked -?? ../expect -?? ../output ?? ../untracked EOF test_expect_success 'status -s with relative paths' ' @@ -586,8 +597,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF @@ -625,8 +634,6 @@ Untracked files: <BLUE>dir1/untracked<RESET> <BLUE>dir2/modified<RESET> <BLUE>dir2/untracked<RESET> - <BLUE>expect<RESET> - <BLUE>output<RESET> <BLUE>untracked<RESET> EOF @@ -647,8 +654,6 @@ cat >expect <<\EOF <BLUE>??<RESET> dir1/untracked <BLUE>??<RESET> dir2/modified <BLUE>??<RESET> dir2/untracked -<BLUE>??<RESET> expect -<BLUE>??<RESET> output <BLUE>??<RESET> untracked EOF @@ -676,8 +681,6 @@ cat >expect <<\EOF <BLUE>??<RESET> dir1/untracked <BLUE>??<RESET> dir2/modified <BLUE>??<RESET> dir2/untracked -<BLUE>??<RESET> expect -<BLUE>??<RESET> output <BLUE>??<RESET> untracked EOF @@ -694,8 +697,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF @@ -755,8 +756,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -772,8 +771,6 @@ A dir2/added ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF @@ -798,8 +795,6 @@ Untracked files: dir1/untracked dir2/ - expect - output untracked EOF @@ -848,8 +843,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -870,8 +863,6 @@ A sm ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s submodule summary is disabled by default' ' @@ -913,8 +904,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -940,8 +929,6 @@ A sm ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s submodule summary' ' @@ -964,8 +951,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked no changes added to commit (use "git add" and/or "git commit -a") @@ -983,8 +968,6 @@ cat >expect <<EOF ?? dir1/untracked ?? dir2/modified ?? dir2/untracked -?? expect -?? output ?? untracked EOF test_expect_success 'status -s submodule summary (clean submodule)' ' @@ -1025,8 +1008,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -1080,8 +1061,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -1192,8 +1171,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -1254,8 +1231,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF @@ -1336,8 +1311,6 @@ cat > expect << EOF ; dir1/untracked ; dir2/modified ; dir2/untracked -; expect -; output ; untracked ; EOF @@ -1369,8 +1342,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked no changes added to commit (use "git add" and/or "git commit -a") @@ -1400,8 +1371,6 @@ Untracked files: dir1/untracked dir2/modified dir2/untracked - expect - output untracked EOF diff --git a/t/t7510-signed-commit.sh b/t/t7510-signed-commit.sh index 3cef18cfda..13331e533b 100755 --- a/t/t7510-signed-commit.sh +++ b/t/t7510-signed-commit.sh @@ -42,7 +42,7 @@ test_expect_success GPG 'create signed commits' ' git tag seventh-unsigned && test_tick && git rebase -f HEAD^^ && git tag sixth-signed HEAD^ && - git tag seventh-signed + git tag seventh-signed && echo 8 >file && test_tick && git commit -a -m eighth -SB7227189 && git tag eighth-signed-alt diff --git a/t/t7516-commit-races.sh b/t/t7516-commit-races.sh new file mode 100755 index 0000000000..f2ce14e907 --- /dev/null +++ b/t/t7516-commit-races.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +test_description='git commit races' +. ./test-lib.sh + +test_expect_success 'race to create orphan commit' ' + write_script hare-editor <<-\EOF && + git commit --allow-empty -m hare + EOF + test_must_fail env EDITOR=./hare-editor git commit --allow-empty -m tortoise -e && + git show -s --pretty=format:%s >subject && + grep hare subject && + test -z "$(git show -s --pretty=format:%P)" +' + +test_expect_success 'race to create non-orphan commit' ' + write_script airplane-editor <<-\EOF && + git commit --allow-empty -m airplane + EOF + git checkout --orphan branch && + git commit --allow-empty -m base && + git rev-parse HEAD >base && + test_must_fail env EDITOR=./airplane-editor git commit --allow-empty -m ship -e && + git show -s --pretty=format:%s >subject && + grep airplane subject && + git rev-parse HEAD^ >parent && + test_cmp base parent +' + +test_done diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index b16462132f..75c50eea15 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -133,7 +133,7 @@ test_expect_success 'setup' ' test_tick && git commit -m "commit 3" && git tag c3 && - c3=$(git rev-parse HEAD) + c3=$(git rev-parse HEAD) && git reset --hard "$c0" && create_merge_msgs ' diff --git a/t/t7612-merge-verify-signatures.sh b/t/t7612-merge-verify-signatures.sh index 21a0bf8fb8..8ae69a61c3 100755 --- a/t/t7612-merge-verify-signatures.sh +++ b/t/t7612-merge-verify-signatures.sh @@ -29,7 +29,7 @@ test_expect_success GPG 'create signed commits' ' git checkout -b side-untrusted && echo 3 >baz && git add baz && - test_tick && git commit -SB7227189 -m "untrusted on side" + test_tick && git commit -SB7227189 -m "untrusted on side" && git checkout master ' diff --git a/t/t7701-repack-unpack-unreachable.sh b/t/t7701-repack-unpack-unreachable.sh index aad8a9c64d..b66e383866 100755 --- a/t/t7701-repack-unpack-unreachable.sh +++ b/t/t7701-repack-unpack-unreachable.sh @@ -57,7 +57,7 @@ compare_mtimes () { read tref rest && while read t rest; do - test "$tref" = "$t" || break + test "$tref" = "$t" || return 1 done } diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh index 2a3469bcbe..32895e5acb 100755 --- a/t/t8003-blame-corner-cases.sh +++ b/t/t8003-blame-corner-cases.sh @@ -26,7 +26,7 @@ test_expect_success setup ' cat one >uno && mv two dos && cat one >>tres && - echo DEF >>mouse + echo DEF >>mouse && git add uno dos tres mouse && test_tick && GIT_AUTHOR_NAME=Second git commit -a -m Second && @@ -153,15 +153,15 @@ test_expect_success 'blame path that used to be a directory' ' ' test_expect_success 'blame to a commit with no author name' ' - TREE=`git rev-parse HEAD:` - cat >badcommit <<EOF + TREE=`git rev-parse HEAD:` && + cat >badcommit <<EOF && tree $TREE author <noname> 1234567890 +0000 committer David Reiss <dreiss@facebook.com> 1234567890 +0000 some message EOF - COMMIT=`git hash-object -t commit -w badcommit` + COMMIT=`git hash-object -t commit -w badcommit` && git --no-pager blame $COMMIT -- uno >/dev/null ' diff --git a/t/t8008-blame-formats.sh b/t/t8008-blame-formats.sh index d15f8b3d47..29f84a6dd1 100755 --- a/t/t8008-blame-formats.sh +++ b/t/t8008-blame-formats.sh @@ -5,7 +5,7 @@ test_description='blame output in various formats on a simple case' test_expect_success 'setup' ' echo a >file && - git add file + git add file && test_tick && git commit -m one && echo b >>file && diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh index 051305545c..7be14a4e37 100755 --- a/t/t9001-send-email.sh +++ b/t/t9001-send-email.sh @@ -818,25 +818,19 @@ test_expect_success $PREREQ '--confirm=compose' ' ' test_expect_success $PREREQ 'confirm by default (due to cc)' ' - CONFIRM=$(git config --get sendemail.confirm) && + test_when_finished git config sendemail.confirm never && git config --unset sendemail.confirm && test_confirm - ret="$?" - git config sendemail.confirm ${CONFIRM:-never} - test $ret = "0" ' test_expect_success $PREREQ 'confirm by default (due to --compose)' ' - CONFIRM=$(git config --get sendemail.confirm) && + test_when_finished git config sendemail.confirm never && git config --unset sendemail.confirm && test_confirm --suppress-cc=all --compose - ret="$?" - git config sendemail.confirm ${CONFIRM:-never} - test $ret = "0" ' test_expect_success $PREREQ 'confirm detects EOF (inform assumes y)' ' - CONFIRM=$(git config --get sendemail.confirm) && + test_when_finished git config sendemail.confirm never && git config --unset sendemail.confirm && rm -fr outdir && git format-patch -2 -o outdir && @@ -846,13 +840,10 @@ test_expect_success $PREREQ 'confirm detects EOF (inform assumes y)' ' --to=nobody@example.com \ --smtp-server="$(pwd)/fake.sendmail" \ outdir/*.patch </dev/null - ret="$?" - git config sendemail.confirm ${CONFIRM:-never} - test $ret = "0" ' test_expect_success $PREREQ 'confirm detects EOF (auto causes failure)' ' - CONFIRM=$(git config --get sendemail.confirm) && + test_when_finished git config sendemail.confirm never && git config sendemail.confirm auto && GIT_SEND_EMAIL_NOTTY=1 && export GIT_SEND_EMAIL_NOTTY && @@ -861,13 +852,10 @@ test_expect_success $PREREQ 'confirm detects EOF (auto causes failure)' ' --to=nobody@example.com \ --smtp-server="$(pwd)/fake.sendmail" \ $patches </dev/null - ret="$?" - git config sendemail.confirm ${CONFIRM:-never} - test $ret = "0" ' test_expect_success $PREREQ 'confirm does not loop forever' ' - CONFIRM=$(git config --get sendemail.confirm) && + test_when_finished git config sendemail.confirm never && git config sendemail.confirm auto && GIT_SEND_EMAIL_NOTTY=1 && export GIT_SEND_EMAIL_NOTTY && @@ -876,9 +864,6 @@ test_expect_success $PREREQ 'confirm does not loop forever' ' --to=nobody@example.com \ --smtp-server="$(pwd)/fake.sendmail" \ $patches - ret="$?" - git config sendemail.confirm ${CONFIRM:-never} - test $ret = "0" ' test_expect_success $PREREQ 'utf8 Cc is rfc2047 encoded' ' @@ -1325,7 +1310,7 @@ test_expect_success $PREREQ 'sendemail.transferencoding=7bit fails on 8bit data' test_expect_success $PREREQ '--transfer-encoding overrides sendemail.transferEncoding' ' clean_fake_sendmail && - git config sendemail.transferEncoding 8bit + git config sendemail.transferEncoding 8bit && test_must_fail git send-email \ --transfer-encoding=7bit \ --smtp-server="$(pwd)/fake.sendmail" \ diff --git a/t/t9104-git-svn-follow-parent.sh b/t/t9104-git-svn-follow-parent.sh index 13b179e721..83f17e13e8 100755 --- a/t/t9104-git-svn-follow-parent.sh +++ b/t/t9104-git-svn-follow-parent.sh @@ -72,16 +72,18 @@ test_expect_success 'follow larger parent' ' svn import -m "import a larger parent" import "$svnrepo"/larger-parent && svn cp -m "hi" "$svnrepo"/larger-parent "$svnrepo"/another-larger && git svn init --minimize-url -i larger \ - "$svnrepo"/another-larger/trunk/thunk/bump/thud && + "$svnrepo"/larger-parent/trunk/thunk/bump/thud && git svn fetch -i larger && + git svn init --minimize-url -i larger-parent \ + "$svnrepo"/another-larger/trunk/thunk/bump/thud && + git svn fetch -i larger-parent && git rev-parse --verify refs/remotes/larger && git rev-parse --verify \ - refs/remotes/larger-parent/trunk/thunk/bump/thud && + refs/remotes/larger-parent && test "`git merge-base \ - refs/remotes/larger-parent/trunk/thunk/bump/thud \ + refs/remotes/larger-parent \ refs/remotes/larger`" = \ "`git rev-parse refs/remotes/larger`" - true ' test_expect_success 'follow higher-level parent' ' diff --git a/t/t9158-git-svn-mergeinfo.sh b/t/t9158-git-svn-mergeinfo.sh index 8c9539e1b4..13f78f2682 100755 --- a/t/t9158-git-svn-mergeinfo.sh +++ b/t/t9158-git-svn-mergeinfo.sh @@ -34,7 +34,7 @@ test_expect_success 'change svn:mergeinfo' ' ' test_expect_success 'verify svn:mergeinfo' ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) && test "$mergeinfo" = "/branches/foo:1-10" ' @@ -46,7 +46,7 @@ test_expect_success 'change svn:mergeinfo multiline' ' ' test_expect_success 'verify svn:mergeinfo multiline' ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/trunk) && test "$mergeinfo" = "/branches/bar:1-10 /branches/other:3-5,8,10-11" ' diff --git a/t/t9161-git-svn-mergeinfo-push.sh b/t/t9161-git-svn-mergeinfo-push.sh index 6cb0909afe..f113acaa6c 100755 --- a/t/t9161-git-svn-mergeinfo-push.sh +++ b/t/t9161-git-svn-mergeinfo-push.sh @@ -24,7 +24,7 @@ test_expect_success 'propagate merge information' ' ' test_expect_success 'check svn:mergeinfo' ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) && test "$mergeinfo" = "/branches/svnb2:3,8" ' @@ -34,7 +34,7 @@ test_expect_success 'merge another branch' ' ' test_expect_success 'check primary parent mergeinfo respected' ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) && test "$mergeinfo" = "/branches/svnb2:3,8 /branches/svnb3:4,9" ' @@ -45,7 +45,7 @@ test_expect_success 'merge existing merge' ' ' test_expect_success "check both parents' mergeinfo respected" ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) && test "$mergeinfo" = "/branches/svnb2:3,8 /branches/svnb3:4,9 /branches/svnb4:5-6,10-12 @@ -70,7 +70,7 @@ test_expect_success 'second forward merge' ' ' test_expect_success 'check new mergeinfo added' ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb1) && test "$mergeinfo" = "/branches/svnb2:3,8,16-17 /branches/svnb3:4,9 /branches/svnb4:5-6,10-12 @@ -84,7 +84,7 @@ test_expect_success 'reintegration merge' ' ' test_expect_success 'check reintegration mergeinfo' ' - mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb4) + mergeinfo=$(svn_cmd propget svn:mergeinfo "$svnrepo"/branches/svnb4) && test "$mergeinfo" = "/branches/svnb1:2-4,7-9,13-18 /branches/svnb2:3,8,16-17 /branches/svnb3:4,9 diff --git a/t/t9300-fast-import.sh b/t/t9300-fast-import.sh index c538e0a4e9..aac126fd57 100755 --- a/t/t9300-fast-import.sh +++ b/t/t9300-fast-import.sh @@ -1132,7 +1132,7 @@ test_expect_success \ compare_diff_raw expect actual' test_expect_success PIPE 'N: read and copy directory' ' - cat >expect <<-\EOF + cat >expect <<-\EOF && :100755 100755 f1fb5da718392694d0076d677d6d0e364c79b0bc f1fb5da718392694d0076d677d6d0e364c79b0bc C100 file2/newf file3/newf :100644 100644 7123f7f44e39be127c5eb701e5968176ee9d78b1 7123f7f44e39be127c5eb701e5968176ee9d78b1 C100 file2/oldf file3/oldf EOF @@ -2228,7 +2228,7 @@ test_expect_success 'R: feature import-marks-if-exists' ' >expect && git fast-import --import-marks-if-exists=not_io.marks \ - --export-marks=io.marks <<-\EOF + --export-marks=io.marks <<-\EOF && feature import-marks-if-exists=io.marks EOF test_cmp expect io.marks @@ -2853,8 +2853,8 @@ test_expect_success 'S: notemodify with garbage after mark commit-ish must fail' # from # test_expect_success 'S: from with garbage after mark must fail' ' - # no && - git fast-import --import-marks=marks --export-marks=marks <<-EOF 2>err + test_must_fail \ + git fast-import --import-marks=marks --export-marks=marks <<-EOF 2>err && commit refs/heads/S2 mark :303 committer $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> $GIT_COMMITTER_DATE @@ -2865,9 +2865,6 @@ test_expect_success 'S: from with garbage after mark must fail' ' M 100644 :403 hello.c EOF - ret=$? && - echo returned $ret && - test $ret -ne 0 && # failed, but it created the commit # go create the commit, need it for merge test git fast-import --import-marks=marks --export-marks=marks <<-EOF && diff --git a/t/t9500-gitweb-standalone-no-errors.sh b/t/t9500-gitweb-standalone-no-errors.sh index e74b9ab1e1..e94b2f147a 100755 --- a/t/t9500-gitweb-standalone-no-errors.sh +++ b/t/t9500-gitweb-standalone-no-errors.sh @@ -297,7 +297,7 @@ test_expect_success 'setup incomplete lines' ' echo "Dominus regit me," >file && echo "incomplete line" | tr -d "\\012" >>file && git commit -a -m "Change incomplete line" && - git tag incomplete_lines_chg + git tag incomplete_lines_chg && echo "Dominus regit me," >file && git commit -a -m "Remove incomplete line" && git tag incomplete_lines_rem @@ -779,7 +779,10 @@ test_expect_success \ test_expect_success \ 'unborn HEAD: "summary" page (with "heads" subview)' \ - 'git checkout orphan_branch || git checkout --orphan orphan_branch && + '{ + git checkout orphan_branch || + git checkout --orphan orphan_branch + } && test_when_finished "git checkout master" && gitweb_run "p=.git;a=summary"' diff --git a/t/t9502-gitweb-standalone-parse-output.sh b/t/t9502-gitweb-standalone-parse-output.sh index 86dfee2e4f..0796a438bc 100755 --- a/t/t9502-gitweb-standalone-parse-output.sh +++ b/t/t9502-gitweb-standalone-parse-output.sh @@ -145,9 +145,11 @@ test_expect_success 'forks: not skipped unless "forks" feature enabled' ' grep -q ">fork of .*<" gitweb.body ' -cat >>gitweb_config.perl <<\EOF && -$feature{'forks'}{'default'} = [1]; -EOF +test_expect_success 'enable forks feature' ' + cat >>gitweb_config.perl <<-\EOF + $feature{"forks"}{"default"} = [1]; + EOF +' test_expect_success 'forks: forks skipped if "forks" feature enabled' ' gitweb_run "a=project_list" && @@ -173,7 +175,7 @@ test_expect_success 'forks: can access forked repository' ' ' test_expect_success 'forks: project_index lists all projects (incl. forks)' ' - cat >expected <<-\EOF + cat >expected <<-\EOF && .git foo.bar.git foo.git diff --git a/t/t9817-git-p4-exclude.sh b/t/t9817-git-p4-exclude.sh new file mode 100755 index 0000000000..aac568eadf --- /dev/null +++ b/t/t9817-git-p4-exclude.sh @@ -0,0 +1,71 @@ +#!/bin/sh + +test_description='git p4 tests for excluded paths during clone and sync' + +. ./lib-git-p4.sh + +test_expect_success 'start p4d' ' + start_p4d +' + +# Create a repo with the structure: +# +# //depot/wanted/foo +# //depot/discard/foo +# +# Check that we can exclude a subdirectory with both +# clone and sync operations. + +test_expect_success 'create exclude repo' ' + ( + cd "$cli" && + mkdir -p wanted discard && + echo wanted >wanted/foo && + echo discard >discard/foo && + p4 add wanted/foo discard/foo && + p4 submit -d "initial revision" + ) +' + +test_expect_success 'check the repo was created correctly' ' + test_when_finished cleanup_git && + git p4 clone --dest="$git" //depot/...@all && + ( + cd "$git" && + test_path_is_file wanted/foo && + test_path_is_file discard/foo + ) +' + +test_expect_success 'clone, excluding part of repo' ' + test_when_finished cleanup_git && + git p4 clone -//depot/discard/... --dest="$git" //depot/...@all && + ( + cd "$git" && + test_path_is_file wanted/foo && + test_path_is_missing discard/foo + ) +' + +test_expect_success 'clone, then sync with exclude' ' + test_when_finished cleanup_git && + git p4 clone -//depot/discard/... --dest="$git" //depot/...@all && + ( + cd "$cli" && + p4 edit wanted/foo discard/foo && + date >>wanted/foo && + date >>discard/foo && + p4 submit -d "updating" && + + cd "$git" && + git p4 sync -//depot/discard/... && + test_path_is_file wanted/foo && + test_path_is_missing discard/foo + ) +' + +test_expect_success 'kill p4d' ' + kill_p4d +' + +test_done diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 7a883d1a67..4a14a5892e 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -568,7 +568,7 @@ test_expect_success 'complete files' ' test_completion "git commit " "modified" && : TODO .gitignore should not be here && - test_completion "git ls-files " <<-\EOF + test_completion "git ls-files " <<-\EOF && .gitignore dir modified diff --git a/t/t9903-bash-prompt.sh b/t/t9903-bash-prompt.sh index 46d7d37a51..49d58e6726 100755 --- a/t/t9903-bash-prompt.sh +++ b/t/t9903-bash-prompt.sh @@ -166,7 +166,7 @@ test_expect_success 'prompt - inside bare repository' ' ' test_expect_success 'prompt - interactive rebase' ' - printf " (b1|REBASE-i 2/3)" >expected + printf " (b1|REBASE-i 2/3)" >expected && write_script fake_editor.sh <<-\EOF && echo "exec echo" >"$1" echo "edit $(git log -1 --format="%h")" >>"$1" diff --git a/t/test-lib.sh b/t/test-lib.sh index c09677802c..4ea99a209d 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -152,10 +152,7 @@ unset UNZIP case $(echo $GIT_TRACE |tr "[A-Z]" "[a-z]") in 1|2|true) - echo "* warning: Some tests will not work if GIT_TRACE" \ - "is set as to trace on STDERR ! *" - echo "* warning: Please set GIT_TRACE to something" \ - "other than 1, 2 or true ! *" + GIT_TRACE=4 ;; esac @@ -232,6 +229,12 @@ do --root=*) root=$(expr "z$1" : 'z[^=]*=\(.*\)') shift ;; + --chain-lint) + GIT_TEST_CHAIN_LINT=1 + shift ;; + --no-chain-lint) + GIT_TEST_CHAIN_LINT=0 + shift ;; -x) trace=t verbose=t @@ -299,6 +302,7 @@ die () { GIT_EXIT_OK= trap 'die' EXIT +trap 'exit $?' INT # The user-facing functions are loaded from a separate file so that # test_perf subshells can have them too @@ -524,6 +528,16 @@ test_eval_ () { test_run_ () { test_cleanup=: expecting_failure=$2 + + if test "${GIT_TEST_CHAIN_LINT:-0}" != 0; then + # 117 is magic because it is unlikely to match the exit + # code of other programs + test_eval_ "(exit 117) && $1" + if test "$?" != 117; then + error "bug in the test script: broken &&-chain: $1" + fi + fi + setup_malloc_check test_eval_ "$1" eval_ret=$? @@ -1064,3 +1078,9 @@ test_lazy_prereq UNZIP ' "$GIT_UNZIP" -v test $? -ne 127 ' + +run_with_limited_cmdline () { + (ulimit -s 128 && "$@") +} + +test_lazy_prereq CMDLINE_LIMIT 'run_with_limited_cmdline true' diff --git a/thread-utils.c b/thread-utils.c index 97396a75ae..a2135e0743 100644 --- a/thread-utils.c +++ b/thread-utils.c @@ -35,7 +35,23 @@ int online_cpus(void) if (!pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0)) return (int)psd.psd_proc_cnt; -#endif +#elif defined(HAVE_BSD_SYSCTL) && defined(HW_NCPU) + int mib[2]; + size_t len; + int cpucount; + + mib[0] = CTL_HW; +# ifdef HW_AVAILCPU + mib[1] = HW_AVAILCPU; + len = sizeof(cpucount); + if (!sysctl(mib, 2, &cpucount, &len, NULL, 0)) + return cpucount; +# endif /* HW_AVAILCPU */ + mib[1] = HW_NCPU; + len = sizeof(cpucount); + if (!sysctl(mib, 2, &cpucount, &len, NULL, 0)) + return cpucount; +#endif /* defined(HAVE_BSD_SYSCTL) && defined(HW_NCPU) */ #ifdef _SC_NPROCESSORS_ONLN if ((ncpus = (long)sysconf(_SC_NPROCESSORS_ONLN)) > 0) @@ -214,16 +214,6 @@ static struct trailer_item *remove_first(struct trailer_item **first) return item; } -static int read_from_command(struct child_process *cp, struct strbuf *buf) -{ - if (run_command(cp)) - return error("running trailer command '%s' failed", cp->argv[0]); - if (strbuf_read(buf, cp->out, 1024) < 1) - return error("reading from trailer command '%s' failed", cp->argv[0]); - strbuf_trim(buf); - return 0; -} - static const char *apply_command(const char *command, const char *arg) { struct strbuf cmd = STRBUF_INIT; @@ -240,14 +230,16 @@ static const char *apply_command(const char *command, const char *arg) cp.argv = argv; cp.env = local_repo_env; cp.no_stdin = 1; - cp.out = -1; cp.use_shell = 1; - if (read_from_command(&cp, &buf)) { + if (capture_command(&cp, &buf, 1024)) { + error("running trailer command '%s' failed", cmd.buf); strbuf_release(&buf); result = xstrdup(""); - } else + } else { + strbuf_trim(&buf); result = strbuf_detach(&buf, NULL); + } strbuf_release(&cmd); return result; diff --git a/transport-helper.c b/transport-helper.c index 7dc4a443ae..5d99a6bc2e 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -97,6 +97,8 @@ static void do_take_over(struct transport *transport) free(data); } +static void standard_options(struct transport *t); + static struct child_process *get_helper(struct transport *transport) { struct helper_data *data = transport->data; @@ -211,6 +213,7 @@ static struct child_process *get_helper(struct transport *transport) strbuf_release(&buf); if (debug) fprintf(stderr, "Debug: Capabilities complete.\n"); + standard_options(transport); return data->helper; } @@ -338,17 +341,6 @@ static int fetch_with_fetch(struct transport *transport, int i; struct strbuf buf = STRBUF_INIT; - standard_options(transport); - if (data->check_connectivity && - data->transport_options.check_self_contained_and_connected) - set_helper_option(transport, "check-connectivity", "true"); - - if (transport->cloning) - set_helper_option(transport, "cloning", "true"); - - if (data->transport_options.update_shallow) - set_helper_option(transport, "update-shallow", "true"); - for (i = 0; i < nr_heads; i++) { const struct ref *posn = to_fetch[i]; if (posn->status & REF_STATUS_UPTODATE) @@ -622,6 +614,16 @@ static int fetch(struct transport *transport, if (!count) return 0; + if (data->check_connectivity && + data->transport_options.check_self_contained_and_connected) + set_helper_option(transport, "check-connectivity", "true"); + + if (transport->cloning) + set_helper_option(transport, "cloning", "true"); + + if (data->transport_options.update_shallow) + set_helper_option(transport, "update-shallow", "true"); + if (data->fetch) return fetch_with_fetch(transport, nr_heads, to_fetch); @@ -826,7 +828,6 @@ static int push_refs_with_push(struct transport *transport, return 0; } - standard_options(transport); for_each_string_list_item(cas_option, &cas_options) set_helper_option(transport, "cas", cas_option->string); diff --git a/transport.c b/transport.c index 88bde1d85e..eca9b8c817 100644 --- a/transport.c +++ b/transport.c @@ -730,6 +730,10 @@ static int print_one_push_status(struct ref *ref, const char *dest, int count, i ref->deletion ? NULL : ref->peer_ref, "remote failed to report status", porcelain); break; + case REF_STATUS_ATOMIC_PUSH_FAILED: + print_ref_status('!', "[rejected]", ref, ref->peer_ref, + "atomic push failed", porcelain); + break; case REF_STATUS_OK: print_ok_ref_status(ref, porcelain); break; @@ -828,6 +832,7 @@ static int git_transport_push(struct transport *transport, struct ref *remote_re args.dry_run = !!(flags & TRANSPORT_PUSH_DRY_RUN); args.porcelain = !!(flags & TRANSPORT_PUSH_PORCELAIN); args.push_cert = !!(flags & TRANSPORT_PUSH_CERT); + args.atomic = !!(flags & TRANSPORT_PUSH_ATOMIC); args.url = transport->url; ret = send_pack(&args, data->fd, data->conn, remote_refs, diff --git a/transport.h b/transport.h index 3e0091eaab..18d2cf8275 100644 --- a/transport.h +++ b/transport.h @@ -125,6 +125,7 @@ struct transport { #define TRANSPORT_PUSH_NO_HOOK 512 #define TRANSPORT_PUSH_FOLLOW_TAGS 1024 #define TRANSPORT_PUSH_CERT 2048 +#define TRANSPORT_PUSH_ATOMIC 4096 #define TRANSPORT_SUMMARY_WIDTH (2 * DEFAULT_ABBREV + 3) #define TRANSPORT_SUMMARY(x) (int)(TRANSPORT_SUMMARY_WIDTH + strlen(x) - gettext_width(x)), (x) diff --git a/urlmatch.c b/urlmatch.c index 618d216491..132d342bc1 100644 --- a/urlmatch.c +++ b/urlmatch.c @@ -412,9 +412,9 @@ static size_t url_match_prefix(const char *url, return 0; } -int match_urls(const struct url_info *url, - const struct url_info *url_prefix, - int *exactusermatch) +static int match_urls(const struct url_info *url, + const struct url_info *url_prefix, + int *exactusermatch) { /* * url_prefix matches url if the scheme, host and port of url_prefix diff --git a/urlmatch.h b/urlmatch.h index b461dfd3df..528862adc5 100644 --- a/urlmatch.h +++ b/urlmatch.h @@ -31,7 +31,6 @@ struct url_info { }; extern char *url_normalize(const char *, struct url_info *); -extern int match_urls(const struct url_info *url, const struct url_info *url_prefix, int *exactusermatch); struct urlmatch_item { size_t matched_len; diff --git a/versioncmp.c b/versioncmp.c index 7511e08271..80bfd109fa 100644 --- a/versioncmp.c +++ b/versioncmp.c @@ -1,4 +1,5 @@ #include "cache.h" +#include "string-list.h" /* * versioncmp(): copied from string/strverscmp.c in glibc commit @@ -20,6 +21,48 @@ #define CMP 2 #define LEN 3 +static const struct string_list *prereleases; +static int initialized; + +/* + * p1 and p2 point to the first different character in two strings. If + * either p1 or p2 starts with a prerelease suffix, it will be forced + * to be on top. + * + * If both p1 and p2 start with (different) suffix, the order is + * determined by config file. + * + * Note that we don't have to deal with the situation when both p1 and + * p2 start with the same suffix because the common part is already + * consumed by the caller. + * + * Return non-zero if *diff contains the return value for versioncmp() + */ +static int swap_prereleases(const void *p1_, + const void *p2_, + int *diff) +{ + const char *p1 = p1_; + const char *p2 = p2_; + int i, i1 = -1, i2 = -1; + + for (i = 0; i < prereleases->nr; i++) { + const char *suffix = prereleases->items[i].string; + if (i1 == -1 && starts_with(p1, suffix)) + i1 = i; + if (i2 == -1 && starts_with(p2, suffix)) + i2 = i; + } + if (i1 == -1 && i2 == -1) + return 0; + if (i1 >= 0 && i2 >= 0) + *diff = i1 - i2; + else if (i1 >= 0) + *diff = -1; + else /* if (i2 >= 0) */ + *diff = 1; + return 1; +} /* * Compare S1 and S2 as strings holding indices/version numbers, @@ -74,6 +117,13 @@ int versioncmp(const char *s1, const char *s2) state += (c1 == '0') + (isdigit (c1) != 0); } + if (!initialized) { + initialized = 1; + prereleases = git_config_get_value_multi("versionsort.prereleasesuffix"); + } + if (prereleases && swap_prereleases(p1 - 1, p2 - 1, &diff)) + return diff; + state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))]; switch (state) { @@ -299,7 +299,7 @@ int walker_fetch(struct walker *walker, int targets, char **target, strbuf_reset(&refname); strbuf_addf(&refname, "refs/%s", write_ref[i]); if (ref_transaction_update(transaction, refname.buf, - &sha1[20 * i], NULL, 0, 0, + &sha1[20 * i], NULL, 0, msg ? msg : "fetch (unknown)", &err)) { error("%s", err.buf); @@ -172,8 +172,22 @@ void *xcalloc(size_t nmemb, size_t size) * 64-bit is buggy, returning EINVAL if len >= INT_MAX; and even in * the absence of bugs, large chunks can result in bad latencies when * you decide to kill the process. + * + * We pick 8 MiB as our default, but if the platform defines SSIZE_MAX + * that is smaller than that, clip it to SSIZE_MAX, as a call to + * read(2) or write(2) larger than that is allowed to fail. As the last + * resort, we allow a port to pass via CFLAGS e.g. "-DMAX_IO_SIZE=value" + * to override this, if the definition of SSIZE_MAX given by the platform + * is broken. */ -#define MAX_IO_SIZE (8*1024*1024) +#ifndef MAX_IO_SIZE +# define MAX_IO_SIZE_DEFAULT (8*1024*1024) +# if defined(SSIZE_MAX) && (SSIZE_MAX < MAX_IO_SIZE_DEFAULT) +# define MAX_IO_SIZE SSIZE_MAX +# else +# define MAX_IO_SIZE MAX_IO_SIZE_DEFAULT +# endif +#endif /* * xread() is the same a read(), but it automatically restarts read() diff --git a/wt-status.c b/wt-status.c index 29666d0dba..853419f05f 100644 --- a/wt-status.c +++ b/wt-status.c @@ -729,7 +729,6 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt struct strbuf cmd_stdout = STRBUF_INIT; struct strbuf summary = STRBUF_INIT; char *summary_content; - size_t len; argv_array_pushf(&sm_summary.env_array, "GIT_INDEX_FILE=%s", s->index_file); @@ -745,15 +744,11 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt sm_summary.git_cmd = 1; sm_summary.no_stdin = 1; - fflush(s->fp); - sm_summary.out = -1; - run_command(&sm_summary); - - len = strbuf_read(&cmd_stdout, sm_summary.out, 1024); + capture_command(&sm_summary, &cmd_stdout, 1024); /* prepend header, only if there's an actual output */ - if (len) { + if (cmd_stdout.len) { if (uncommitted) strbuf_addstr(&summary, _("Submodules changed but not updated:")); else @@ -764,6 +759,7 @@ static void wt_status_print_submodule_summary(struct wt_status *s, int uncommitt strbuf_release(&cmd_stdout); if (s->display_comment_prefix) { + size_t len; summary_content = strbuf_detach(&summary, &len); strbuf_add_commented_lines(&summary, summary_content, len); free(summary_content); @@ -849,6 +845,8 @@ static void wt_status_print_verbose(struct wt_status *s) { struct rev_info rev; struct setup_revision_opt opt; + int dirty_submodules; + const char *c = color(WT_STATUS_HEADER, s); init_revisions(&rev, NULL); DIFF_OPT_SET(&rev.diffopt, ALLOW_TEXTCONV); @@ -873,7 +871,25 @@ static void wt_status_print_verbose(struct wt_status *s) rev.diffopt.use_color = 0; wt_status_add_cut_line(s->fp); } + if (s->verbose > 1 && s->commitable) { + /* print_updated() printed a header, so do we */ + if (s->fp != stdout) + wt_status_print_trailer(s); + status_printf_ln(s, c, _("Changes to be committed:")); + rev.diffopt.a_prefix = "c/"; + rev.diffopt.b_prefix = "i/"; + } /* else use prefix as per user config */ run_diff_index(&rev, 1); + if (s->verbose > 1 && + wt_status_check_worktree_changes(s, &dirty_submodules)) { + status_printf_ln(s, c, + "--------------------------------------------------"); + status_printf_ln(s, c, _("Changes not staged for commit:")); + setup_work_tree(); + rev.diffopt.a_prefix = "i/"; + rev.diffopt.b_prefix = "w/"; + run_diff_files(&rev, 0); + } } static void wt_status_print_tracking(struct wt_status *s) @@ -1222,6 +1238,8 @@ static void wt_status_get_detached_from(struct wt_status_state *state) state->detached_from = xstrdup(find_unique_abbrev(cb.nsha1, DEFAULT_ABBREV)); hashcpy(state->detached_sha1, cb.nsha1); + state->detached_at = !get_sha1("HEAD", sha1) && + !hashcmp(sha1, state->detached_sha1); free(ref); strbuf_release(&cb.buf); @@ -1310,10 +1328,8 @@ void wt_status_print(struct wt_status *s) on_what = _("rebase in progress; onto "); branch_name = state.onto; } else if (state.detached_from) { - unsigned char sha1[20]; branch_name = state.detached_from; - if (!get_sha1("HEAD", sha1) && - !hashcmp(sha1, state.detached_sha1)) + if (state.detached_at) on_what = _("HEAD detached at "); else on_what = _("HEAD detached from "); diff --git a/wt-status.h b/wt-status.h index 283a9fef03..e0a99f75c7 100644 --- a/wt-status.h +++ b/wt-status.h @@ -84,6 +84,7 @@ struct wt_status_state { int cherry_pick_in_progress; int bisect_in_progress; int revert_in_progress; + int detached_at; char *branch; char *onto; char *detached_from; |