The message from the lockfile API includes advice about how to remove
a stale lock file after a previous git process crashed.

Pass the LOCK_OUTSIDE_REPOSITORY flag to avoid confusing error
messages that imply the lockfile is under .git.  These functions (and
'git config --file') are useful for arbitrary files in git config
format, including both files outside .git such as /etc/gitconfig and
$XDG_CONFIG_HOME/git/config and files under .git such as
$GIT_DIR/config.

Signed-off-by: Jonathan Nieder <jrnie...@gmail.com>
---
 config.c | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/config.c b/config.c
index 15a2983..dacde5f 100644
--- a/config.c
+++ b/config.c
@@ -1940,9 +1940,15 @@ int git_config_set_multivar_in_file(const char 
*config_filename,
         * contents of .git/config will be written into it.
         */
        lock = xcalloc(1, sizeof(struct lock_file));
-       fd = hold_lock_file_for_update(lock, config_filename, 0);
+       fd = hold_lock_file_for_update(lock, config_filename,
+                                      LOCK_OUTSIDE_REPOSITORY);
        if (fd < 0) {
-               error("could not lock config file %s: %s", config_filename, 
strerror(errno));
+               struct strbuf err = STRBUF_INIT;
+
+               unable_to_lock_message(config_filename,
+                                      LOCK_OUTSIDE_REPOSITORY, errno, &err);
+               error("%s", err.buf);
+               strbuf_release(&err);
                free(store.key);
                ret = CONFIG_NO_LOCK;
                goto out_free;
@@ -2211,9 +2217,15 @@ int git_config_rename_section_in_file(const char 
*config_filename,
                config_filename = filename_buf = git_pathdup("config");
 
        lock = xcalloc(1, sizeof(struct lock_file));
-       out_fd = hold_lock_file_for_update(lock, config_filename, 0);
+       out_fd = hold_lock_file_for_update(lock, config_filename,
+                                          LOCK_OUTSIDE_REPOSITORY);
        if (out_fd < 0) {
-               ret = error("could not lock config file %s", config_filename);
+               struct strbuf err = STRBUF_INIT;
+
+               unable_to_lock_message(config_filename,
+                                      LOCK_OUTSIDE_REPOSITORY, errno, &err);
+               ret = error("%s", err.buf);
+               strbuf_release(&err);
                goto out;
        }
 
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to