diff options
-rw-r--r-- | lockfile.c | 11 | ||||
-rw-r--r-- | lockfile.h | 8 |
2 files changed, 16 insertions, 3 deletions
diff --git a/lockfile.c b/lockfile.c index 9268cdf325..f7e8104449 100644 --- a/lockfile.c +++ b/lockfile.c @@ -174,8 +174,15 @@ int hold_lock_file_for_update_timeout(struct lock_file *lk, const char *path, int flags, long timeout_ms) { int fd = lock_file_timeout(lk, path, flags, timeout_ms); - if (fd < 0 && (flags & LOCK_DIE_ON_ERROR)) - unable_to_lock_die(path, errno); + if (fd < 0) { + if (flags & LOCK_DIE_ON_ERROR) + unable_to_lock_die(path, errno); + else if (!(flags & LOCK_SILENT_ON_ERROR)) { + struct strbuf buf = STRBUF_INIT; + unable_to_lock_message(path, errno, &buf); + error("%s", buf.buf); + } + } return fd; } diff --git a/lockfile.h b/lockfile.h index d26ad27b2b..98b4862254 100644 --- a/lockfile.h +++ b/lockfile.h @@ -129,9 +129,15 @@ struct lock_file { /* * If a lock is already taken for the file, `die()` with an error * message. If this flag is not specified, trying to lock a file that - * is already locked returns -1 to the caller. + * is already locked gives the same error message and returns -1 to + * the caller. */ #define LOCK_DIE_ON_ERROR 1 +/* + * ... or the function can be told to be totally silent and return + * -1 to the caller upon error with this flag + */ +#define LOCK_SILENT_ON_ERROR 2 /* * Usually symbolic links in the destination path are resolved. This |