summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2012-10-14config: exit on error accessing any config fileLibravatar Jonathan Nieder1-3/+3
There is convenience in warning and moving on when somebody has a bogus permissions on /etc/gitconfig and cannot do anything about it. But the cost in predictability and security is too high --- when unreadable config files are skipped, it means an I/O error or permissions problem causes important configuration to be bypassed. For example, servers may depend on /etc/gitconfig to enforce security policy (setting transfer.fsckObjects or receive.deny*). Best to always error out when encountering trouble accessing a config file. This may add inconvenience in some cases: 1. You are inspecting somebody else's repo, and you do not have access to their .git/config file. Git typically dies in this case already since we cannot read core.repositoryFormatVersion, so the change should not be too noticeable. 2. You have used "sudo -u" or a similar tool to switch uid, and your environment still points Git at your original user's global config, which is not readable. In this case people really would be inconvenienced (they would rather see the harmless warning and continue the operation) but they can work around it by setting HOME appropriately after switching uids. 3. You do not have access to /etc/gitconfig due to a broken setup. In this case, erroring out is a good way to put pressure on the sysadmin to fix the setup. While they wait for a reply, users can set GIT_CONFIG_NOSYSTEM to true to keep Git working without complaint. After this patch, errors accessing the repository-local and systemwide config files and files requested in include directives cause Git to exit, just like errors accessing ~/.gitconfig. Explained-by: Jeff King <peff@peff.net> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-10-14doc: advertise GIT_CONFIG_NOSYSTEMLibravatar Jonathan Nieder2-0/+12
On a multiuser system where mortals do not have write access to /etc, the GIT_CONFIG_NOSYSTEM variable is the best tool we have to keep getting work done when a syntax error or other problem renders /etc/gitconfig buggy, until the sysadmin sorts the problem out. Noticed while experimenting with teaching git to error out when /etc/gitconfig is unreadable. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-10-13config: treat user and xdg config permission problems as errorsLibravatar Jonathan Nieder3-2/+11
Git reads multiple configuration files: settings come first from the system config file (typically /etc/gitconfig), then the xdg config file (typically ~/.config/git/config), then the user's dotfile (~/.gitconfig), then the repository configuration (.git/config). Git has always used access(2) to decide whether to use each file; as an unfortunate side effect, that means that if one of these files is unreadable (e.g., EPERM or EIO), git skips it. So if I use ~/.gitconfig to override some settings but make a mistake and give it the wrong permissions then I am subject to the settings the sysadmin chose for /etc/gitconfig. Better to error out and ask the user to correct the problem. This only affects the user and xdg config files, since the user presumably has enough access to fix their permissions. If the system config file is unreadable, the best we can do is to warn about it so the user knows to notify someone and get on with work in the meantime. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-10-13config, gitignore: failure to access with ENOTDIR is okLibravatar Jonathan Nieder2-2/+5
The access_or_warn() function is used to check for optional configuration files like .gitconfig and .gitignore and warn when they are not accessible due to a configuration issue (e.g., bad permissions). It is not supposed to complain when a file is simply missing. Noticed on a system where ~/.config/git was a file --- when the new XDG_CONFIG_HOME support looks for ~/.config/git/config it should ignore ~/.config/git instead of printing irritating warnings: $ git status -s warning: unable to access '/home/jrn/.config/git/config': Not a directory warning: unable to access '/home/jrn/.config/git/config': Not a directory warning: unable to access '/home/jrn/.config/git/config': Not a directory warning: unable to access '/home/jrn/.config/git/config': Not a directory Compare v1.7.12.1~2^2 (attr:failure to open a .gitattributes file is OK with ENOTDIR, 2012-09-13). Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-09-13attr: failure to open a .gitattributes file is OK with ENOTDIRLibravatar Junio C Hamano1-1/+1
Often we consult an in-tree .gitattributes file that exists per directory. Majority of directories do not usually have such a file, and it is perfectly fine if we cannot open it because there is no such file, but we do want to know when there is an I/O or permission error. Earlier, we made the codepath warn when we fail to open it for reasons other than ENOENT for that reason. We however sometimes have to attempt to open the .gitattributes file from a directory that does not exist in the commit that is currently checked out. "git pack-objects" wants to know if a path is marked with "-delta" attributes, and "git archive" wants to know about export-ignore and export-subst attributes. Both commands may and do need to ask the attributes system about paths in an arbitrary commit. "git diff", after removing an entire directory, may want to know textconv on paths that used to be in that directory. Make sure we also ignore a failure to open per-directory attributes file due to ENOTDIR. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-21warn_on_inaccessible(): a helper to warn on inaccessible pathsLibravatar Junio C Hamano4-3/+11
The previous series introduced warnings to multiple places, but it could become tiring to see the warning on the same path over and over again during a single run of Git. Making just one function responsible for issuing this warning, we could later choose to keep track of which paths we issued a warning (it would involve a hash table of paths after running them through real_path() or something) in order to reduce noise. Right now we do not know if the noise reduction is necessary, but it still would be a good code reduction/sharing anyway. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-21attr: warn on inaccessible attribute filesLibravatar Jeff King1-1/+4
Just like config and gitignore files, we silently ignore missing or inaccessible attribute files. An existent but inaccessible file is probably a configuration error, so let's warn the user. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-21gitignore: report access errors of exclude filesLibravatar Jeff King1-2/+4
When we try to access gitignore files, we check for their existence with a call to "access". We silently ignore missing files. However, if a file is not readable, this may be a configuration error; let's warn the user. For $GIT_DIR/info/excludes or core.excludesfile, we can just use access_or_warn. However, for per-directory files we actually try to open them, so we must add a custom warning. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-21config: warn on inaccessible filesLibravatar Jeff King4-7/+18
Before reading a config file, we check "!access(path, R_OK)" to make sure that the file exists and is readable. If it's not, then we silently ignore it. For the case of ENOENT, this is fine, as the presence of the file is optional. For other cases, though, it may indicate a configuration error (e.g., not having permissions to read the file). Let's print a warning in these cases to let the user know. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-19Git 1.7.12Libravatar Junio C Hamano2-1/+6
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-17Merge branch 'jc/doc-git-updates' (early part)Libravatar Junio C Hamano1-1/+1
* 'jc/doc-git-updates' (early part): Documentation: update URL for formatted pages
2012-08-17Documentation: update URL for formatted pagesLibravatar Junio C Hamano1-1/+1
The one at kernel.org has not been updated for quite a while and can no longer be called "the latest". Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-16Merge git://github.com/git-l10n/git-po to update Swedish translationLibravatar Junio C Hamano1-6/+6
* git://github.com/git-l10n/git-po: l10n: Fixes to Swedish translation
2012-08-16l10n: Fixes to Swedish translationLibravatar Peter Krefting1-6/+6
Tersify texts overflowing an 80-character terminal. Fix spelling mistakes. Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2012-08-15Git 1.7.12-rc3Libravatar Junio C Hamano2-11/+2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-15Sync with 1.7.11.5Libravatar Junio C Hamano2-1/+10
2012-08-15Git 1.7.11.5Libravatar Junio C Hamano3-2/+11
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-15Merge branch 'rj/maint-grep-remove-redundant-test' into maintLibravatar Junio C Hamano1-11/+0
* rj/maint-grep-remove-redundant-test: t7810-*.sh: Remove redundant test
2012-08-15Merge branch 'hv/link-alt-odb-entry' into maintLibravatar Junio C Hamano1-1/+1
* hv/link-alt-odb-entry: link_alt_odb_entry: fix read over array bounds reported by valgrind
2012-08-10git svn: reset invalidates the memoized mergeinfo cachesLibravatar Peter Baumann2-2/+103
Since v1.7.0-rc2~11 (git-svn: persistent memoization, 2010-01-30), git-svn has maintained some private per-repository caches in .git/svn/.caches to avoid refetching and recalculating some mergeinfo-related information with every 'git svn fetch'. This memoization can cause problems, e.g consider the following case: SVN repo: ... - a - b - c - m <- trunk \ / d - e <- branch1 The Git import of the above repo is at commit 'a' and doesn't know about the branch1. In case of an 'git svn rebase', only the trunk of the SVN repo is imported. During the creation of the git commit 'm', git svn uses the svn:mergeinfo property and tries to find the corresponding git commit 'e' to create 'm' with 'c' and 'e' as parents. But git svn rebase only imports the current branch so commit 'e' is not imported. Therefore git svn fails to create commit 'm' as a merge commit, because one of its parents is not known to git. The imported history looks like this: ... - a - b - c - m <- trunk A later 'git svn fetch' to import all branches can't rewrite the commit 'm' to add 'e' as a parent and to make it a real git merge commit, because it was already imported. That's why the imported history misses the merge and looks like this: ... - a - b - c - m <- trunk \ d - e <- branch1 Right now the only known workaround for importing 'm' as a merge is to force reimporting 'm' again from SVN, e.g. via $ git svn reset --revision $(git find-rev $c) $ git svn fetch Sadly, this is where the behavior has regressed: git svn reset doesn't invalidate the old mergeinfo cache, which is no longer valid for the reimport, which leads to 'm' beeing imprted with only 'c' as parent. As solution to this problem, this commit invalidates the mergeinfo cache to force correct recalculation of the parents. During development of this patch, several ways for invalidating the cache where considered. One of them is to use Memoize::flush_cache, which will call the CLEAR method on the underlying Memoize persistency implementation. Sadly, neither Memoize::Storable nor the newer Memoize::YAML module introduced in 68f532f4ba888 could optionally be used implement the CLEAR method, so this is not an option. Reseting the internal hash used to store the memoized values has the same problem, because it calls the non-existing CLEAR method of the underlying persistency layer, too. Considering this and taking into account the different implementations of the memoization modules, where Memoize::Storable is not in our control, implementing the missing CLEAR method is not an option, at least not if Memoize::Storable is still used. Therefore the easiest solution to clear the cache is to delete the files on disk in 'git svn reset'. Normally, deleting the files behind the back of the memoization module would be problematic, because the in-memory representation would still exist and contain wrong data. Fortunately, the memoization is active in memory only for a small portion of the code. Invalidating the cache by deleting the files on disk if it isn't active should be safe. Signed-off-by: Peter Baumann <waste.manager@gmx.de> Signed-off-by: Steven Walter <stevenrwalter@gmail.com> Signed-off-by: Eric Wong <normalperson@yhbt.net>
2012-08-10git svn: handle errors and concurrent commits in dcommitLibravatar Robert Luberda2-19/+271
dcommit didn't handle errors returned by SVN and coped very poorly with concurrent commits that appear in SVN repository while dcommit was running. In both cases it left git repository in inconsistent state: index (which was reset with `git reset --mixed' after a successful commit to SVN) no longer matched the checkouted tree, when the following commit failed or needed to be rebased. See http://bugs.debian.org/676904 for examples. This patch fixes the issues by: - introducing error handler for dcommit. The handler will try to rebase or reset working tree before returning error to the end user. dcommit_rebase function was extracted out of cmd_dcommit to ensure consistency between cmd_dcommit and the error handler. - calling `git reset --mixed' only once after all patches are successfully committed to SVN. This ensures index is not touched for most of the time of dcommit run. Signed-off-by: Eric Wong <normalperson@yhbt.net>
2012-08-09Merge git://github.com/git-l10n/git-poLibravatar Junio C Hamano5-580/+1375
L10n updates for 1.7.12-rc2 * 'master' of git://github.com/git-l10n/git-po: l10n: Update Swedish translation (1168t0f0u) l10n: de.po: translate 77 new messages l10n: vi.po: update one message l10n: zh_CN.po: update one translation l10n: Update one message in git.pot
2012-08-09l10n: Update Swedish translation (1168t0f0u)Libravatar Peter Krefting1-510/+903
Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2012-08-08Merge branch 'bw/maint-1.7.9-solaris-getpass'Libravatar Junio C Hamano2-0/+2
The recent update to terminal I/O interface to get passwords &c interactively didn't quite work on Solaris. * bw/maint-1.7.9-solaris-getpass: Enable HAVE_DEV_TTY for Solaris terminal: seek when switching between reading and writing
2012-08-08Documentation: list git-credential in plumbing commandsLibravatar Matthieu Moy2-1/+2
Commit e30b2feb1b (Jun 24 2012, add 'git credential' plumbing command) forgot to add git-credential to command-list.txt, hence the command was not appearing in the documentation, making it hard for users to discover it. While we're there, capitalize the description line for git-crendential for consistency with other commands. Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-08Merge git://github.com/ralfth/git-po-deLibravatar Jiang Xin1-46/+442
* git://github.com/ralfth/git-po-de: l10n: de.po: translate 77 new messages
2012-08-07Git 1.7.12-rc2Libravatar Junio C Hamano2-5/+1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-07l10n: de.po: translate 77 new messagesLibravatar Ralf Thielow1-46/+442
Translate 77 new messages came from git.pot update in 3b6137f (l10n: Update git.pot (76 new, 4 removed messages)) and bb2ba06 (l10n: Update one message in git.pot). Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com> Signed-off-by: Thomas Rast <trast@student.ethz.ch>
2012-08-06Enable HAVE_DEV_TTY for SolarisLibravatar Ben Walton1-0/+1
Now that git_terminal_prompt can cleanly interact with /dev/tty on Solaris, enable HAVE_DEV_TTY so that this code path is used for credential reading instead of relying on the crippled getpass(). Signed-off-by: Ben Walton <bwalton@artsci.utoronto.ca> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-06terminal: seek when switching between reading and writingLibravatar Jeff King1-0/+1
When a stdio stream is opened in update mode (e.g., "w+"), the C standard forbids switching between reading or writing without an intervening positioning function. Many implementations are lenient about this, but Solaris libc will flush the recently-read contents to the output buffer. In this instance, that meant writing the non-echoed password that the user just typed to the terminal. Fix it by inserting a no-op fseek between the read and write. The opposite direction (writing followed by reading) is also disallowed, but our intervening fflush is an acceptable positioning function for that alternative. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-07l10n: vi.po: update one messageLibravatar Tran Ngoc Quan1-9/+11
* Translate message that updated from commit bb2ba06 Signed-off-by: Tran Ngoc Quan <vnwildman@gmail.com>
2012-08-06Drop 1.7.11.x items from 1.7.12 release notesLibravatar Junio C Hamano1-13/+0
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-06Sync with maintLibravatar Junio C Hamano1-0/+28
2012-08-06Prepare for 1.7.11.5Libravatar Junio C Hamano2-1/+29
Hopefully that will be the final 1.7.11.x maintenance release. Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-06Merge branch 'jn/block-sha1' into maintLibravatar Junio C Hamano2-7/+6
* jn/block-sha1: Makefile: BLK_SHA1 does not require fast htonl() and unaligned loads block-sha1: put expanded macro parameters in parentheses block-sha1: avoid pointer conversion that violates alignment constraints
2012-08-06Merge branch 'jn/make-assembly-in-right-directory' into maintLibravatar Junio C Hamano1-1/+1
* jn/make-assembly-in-right-directory: Makefile: fix location of listing produced by "make subdir/foo.s"
2012-08-06Merge branch 'ms/daemon-doc-typo' into maintLibravatar Junio C Hamano1-1/+1
* ms/daemon-doc-typo: Documentation/git-daemon: add missing word
2012-08-06Merge branch 'lm/git-blame-el' into maintLibravatar Junio C Hamano1-36/+37
* lm/git-blame-el: git-blame.el: Do not use bare 0 to mean (point-min) git-blame.el: Use with-current-buffer where appropriate git-blame.el: Do not use goto-line in lisp code
2012-08-06Merge branch 'rs/ipv6-ssh-url' into maintLibravatar Junio C Hamano1-1/+1
* rs/ipv6-ssh-url: git: Wrong parsing of ssh urls with IPv6 literals ignores port
2012-08-06Merge branch 'rs/git-blame-mapcar-mapc' into maintLibravatar Junio C Hamano1-1/+1
* rs/git-blame-mapcar-mapc: git-blame.el: use mapc instead of mapcar
2012-08-06Merge branch 'rr/doc-commit' into maintLibravatar Junio C Hamano1-0/+8
* rr/doc-commit: commit: document a couple of options
2012-08-06doc: A few minor copy edits.Libravatar Štěpán Němec5-10/+10
- (glossary) the quotes around the Wikipedia URL prevented its linkification in frontends that support it; remove them - (manual) newer version (SHA-1) == following, older == preceding, not the other way around - trivial typo and wording fixes Signed-off-by: Štěpán Němec <stepnem@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-06Merge branch 'jk/maint-checkout-orphan-check-fix' into maintLibravatar Junio C Hamano1-1/+1
* jk/maint-checkout-orphan-check-fix: checkout: don't confuse ref and object flags
2012-08-06Merge branch 'mh/maint-revisions-doc' into maintLibravatar Junio C Hamano1-6/+37
* mh/maint-revisions-doc: Enumerate revision range specifiers in the documentation Make <refname> documentation more consistent.
2012-08-06Merge branch 'jc/mergetool-tool-help' into maintLibravatar Junio C Hamano3-5/+49
* jc/mergetool-tool-help: mergetool: support --tool-help option like difftool does
2012-08-06Makefile: use overridable $(FIND) instead of hard-coded 'find'Libravatar Johannes Sixt1-1/+1
The Makefile already offers the variable $(FIND) and uses it except in one place. Fix it. Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-08-07l10n: zh_CN.po: update one translationLibravatar Jiang Xin1-8/+10
Translate 1 new messages came from git.pot update in bb2ba06 (l10n: Update one message in git.pot) Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2012-08-06l10n: Update one message in git.potLibravatar Jiang Xin1-7/+9
This update comes from commit v1.7.12-rc1-18-ge0453 (merge-recursive: separate message for common ancestors). Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2012-08-05Merge git://github.com/git-l10n/git-poLibravatar Junio C Hamano3-449/+1265
* git://github.com/git-l10n/git-po: l10n: zh_CN.po: translate 76 new messages l10n: vi.po update to follow POT in 3b613 l10n: Update git.pot (76 new, 4 removed messages)
2012-08-05merge-recursive: separate message for common ancestorsLibravatar Ralf Thielow1-1/+4
The function "merge_recursive" prints the count of common ancestors as "found %u common ancestor(s):". We should use a singular and a plural form of this message to help translators. Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>