get_locked_file_path(): new function

Add a function to return the path of the file that is locked by a
lock_file object. This reduces the knowledge that callers have to have
about the lock_file layout.

Suggested-by: Ronnie Sahlberg <sahlberg@google.com>
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michael Haggerty 2014-10-01 12:28:39 +02:00 committed by Junio C Hamano
parent 316683bd37
commit ec38b4e482
4 changed files with 16 additions and 3 deletions

View File

@ -143,6 +143,11 @@ hold_lock_file_for_append::
the existing contents of the file (if any) to the lockfile and the existing contents of the file (if any) to the lockfile and
position its write pointer at the end of the file. position its write pointer at the end of the file.
get_locked_file_path::
Return the path of the file that is locked by the specified
lock_file object. The caller must free the memory.
commit_lock_file:: commit_lock_file::
Take a pointer to the `struct lock_file` initialized with an Take a pointer to the `struct lock_file` initialized with an

View File

@ -590,6 +590,7 @@ extern void unable_to_lock_message(const char *path, int err,
extern NORETURN void unable_to_lock_die(const char *path, int err); extern NORETURN void unable_to_lock_die(const char *path, int err);
extern int hold_lock_file_for_update(struct lock_file *, const char *path, int); extern int hold_lock_file_for_update(struct lock_file *, const char *path, int);
extern int hold_lock_file_for_append(struct lock_file *, const char *path, int); extern int hold_lock_file_for_append(struct lock_file *, const char *path, int);
extern char *get_locked_file_path(struct lock_file *);
extern int commit_lock_file_to(struct lock_file *, const char *path); extern int commit_lock_file_to(struct lock_file *, const char *path);
extern int commit_lock_file(struct lock_file *); extern int commit_lock_file(struct lock_file *);
extern int reopen_lock_file(struct lock_file *); extern int reopen_lock_file(struct lock_file *);

View File

@ -257,6 +257,15 @@ int hold_lock_file_for_append(struct lock_file *lk, const char *path, int flags)
return fd; return fd;
} }
char *get_locked_file_path(struct lock_file *lk)
{
if (!lk->active)
die("BUG: get_locked_file_path() called for unlocked object");
if (lk->filename.len <= LOCK_SUFFIX_LEN)
die("BUG: get_locked_file_path() called for malformed lock object");
return xmemdupz(lk->filename.buf, lk->filename.len - LOCK_SUFFIX_LEN);
}
int close_lock_file(struct lock_file *lk) int close_lock_file(struct lock_file *lk)
{ {
int fd = lk->fd; int fd = lk->fd;

4
refs.c
View File

@ -2606,9 +2606,7 @@ static int delete_ref_loose(struct ref_lock *lock, int flag)
* loose. The loose file name is the same as the * loose. The loose file name is the same as the
* lockfile name, minus ".lock": * lockfile name, minus ".lock":
*/ */
char *loose_filename = xmemdupz( char *loose_filename = get_locked_file_path(lock->lk);
lock->lk->filename.buf,
lock->lk->filename.len - LOCK_SUFFIX_LEN);
int err = unlink_or_warn(loose_filename); int err = unlink_or_warn(loose_filename);
free(loose_filename); free(loose_filename);
if (err && errno != ENOENT) if (err && errno != ENOENT)