{"thread":{"id":"17548","subject":"Recovering the index after a git crash?","startedAt":"2009-02-04T08:36:30Z","lastAt":"2009-02-19T14:12:47Z","messageCount":9,"participants":["Matthieu Moy","Sverre Rabbelier","Mikael Magnusson","Junio C Hamano"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"103084","messageId":"vpqljsma99t.fsf@bauges.imag.fr","threadId":"17548","inReplyTo":null,"subject":"Recovering the index after a git crash?","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@imag.fr","sentAt":"2009-02-04T08:36:30Z","receivedAt":"2009-02-04T08:36:30Z","isPatch":false,"sender":{"key":"git@matthieu-moy.fr","avatar":"https://avatars.githubusercontent.com/u/14709?v=4"},"body":"Hi,\n\nI'm debugging a git assertion failure, which leaves a .git/index.lock\nin the way. After running the failed command, git refuses to do\nanything in this directory, complaining with:\n\n  fatal: unable to create '.git/index.lock': File exists\n\nWhat I'm doing then is just \"rm .git/index.lock\". Is it safe to do it?\nI guess I should just make sure there's no git process running, but is\nthere anything else to check?\n\nI'll write a FAQ entry on the wiki with answers, and that would\nprobably be a good idea to give indication to the user directly in the\nerror message too, otherwise, the problem can be blocking for\nbeginners.\n\nThanks,\n\n<my life>\nI had to support students using SVN for a month in January, and even\nwhen SVN says:\n\n  svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)\n\nit's still hard for many students to understand that they have to run\n\"svn cleanup\" and prefer sending me a mail saying \"it doesn't work\nanymore\" :-(.\n</my life>\n\n-- \nMatthieu\n"},{"id":"103103","messageId":"1233741505-24020-1-git-send-email-Matthieu.Moy@imag.fr","threadId":"17548","inReplyTo":"vpqljsma99t.fsf@bauges.imag.fr","subject":"[PATCH/RFC] More friendly message when locking the index fails.","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@imag.fr","sentAt":"2009-02-04T09:58:25Z","receivedAt":"2009-02-04T09:58:25Z","isPatch":true,"sender":{"key":"git@matthieu-moy.fr","avatar":"https://avatars.githubusercontent.com/u/14709?v=4"},"body":"Just saying that index.lock exists doesn't tell the user _what_ to do\nto fix the problem. We should give an indication that it's normally\nsafe to delete index.lock after making sure git isn't running here.\n---\n> I'll write a FAQ entry on the wiki with answers, and that would\n> probably be a good idea to give indication to the user directly in the\n> error message too, otherwise, the problem can be blocking for\n> beginners.\n\nSomething along the lines of this patch maybe?\n\n builtin-update-index.c |   11 +++++++++--\n lockfile.c             |    9 ++++++++-\n 2 files changed, 17 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin-update-index.c b/builtin-update-index.c\nindex 5604977..ab8ab8f 100644\n--- a/builtin-update-index.c\n+++ b/builtin-update-index.c\n@@ -742,8 +742,15 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n \t\tif (newfd < 0) {\n \t\t\tif (refresh_flags & REFRESH_QUIET)\n \t\t\t\texit(128);\n-\t\t\tdie(\"unable to create '%s.lock': %s\",\n-\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\tif (lock_error == EEXIST) {\n+\t\t\t\tdie(\"Unable to create '%s.lock': %s\\n\"\n+\t\t\t\t    \"This probably means a git process crashed in this repository earlier.\\n\"\n+\t\t\t\t    \"Make sure no other git process is running and remove the file manually.\",\n+\t\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\t} else {\n+\t\t\t\tdie(\"Unable to create '%s.lock': %s\",\n+\t\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\t}\n \t\t}\n \t\tif (write_cache(newfd, active_cache, active_nr) ||\n \t\t    commit_locked_index(lock_file))\ndiff --git a/lockfile.c b/lockfile.c\nindex 021c337..bb59f7e 100644\n--- a/lockfile.c\n+++ b/lockfile.c\n@@ -159,7 +159,14 @@ int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)\n {\n \tint fd = lock_file(lk, path, flags);\n \tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR))\n-\t\tdie(\"unable to create '%s.lock': %s\", path, strerror(errno));\n+\t\tif (errno == EEXIST) {\n+\t\t\tdie(\"Unable to create '%s.lock': %s\\n\"\n+\t\t\t    \"This probably means a git process crashed in this repository earlier.\\n\"\n+\t\t\t    \"Make sure no other git process is running and remove the file manually.\",\n+\t\t\t    path, strerror(errno));\n+\t\t} else {\n+\t\t\tdie(\"Unable to create '%s.lock': %s\", path, strerror(errno));\n+\t\t}\n \treturn fd;\n }\n \n-- \n1.6.1.2.322.g01114.dirty\n"},{"id":"103108","messageId":"bd6139dc0902040350n3af5d37ctc6976fd77671fb82@mail.gmail.com","threadId":"17548","inReplyTo":"1233741505-24020-1-git-send-email-Matthieu.Moy@imag.fr","subject":"Re: [PATCH/RFC] More friendly message when locking the index fails.","fromName":"Sverre Rabbelier","fromEmail":"srabbelier@gmail.com","sentAt":"2009-02-04T11:50:06Z","receivedAt":"2009-02-04T11:50:06Z","isPatch":true,"sender":{"key":"srabbelier@gmail.com","avatar":"https://avatars.githubusercontent.com/u/3098?v=4"},"body":"On Wed, Feb 4, 2009 at 10:58, Matthieu Moy <Matthieu.Moy@imag.fr> wrote:\n> +                                   \"This probably means a git process crashed in this repository earlier.\\n\"\n> +                                   \"Make sure no other git process is running and remove the file manually.\",\n> +                                   get_index_file(), strerror(lock_error));\n\nHow about \"If no other git process is currently running, this probably\nmeans....\" instead? E.g., sometimes I run 'git commit' in one terminal\nwindow, and then switch to another before committing (to review the\ndiff for example), which would cause an index.lock file to be present\nvalidly.\n\n-- \nCheers,\n\nSverre Rabbelier\n"},{"id":"103475","messageId":"237967ef0902060538r1189573aob15c8e40512343ce@mail.gmail.com","threadId":"17548","inReplyTo":"vpqljsma99t.fsf@bauges.imag.fr","subject":"Re: Recovering the index after a git crash?","fromName":"Mikael Magnusson","fromEmail":"mikachu@gmail.com","sentAt":"2009-02-06T13:38:48Z","receivedAt":"2009-02-06T13:38:48Z","isPatch":false,"sender":{"key":"mikachu@gmail.com","avatar":null},"body":"2009/2/4 Matthieu Moy <Matthieu.Moy@imag.fr>:\n> Hi,\n>\n> I'm debugging a git assertion failure, which leaves a .git/index.lock\n> in the way. After running the failed command, git refuses to do\n> anything in this directory, complaining with:\n>\n>  fatal: unable to create '.git/index.lock': File exists\n>\n> What I'm doing then is just \"rm .git/index.lock\". Is it safe to do it?\n> I guess I should just make sure there's no git process running, but is\n> there anything else to check?\n\nIt should be safe, yes. Often it is even safe to remove .git/index\nitself, since you can restore it from the latest commit with 'git\nreset'.\n\n-- \nMikael Magnusson\n"},{"id":"103489","messageId":"1233930966-17022-1-git-send-email-Matthieu.Moy@imag.fr","threadId":"17548","inReplyTo":"vpqljsma99t.fsf@bauges.imag.fr","subject":"[PATCH] More friendly message when locking the index fails.","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@imag.fr","sentAt":"2009-02-06T14:36:06Z","receivedAt":"2009-02-06T14:36:06Z","isPatch":true,"sender":{"key":"git@matthieu-moy.fr","avatar":"https://avatars.githubusercontent.com/u/14709?v=4"},"body":"Just saying that index.lock exists doesn't tell the user _what_ to do\nto fix the problem. We should give an indication that it's normally\nsafe to delete index.lock after making sure git isn't running here.\n\nSigned-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>\n---\nSverre Rabbelier <srabbelier@gmail.com> writes:\n\n> How about \"If no other git process is currently running, this probably\n> means....\" instead? E.g., sometimes I run 'git commit' in one terminal\n> window, and then switch to another before committing (to review the\n> diff for example), which would cause an index.lock file to be present\n> validly.\n\nRight, here's an updated version.\n\n builtin-update-index.c |   12 ++++++++++--\n lockfile.c             |   10 +++++++++-\n 2 files changed, 19 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin-update-index.c b/builtin-update-index.c\nindex 5604977..23b97db 100644\n--- a/builtin-update-index.c\n+++ b/builtin-update-index.c\n@@ -742,8 +742,16 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n \t\tif (newfd < 0) {\n \t\t\tif (refresh_flags & REFRESH_QUIET)\n \t\t\t\texit(128);\n-\t\t\tdie(\"unable to create '%s.lock': %s\",\n-\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\tif (lock_error == EEXIST) {\n+\t\t\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n+\t\t\t\t    \"If no other git process is currently running, this probably means a\\n\"\n+\t\t\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n+\t\t\t\t    \"process is running and remove the file manually to continue.\",\n+\t\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\t} else {\n+\t\t\t\tdie(\"Unable to create '%s.lock': %s\",\n+\t\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\t}\n \t\t}\n \t\tif (write_cache(newfd, active_cache, active_nr) ||\n \t\t    commit_locked_index(lock_file))\ndiff --git a/lockfile.c b/lockfile.c\nindex 021c337..9bde859 100644\n--- a/lockfile.c\n+++ b/lockfile.c\n@@ -159,7 +159,15 @@ int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)\n {\n \tint fd = lock_file(lk, path, flags);\n \tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR))\n-\t\tdie(\"unable to create '%s.lock': %s\", path, strerror(errno));\n+\t\tif (errno == EEXIST) {\n+\t\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n+\t\t\t    \"If no other git process is currently running, this probably means a\\n\"\n+\t\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n+\t\t\t    \"process is running and remove the file manually to continue.\",\n+\t\t\t    path, strerror(errno));\n+\t\t} else {\n+\t\t\tdie(\"Unable to create '%s.lock': %s\", path, strerror(errno));\n+\t\t}\n \treturn fd;\n }\n \n-- \n1.6.1.2.351.g032a4.dirty\n"},{"id":"103497","messageId":"1233932964-22969-1-git-send-email-Matthieu.Moy@imag.fr","threadId":"17548","inReplyTo":"1233930966-17022-1-git-send-email-Matthieu.Moy@imag.fr","subject":"[PATCH v3] More friendly message when locking the index fails.","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@imag.fr","sentAt":"2009-02-06T15:09:24Z","receivedAt":"2009-02-06T15:09:24Z","isPatch":true,"sender":{"key":"git@matthieu-moy.fr","avatar":"https://avatars.githubusercontent.com/u/14709?v=4"},"body":"Just saying that index.lock exists doesn't tell the user _what_ to do\nto fix the problem. We should give an indication that it's normally\nsafe to delete index.lock after making sure git isn't running here.\n\nSigned-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>\n---\nOops, I hadn't noticed, but the previous version triggered a warning\nbecause of lack of braces on the if. Sorry.\n\n builtin-update-index.c |   12 ++++++++++--\n lockfile.c             |   13 +++++++++++--\n 2 files changed, 21 insertions(+), 4 deletions(-)\n\ndiff --git a/builtin-update-index.c b/builtin-update-index.c\nindex 5604977..23b97db 100644\n--- a/builtin-update-index.c\n+++ b/builtin-update-index.c\n@@ -742,8 +742,16 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n \t\tif (newfd < 0) {\n \t\t\tif (refresh_flags & REFRESH_QUIET)\n \t\t\t\texit(128);\n-\t\t\tdie(\"unable to create '%s.lock': %s\",\n-\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\tif (lock_error == EEXIST) {\n+\t\t\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n+\t\t\t\t    \"If no other git process is currently running, this probably means a\\n\"\n+\t\t\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n+\t\t\t\t    \"process is running and remove the file manually to continue.\",\n+\t\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\t} else {\n+\t\t\t\tdie(\"Unable to create '%s.lock': %s\",\n+\t\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\t}\n \t\t}\n \t\tif (write_cache(newfd, active_cache, active_nr) ||\n \t\t    commit_locked_index(lock_file))\ndiff --git a/lockfile.c b/lockfile.c\nindex 021c337..c812596 100644\n--- a/lockfile.c\n+++ b/lockfile.c\n@@ -158,8 +158,17 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)\n int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)\n {\n \tint fd = lock_file(lk, path, flags);\n-\tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR))\n-\t\tdie(\"unable to create '%s.lock': %s\", path, strerror(errno));\n+\tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR)) {\n+\t\tif (errno == EEXIST) {\n+\t\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n+\t\t\t    \"If no other git process is currently running, this probably means a\\n\"\n+\t\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n+\t\t\t    \"process is running and remove the file manually to continue.\",\n+\t\t\t    path, strerror(errno));\n+\t\t} else {\n+\t\t\tdie(\"Unable to create '%s.lock': %s\", path, strerror(errno));\n+\t\t}\n+\t}\n \treturn fd;\n }\n \n-- \n1.6.1.2.351.g80eb2.dirty\n"},{"id":"103574","messageId":"7v63jn13qd.fsf@gitster.siamese.dyndns.org","threadId":"17548","inReplyTo":"1233932964-22969-1-git-send-email-Matthieu.Moy@imag.fr","subject":"Re: [PATCH v3] More friendly message when locking the index fails.","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2009-02-07T00:37:46Z","receivedAt":"2009-02-07T00:37:46Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Matthieu Moy <Matthieu.Moy@imag.fr> writes:\n\n> Just saying that index.lock exists doesn't tell the user _what_ to do\n> to fix the problem. We should give an indication that it's normally\n> safe to delete index.lock after making sure git isn't running here.\n>\n> Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>\n> ---\n> Oops, I hadn't noticed, but the previous version triggered a warning\n> because of lack of braces on the if. Sorry.\n\nPerhaps it is a good idea to introduce\n\nNORETURN void unable_to_lock_index_die(const char *path, int err)\n{\n\tif (err == EEXIST)\n\t        die(...);\n \telse\n        \tdie(...);\n}\n\nin lockfile.c and call it from these two places you are touching?\n\n>  builtin-update-index.c |   12 ++++++++++--\n>  lockfile.c             |   13 +++++++++++--\n>  2 files changed, 21 insertions(+), 4 deletions(-)\n>\n> diff --git a/builtin-update-index.c b/builtin-update-index.c\n> index 5604977..23b97db 100644\n> --- a/builtin-update-index.c\n> +++ b/builtin-update-index.c\n> @@ -742,8 +742,16 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n>  \t\tif (newfd < 0) {\n>  \t\t\tif (refresh_flags & REFRESH_QUIET)\n>  \t\t\t\texit(128);\n> -\t\t\tdie(\"unable to create '%s.lock': %s\",\n> -\t\t\t    get_index_file(), strerror(lock_error));\n> +\t\t\tif (lock_error == EEXIST) {\n> +\t\t\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n> +\t\t\t\t    \"If no other git process is currently running, this probably means a\\n\"\n> +\t\t\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n> +\t\t\t\t    \"process is running and remove the file manually to continue.\",\n> +\t\t\t\t    get_index_file(), strerror(lock_error));\n> +\t\t\t} else {\n> +\t\t\t\tdie(\"Unable to create '%s.lock': %s\",\n> +\t\t\t\t    get_index_file(), strerror(lock_error));\n> +\t\t\t}\n>  \t\t}\n>  \t\tif (write_cache(newfd, active_cache, active_nr) ||\n>  \t\t    commit_locked_index(lock_file))\n> diff --git a/lockfile.c b/lockfile.c\n> index 021c337..c812596 100644\n> --- a/lockfile.c\n> +++ b/lockfile.c\n> @@ -158,8 +158,17 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)\n>  int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)\n>  {\n>  \tint fd = lock_file(lk, path, flags);\n> -\tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR))\n> -\t\tdie(\"unable to create '%s.lock': %s\", path, strerror(errno));\n> +\tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR)) {\n> +\t\tif (errno == EEXIST) {\n> +\t\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n> +\t\t\t    \"If no other git process is currently running, this probably means a\\n\"\n> +\t\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n> +\t\t\t    \"process is running and remove the file manually to continue.\",\n> +\t\t\t    path, strerror(errno));\n> +\t\t} else {\n> +\t\t\tdie(\"Unable to create '%s.lock': %s\", path, strerror(errno));\n> +\t\t}\n> +\t}\n>  \treturn fd;\n>  }\n>  \n> -- \n> 1.6.1.2.351.g80eb2.dirty\n>\n> --\n> To unsubscribe from this list: send the line \"unsubscribe git\" in\n> the body of a message to majordomo@vger.kernel.org\n> More majordomo info at  http://vger.kernel.org/majordomo-info.html\n"},{"id":"105459","messageId":"1235048058-6181-1-git-send-email-Matthieu.Moy@imag.fr","threadId":"17548","inReplyTo":"7v63jn13qd.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] More friendly message when locking the index fails.","fromName":"Matthieu Moy","fromEmail":"matthieu.moy@imag.fr","sentAt":"2009-02-19T12:54:18Z","receivedAt":"2009-02-19T12:54:18Z","isPatch":true,"sender":{"key":"git@matthieu-moy.fr","avatar":"https://avatars.githubusercontent.com/u/14709?v=4"},"body":"Just saying that index.lock exists doesn't tell the user _what_ to do\nto fix the problem. We should give an indication that it's normally\nsafe to delete index.lock after making sure git isn't running here.\n\nSigned-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>\n---\n> Perhaps it is a good idea to introduce\n> \n> NORETURN void unable_to_lock_index_die(const char *path, int err)\n> {\n> \tif (err == EEXIST)\n> \t        die(...);\n>  \telse\n>         \tdie(...);\n> }\n> \n> in lockfile.c and call it from these two places you are touching?\n\nHere it is!\n\n builtin-update-index.c |    3 +--\n cache.h                |    1 +\n lockfile.c             |   16 +++++++++++++++-\n 3 files changed, 17 insertions(+), 3 deletions(-)\n\ndiff --git a/builtin-update-index.c b/builtin-update-index.c\nindex 5604977..dd43d5b 100644\n--- a/builtin-update-index.c\n+++ b/builtin-update-index.c\n@@ -742,8 +742,7 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)\n \t\tif (newfd < 0) {\n \t\t\tif (refresh_flags & REFRESH_QUIET)\n \t\t\t\texit(128);\n-\t\t\tdie(\"unable to create '%s.lock': %s\",\n-\t\t\t    get_index_file(), strerror(lock_error));\n+\t\t\tunable_to_lock_index_die(get_index_file(), lock_error);\n \t\t}\n \t\tif (write_cache(newfd, active_cache, active_nr) ||\n \t\t    commit_locked_index(lock_file))\ndiff --git a/cache.h b/cache.h\nindex 37dfb1c..bb5a190 100644\n--- a/cache.h\n+++ b/cache.h\n@@ -484,6 +484,7 @@ struct lock_file {\n };\n #define LOCK_DIE_ON_ERROR 1\n #define LOCK_NODEREF 2\n+extern NORETURN void unable_to_lock_index_die(const char *path, int err);\n extern int hold_lock_file_for_update(struct lock_file *, const char *path, int);\n extern int hold_lock_file_for_append(struct lock_file *, const char *path, int);\n extern int commit_lock_file(struct lock_file *);\ndiff --git a/lockfile.c b/lockfile.c\nindex 021c337..1db1a2f 100644\n--- a/lockfile.c\n+++ b/lockfile.c\n@@ -155,11 +155,25 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)\n \treturn lk->fd;\n }\n \n+\n+NORETURN void unable_to_lock_index_die(const char *path, int err)\n+{\n+\tif (errno == EEXIST) {\n+\t\tdie(\"Unable to create '%s.lock': %s.\\n\\n\"\n+\t\t    \"If no other git process is currently running, this probably means a\\n\"\n+\t\t    \"git process crashed in this repository earlier. Make sure no other git\\n\"\n+\t\t    \"process is running and remove the file manually to continue.\",\n+\t\t    path, strerror(err));\n+\t} else {\n+\t\tdie(\"Unable to create '%s.lock': %s\", path, strerror(err));\n+\t}\n+}\n+\n int hold_lock_file_for_update(struct lock_file *lk, const char *path, int flags)\n {\n \tint fd = lock_file(lk, path, flags);\n \tif (fd < 0 && (flags & LOCK_DIE_ON_ERROR))\n-\t\tdie(\"unable to create '%s.lock': %s\", path, strerror(errno));\n+\t\tunable_to_lock_index_die(path, errno);\n \treturn fd;\n }\n \n-- \n1.6.2.rc1.14.g7f87d\n"},{"id":"105468","messageId":"bd6139dc0902190612u7819bda9s50638ed46df5cb64@mail.gmail.com","threadId":"17548","inReplyTo":"1235048058-6181-1-git-send-email-Matthieu.Moy@imag.fr","subject":"Re: [PATCH] More friendly message when locking the index fails.","fromName":"Sverre Rabbelier","fromEmail":"srabbelier@gmail.com","sentAt":"2009-02-19T14:12:47Z","receivedAt":"2009-02-19T14:12:47Z","isPatch":true,"sender":{"key":"srabbelier@gmail.com","avatar":"https://avatars.githubusercontent.com/u/3098?v=4"},"body":"Heya,\n\nOn Thu, Feb 19, 2009 at 13:54, Matthieu Moy <Matthieu.Moy@imag.fr> wrote:\n> Just saying that index.lock exists doesn't tell the user _what_ to do\n> to fix the problem. We should give an indication that it's normally\n> safe to delete index.lock after making sure git isn't running here.\n\nSurely we need a 'git cleanup' which will attempt to clean up such\nmess, fail miserably most of the time and might even corrupt your\nrepository further! Oh wait, wrong VCS...\n\n-- \nCheers,\n\nSverre Rabbelier\n"}]}