More friendly message when locking the index fails.
Just saying that index.lock exists doesn't tell the user _what_ to do to fix the problem. We should give an indication that it's normally safe to delete index.lock after making sure git isn't running here. Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b452cc16d8
commit
e43a6fd3e9
@ -742,8 +742,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
|
|||||||
if (newfd < 0) {
|
if (newfd < 0) {
|
||||||
if (refresh_flags & REFRESH_QUIET)
|
if (refresh_flags & REFRESH_QUIET)
|
||||||
exit(128);
|
exit(128);
|
||||||
die("unable to create '%s.lock': %s",
|
unable_to_lock_index_die(get_index_file(), lock_error);
|
||||||
get_index_file(), strerror(lock_error));
|
|
||||||
}
|
}
|
||||||
if (write_cache(newfd, active_cache, active_nr) ||
|
if (write_cache(newfd, active_cache, active_nr) ||
|
||||||
commit_locked_index(lock_file))
|
commit_locked_index(lock_file))
|
||||||
|
1
cache.h
1
cache.h
@ -484,6 +484,7 @@ struct lock_file {
|
|||||||
};
|
};
|
||||||
#define LOCK_DIE_ON_ERROR 1
|
#define LOCK_DIE_ON_ERROR 1
|
||||||
#define LOCK_NODEREF 2
|
#define LOCK_NODEREF 2
|
||||||
|
extern NORETURN void unable_to_lock_index_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 int commit_lock_file(struct lock_file *);
|
extern int commit_lock_file(struct lock_file *);
|
||||||
|
16
lockfile.c
16
lockfile.c
@ -158,11 +158,25 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
|
|||||||
return lk->fd;
|
return lk->fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NORETURN void unable_to_lock_index_die(const char *path, int err)
|
||||||
|
{
|
||||||
|
if (errno == EEXIST) {
|
||||||
|
die("Unable to create '%s.lock': %s.\n\n"
|
||||||
|
"If no other git process is currently running, this probably means a\n"
|
||||||
|
"git process crashed in this repository earlier. Make sure no other git\n"
|
||||||
|
"process is running and remove the file manually to continue.",
|
||||||
|
path, strerror(err));
|
||||||
|
} else {
|
||||||
|
die("Unable to create '%s.lock': %s", path, strerror(err));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)
|
int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)
|
||||||
{
|
{
|
||||||
int fd = lock_file(lk, path, flags);
|
int fd = lock_file(lk, path, flags);
|
||||||
if (fd < 0 && (flags & LOCK_DIE_ON_ERROR))
|
if (fd < 0 && (flags & LOCK_DIE_ON_ERROR))
|
||||||
die("unable to create '%s.lock': %s", path, strerror(errno));
|
unable_to_lock_index_die(path, errno);
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user