{"thread":{"id":"3965","subject":"[PATCH] Make die() and error() prefix line with binary name if set","startedAt":"2006-04-25T14:08:55Z","lastAt":"2006-04-25T14:08:55Z","messageCount":1,"participants":["Rocco Rutte"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"19095","messageId":"20060425140854.GG5482@bolero.cs.tu-berlin.de","threadId":"3965","inReplyTo":null,"subject":"[PATCH] Make die() and error() prefix line with binary name if set","fromName":"Rocco Rutte","fromEmail":"pdmef@gmx.net","sentAt":"2006-04-25T14:08:55Z","receivedAt":"2006-04-25T14:08:55Z","isPatch":true,"sender":{"key":"pdmef@gmx.net","avatar":null},"body":"Since lots of logic is implemented via shell scripts, it's in\ngeneral useful to print out where an error occured. Previously\nonly some commands manually added the binary name to die() and\nerror() calls.\n\nNow, git_set_appname() can be used to set the name of the binary\nas first call in a binary's main() routine which will be used\nas prefix in die() and error(). If it was not called, no prefix\nwill be printed.\n\nAlso fix minor identation issues.\n\nSigned-off-by: Rocco Rutte <pdmef@gmx.net>\n\n---\n\n  apply.c              |   13 +++++++------\n  blame.c              |    2 ++\n  cat-file.c           |   10 ++++++----\n  check-ref-format.c   |    2 ++\n  checkout-index.c     |    8 +++++---\n  clone-pack.c         |    2 ++\n  commit-tree.c        |    2 ++\n  connect.c            |    4 ++--\n  convert-objects.c    |    2 ++\n  daemon.c             |    4 +++-\n  describe.c           |    2 ++\n  diff-files.c         |    5 ++++-\n  diff-index.c         |    5 ++++-\n  diff-stages.c        |    5 ++++-\n  diff-tree.c          |    2 ++\n  entry.c              |   14 +++++++-------\n  fetch-clone.c        |    8 +++-----\n  fetch-pack.c         |    4 +++-\n  fsck-objects.c       |    2 ++\n  get-tar-commit-id.c  |    2 ++\n  git-compat-util.h    |    1 +\n  git.c                |    2 ++\n  hash-object.c        |    2 ++\n  http-fetch.c         |    2 ++\n  http-push.c          |    5 +++--\n  index-pack.c         |   17 +++++++----------\n  init-db.c            |    2 ++\n  local-fetch.c        |    2 ++\n  ls-files.c           |    8 +++++---\n  ls-tree.c            |    2 ++\n  mailinfo.c           |    2 ++\n  mailsplit.c          |    2 ++\n  merge-base.c         |    2 ++\n  merge-index.c        |    8 +++++---\n  merge-tree.c         |    2 ++\n  mktag.c              |    2 ++\n  mktree.c             |    2 ++\n  name-rev.c           |    2 ++\n  pack-objects.c       |    5 +++--\n  pack-redundant.c     |    2 ++\n  patch-id.c           |    2 ++\n  peek-remote.c        |    2 ++\n  prune-packed.c       |    2 ++\n  read-tree.c          |    5 +++--\n  receive-pack.c       |    5 +++--\n  repo-config.c        |    2 ++\n  rev-list.c           |    2 ++\n  rev-parse.c          |    5 ++++-\n  send-pack.c          |    2 ++\n  shell.c              |    2 ++\n  show-branch.c        |    2 ++\n  show-index.c         |    2 ++\n  ssh-fetch.c          |    2 ++\n  ssh-upload.c         |    2 ++\n  stripspace.c         |    2 ++\n  symbolic-ref.c       |    2 ++\n  tar-tree.c           |    6 ++++--\n  test-date.c          |    2 ++\n  test-delta.c         |    2 ++\n  tree-diff.c          |    2 +-\n  unpack-file.c        |    2 ++\n  unpack-objects.c     |    2 ++\n  update-index.c       |   26 ++++++++++++++------------\n  update-ref.c         |    2 ++\n  update-server-info.c |    3 +++\n  upload-pack.c        |   21 +++++++++++----------\n  usage.c              |   14 ++++++++++++++\n  var.c                |    3 +++\n  verify-pack.c        |    2 ++\n  write-tree.c         |   10 ++++++----\n  70 files changed, 222 insertions(+), 86 deletions(-)\n\ncb3d0f89bcead397d38e3445c1925d1107bcf062\ndiff --git a/apply.c b/apply.c\nindex 269210a..90c4c7c 100644\n--- a/apply.c\n+++ b/apply.c\n@@ -142,7 +142,7 @@ static void *read_patch_file(int fd, uns\n  \t\tif (!nr)\n  \t\t\tbreak;\n  \t\tif (nr < 0)\n-\t\t\tdie(\"git-apply: read returned %s\", strerror(errno));\n+\t\t\tdie(\"read returned %s\", strerror(errno));\n  \t\tsize += nr;\n  \t}\n  \t*sizep = size;\n@@ -320,17 +320,17 @@ static char *gitdiff_verify_name(const c\n  \t\tname = orig_name;\n  \t\tlen = strlen(name);\n  \t\tif (isnull)\n-\t\t\tdie(\"git-apply: bad git-diff - expected /dev/null, got %s on line %d\", name, linenr);\n+\t\t\tdie(\"bad git-diff - expected /dev/null, got %s on line %d\", name, linenr);\n  \t\tanother = find_name(line, NULL, 1, 0);\n  \t\tif (!another || memcmp(another, name, len))\n-\t\t\tdie(\"git-apply: bad git-diff - inconsistent %s filename on line %d\", oldnew, linenr);\n+\t\t\tdie(\"bad git-diff - inconsistent %s filename on line %d\", oldnew, linenr);\n  \t\tfree(another);\n  \t\treturn orig_name;\n  \t}\n  \telse {\n  \t\t/* expect \"/dev/null\" */\n  \t\tif (memcmp(\"/dev/null\", line, 9) || line[9] != '\\n')\n-\t\t\tdie(\"git-apply: bad git-diff - expected /dev/null on line %d\", linenr);\n+\t\t\tdie(\"bad git-diff - expected /dev/null on line %d\", linenr);\n  \t\treturn NULL;\n  \t}\n  }\n@@ -1570,8 +1570,7 @@ static void show_index_list(struct patch\n  \t\tif (patch->is_new)\n  \t\t\tsha1_ptr = null_sha1;\n  \t\telse if (get_sha1(patch->old_sha1_prefix, sha1))\n-\t\t\tdie(\"sha1 information is lacking or useless (%s).\",\n-\t\t\t    name);\n+\t\t\tdie(\"sha1 information is lacking or useless (%s).\", name);\n  \t\telse\n  \t\t\tsha1_ptr = sha1;\n  \n@@ -1960,6 +1959,8 @@ int main(int argc, char **argv)\n  \tint read_stdin = 1;\n  \tconst char *whitespace_option = NULL;\n  \n+\tgit_set_appname(\"git-apply\");\n+\n  \tfor (i = 1; i < argc; i++) {\n  \t\tconst char *arg = argv[i];\n  \t\tchar *end;\ndiff --git a/blame.c b/blame.c\nindex 07d2d27..804f108 100644\n--- a/blame.c\n+++ b/blame.c\n@@ -752,6 +752,8 @@ int main(int argc, const char **argv)\n  \tint longest_file, longest_author;\n  \tint found_rename;\n  \n+\tgit_set_appname(\"git-blame\");\n+\n  \tconst char* prefix = setup_git_directory();\n  \tgit_config(git_default_config);\n  \ndiff --git a/cat-file.c b/cat-file.c\nindex 628f6ca..75c400a 100644\n--- a/cat-file.c\n+++ b/cat-file.c\n@@ -16,9 +16,9 @@ static void flush_buffer(const char *buf\n  \t\t\t/* Ignore epipe */\n  \t\t\tif (errno == EPIPE)\n  \t\t\t\tbreak;\n-\t\t\tdie(\"git-cat-file: %s\", strerror(errno));\n+\t\t\tdie(\"%s\", strerror(errno));\n  \t\t} else if (!ret) {\n-\t\t\tdie(\"git-cat-file: disk full?\");\n+\t\t\tdie(\"disk full?\");\n  \t\t}\n  \t\tsize -= ret;\n  \t\tbuf += ret;\n@@ -101,6 +101,8 @@ int main(int argc, char **argv)\n  \tunsigned long size;\n  \tint opt;\n  \n+\tgit_set_appname(\"git-cat-file\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \tif (argc != 3 || get_sha1(argv[2], sha1))\n@@ -154,11 +156,11 @@ int main(int argc, char **argv)\n  \t\tbreak;\n  \n  \tdefault:\n-\t\tdie(\"git-cat-file: unknown option: %s\\n\", argv[1]);\n+\t\tdie(\"unknown option: %s\\n\", argv[1]);\n  \t}\n  \n  \tif (!buf)\n-\t\tdie(\"git-cat-file %s: bad file\", argv[2]);\n+\t\tdie(\"bad file\", argv[2]);\n  \n  \tflush_buffer(buf, size);\n  \treturn 0;\ndiff --git a/check-ref-format.c b/check-ref-format.c\nindex a0adb3d..ce08eda 100644\n--- a/check-ref-format.c\n+++ b/check-ref-format.c\n@@ -9,6 +9,8 @@ #include <stdio.h>\n  \n  int main(int ac, char **av)\n  {\n+\tgit_set_appname(\"git-check-ref-format\");\n+\n  \tif (ac != 2)\n  \t\tusage(\"git-check-ref-format refname\");\n  \tif (check_ref_format(av[1]))\ndiff --git a/checkout-index.c b/checkout-index.c\nindex dd6a2d8..b515651 100644\n--- a/checkout-index.c\n+++ b/checkout-index.c\n@@ -176,6 +176,8 @@ int main(int argc, char **argv)\n  \tint all = 0;\n  \tint read_from_stdin = 0;\n  \n+\tgit_set_appname(\"git-checkout-index\");\n+\n  \tprefix = setup_git_directory();\n  \tgit_config(git_default_config);\n  \tprefix_length = prefix ? strlen(prefix) : 0;\n@@ -271,16 +273,16 @@ int main(int argc, char **argv)\n  \t\tconst char *arg = argv[i];\n  \n  \t\tif (all)\n-\t\t\tdie(\"git-checkout-index: don't mix '--all' and explicit filenames\");\n+\t\t\tdie(\"don't mix '--all' and explicit filenames\");\n  \t\tif (read_from_stdin)\n-\t\t\tdie(\"git-checkout-index: don't mix '--stdin' and explicit filenames\");\n+\t\t\tdie(\"don't mix '--stdin' and explicit filenames\");\n  \t\tcheckout_file(prefix_path(prefix, prefix_length, arg));\n  \t}\n  \n  \tif (read_from_stdin) {\n  \t\tstruct strbuf buf;\n  \t\tif (all)\n-\t\t\tdie(\"git-checkout-index: don't mix '--all' and '--stdin'\");\n+\t\t\tdie(\"don't mix '--all' and '--stdin'\");\n  \t\tstrbuf_init(&buf);\n  \t\twhile (1) {\n  \t\t\tchar *path_name;\ndiff --git a/clone-pack.c b/clone-pack.c\nindex a4370f5..0139745 100644\n--- a/clone-pack.c\n+++ b/clone-pack.c\n@@ -150,6 +150,8 @@ int main(int argc, char **argv)\n  \tint fd[2];\n  \tpid_t pid;\n  \n+\tgit_set_appname(\"git-clone-pack\");\n+\n  \tsetup_git_directory();\n  \n  \tnr_heads = 0;\ndiff --git a/commit-tree.c b/commit-tree.c\nindex 2d86518..e07b0eb 100644\n--- a/commit-tree.c\n+++ b/commit-tree.c\n@@ -87,6 +87,8 @@ int main(int argc, char **argv)\n  \tchar *buffer;\n  \tunsigned int size;\n  \n+\tgit_set_appname(\"git-commit-tree\");\n+\n  \tsetup_ident();\n  \tsetup_git_directory();\n  \ndiff --git a/connect.c b/connect.c\nindex 6a8f8a6..70ab5ad 100644\n--- a/connect.c\n+++ b/connect.c\n@@ -69,7 +69,7 @@ int get_ack(int fd, unsigned char *resul\n  \tint len = packet_read_line(fd, line, sizeof(line));\n  \n  \tif (!len)\n-\t\tdie(\"git-fetch-pack: expected ACK/NAK, got EOF\");\n+\t\tdie(\"expected ACK/NAK, got EOF\");\n  \tif (line[len-1] == '\\n')\n  \t\tline[--len] = 0;\n  \tif (!strcmp(line, \"NAK\"))\n@@ -81,7 +81,7 @@ int get_ack(int fd, unsigned char *resul\n  \t\t\treturn 1;\n  \t\t}\n  \t}\n-\tdie(\"git-fetch_pack: expected ACK/NAK, got '%s'\", line);\n+\tdie(\"expected ACK/NAK, got '%s'\", line);\n  }\n  \n  int path_match(const char *path, int nr, char **match)\ndiff --git a/convert-objects.c b/convert-objects.c\nindex 12aacef..6b5d955 100644\n--- a/convert-objects.c\n+++ b/convert-objects.c\n@@ -319,6 +319,8 @@ int main(int argc, char **argv)\n  \tunsigned char sha1[20];\n  \tstruct entry *entry;\n  \n+\tgit_set_appname(\"git-convert-object\");\n+\n  \tsetup_git_directory();\n  \n  \tif (argc != 2 || get_sha1(argv[1], sha1))\ndiff --git a/daemon.c b/daemon.c\nindex 776749e..0bb84e8 100644\n--- a/daemon.c\n+++ b/daemon.c\n@@ -666,6 +666,8 @@ int main(int argc, char **argv)\n  \tint inetd_mode = 0;\n  \tint i;\n  \n+\tgit_set_appname(\"git-daemon\");\n+\n  \tfor (i = 1; i < argc; i++) {\n  \t\tchar *arg = argv[i];\n  \n@@ -739,7 +741,7 @@ int main(int argc, char **argv)\n  \n  \tif (strict_paths && (!ok_paths || !*ok_paths)) {\n  \t\tif (!inetd_mode)\n-\t\t\tdie(\"git-daemon: option --strict-paths requires a whitelist\");\n+\t\t\tdie(\"option --strict-paths requires a whitelist\");\n  \n  \t\tlogerror(\"option --strict-paths requires a whitelist\");\n  \t\texit (1);\ndiff --git a/describe.c b/describe.c\nindex ff65742..a882d00 100644\n--- a/describe.c\n+++ b/describe.c\n@@ -143,6 +143,8 @@ int main(int argc, char **argv)\n  {\n  \tint i;\n  \n+\tgit_set_appname(\"git-describe\");\n+\n  \tfor (i = 1; i < argc; i++) {\n  \t\tconst char *arg = argv[i];\n  \ndiff --git a/diff-files.c b/diff-files.c\nindex ffbef48..0c99c00 100644\n--- a/diff-files.c\n+++ b/diff-files.c\n@@ -39,9 +39,12 @@ static void show_modified(int oldmode, i\n  int main(int argc, const char **argv)\n  {\n  \tconst char **pathspec;\n-\tconst char *prefix = setup_git_directory();\n+\tconst char *prefix;\n  \tint entries, i;\n  \n+\tgit_set_appname(\"git-diff-files\");\n+\n+\tprefix = setup_git_directory();\n  \tgit_config(git_diff_config);\n  \tdiff_setup(&rev.diffopt);\n  \twhile (1 < argc && argv[1][0] == '-') {\ndiff --git a/diff-index.c b/diff-index.c\nindex e376d65..b066d48 100644\n--- a/diff-index.c\n+++ b/diff-index.c\n@@ -171,13 +171,16 @@ int main(int argc, const char **argv)\n  {\n  \tconst char *tree_name = NULL;\n  \tunsigned char sha1[20];\n-\tconst char *prefix = setup_git_directory();\n+\tconst char *prefix;\n  \tconst char **pathspec = NULL;\n  \tstruct tree *tree;\n  \tint ret;\n  \tint allow_options = 1;\n  \tint i;\n  \n+\tgit_set_appname(\"git-diff-index\");\n+\n+\tprefix = setup_git_directory();\n  \tgit_config(git_diff_config);\n  \tdiff_setup(&diff_options);\n  \tfor (i = 1; i < argc; i++) {\ndiff --git a/diff-stages.c b/diff-stages.c\nindex dcd20e7..bd40b8e 100644\n--- a/diff-stages.c\n+++ b/diff-stages.c\n@@ -57,9 +57,12 @@ static void diff_stages(int stage1, int \n  int main(int ac, const char **av)\n  {\n  \tint stage1, stage2;\n-\tconst char *prefix = setup_git_directory();\n+\tconst char *prefix;\n  \tconst char **pathspec = NULL;\n  \n+\tgit_set_appname(\"git-diff-stages\");\n+\n+\tprefix = setup_git_directory();\n  \tgit_config(git_diff_config);\n  \tread_cache();\n  \tdiff_setup(&diff_options);\ndiff --git a/diff-tree.c b/diff-tree.c\nindex 7207867..76222d5 100644\n--- a/diff-tree.c\n+++ b/diff-tree.c\n@@ -67,6 +67,8 @@ int main(int argc, const char **argv)\n  \tstruct object_list *list;\n  \tint read_stdin = 0;\n  \n+\tgit_set_appname(\"git-diff-tree\");\n+\n  \tgit_config(git_diff_config);\n  \tnr_sha1 = 0;\n  \tinit_revisions(opt);\ndiff --git a/entry.c b/entry.c\nindex 793724f..5cf36f9 100644\n--- a/entry.c\n+++ b/entry.c\n@@ -76,7 +76,7 @@ static int write_entry(struct cache_entr\n  \tif (!new || strcmp(type, blob_type)) {\n  \t\tif (new)\n  \t\t\tfree(new);\n-\t\treturn error(\"git-checkout-index: unable to read sha1 file of %s (%s)\",\n+\t\treturn error(\"unable to read sha1 file of %s (%s)\",\n  \t\t\tpath, sha1_to_hex(ce->sha1));\n  \t}\n  \tswitch (ntohl(ce->ce_mode) & S_IFMT) {\n@@ -88,14 +88,14 @@ static int write_entry(struct cache_entr\n  \t\t\tfd = create_file(path, ntohl(ce->ce_mode));\n  \t\tif (fd < 0) {\n  \t\t\tfree(new);\n-\t\t\treturn error(\"git-checkout-index: unable to create file %s (%s)\",\n+\t\t\treturn error(\"unable to create file %s (%s)\",\n  \t\t\t\tpath, strerror(errno));\n  \t\t}\n  \t\twrote = write(fd, new, size);\n  \t\tclose(fd);\n  \t\tfree(new);\n  \t\tif (wrote != size)\n-\t\t\treturn error(\"git-checkout-index: unable to write file %s\", path);\n+\t\t\treturn error(\"unable to write file %s\", path);\n  \t\tbreak;\n  \tcase S_IFLNK:\n  \t\tif (to_tempfile) {\n@@ -103,26 +103,26 @@ static int write_entry(struct cache_entr\n  \t\t\tfd = mkstemp(path);\n  \t\t\tif (fd < 0) {\n  \t\t\t\tfree(new);\n-\t\t\t\treturn error(\"git-checkout-index: unable to create \"\n+\t\t\t\treturn error(\"unable to create \"\n  \t\t\t\t\t\t \"file %s (%s)\", path, strerror(errno));\n  \t\t\t}\n  \t\t\twrote = write(fd, new, size);\n  \t\t\tclose(fd);\n  \t\t\tfree(new);\n  \t\t\tif (wrote != size)\n-\t\t\t\treturn error(\"git-checkout-index: unable to write file %s\",\n+\t\t\t\treturn error(\"unable to write file %s\",\n  \t\t\t\t\tpath);\n  \t\t} else {\n  \t\t\twrote = symlink(new, path);\n  \t\t\tfree(new);\n  \t\t\tif (wrote)\n-\t\t\t\treturn error(\"git-checkout-index: unable to create \"\n+\t\t\t\treturn error(\"unable to create \"\n  \t\t\t\t\t\t \"symlink %s (%s)\", path, strerror(errno));\n  \t\t}\n  \t\tbreak;\n  \tdefault:\n  \t\tfree(new);\n-\t\treturn error(\"git-checkout-index: unknown file mode for %s\", path);\n+\t\treturn error(\"unknown file mode for %s\", path);\n  \t}\n  \n  \tif (state->refresh_cache) {\ndiff --git a/fetch-clone.c b/fetch-clone.c\nindex da1b3ff..d94c252 100644\n--- a/fetch-clone.c\n+++ b/fetch-clone.c\n@@ -23,7 +23,7 @@ static int finish_pack(const char *pack_\n  \n  \tpid = fork();\n  \tif (pid < 0)\n-\t\tdie(\"git-clone-pack: unable to fork off git-index-pack\");\n+\t\tdie(\"unable to fork off git-index-pack\");\n  \tif (!pid) {\n  \t\tclose(0);\n  \t\tdup2(pipe_fd[1], 1);\n@@ -113,14 +113,12 @@ int receive_unpack_pack(int fd[2], const\n  \tclose(fd[1]);\n  \twhile (waitpid(pid, &status, 0) < 0) {\n  \t\tif (errno != EINTR)\n-\t\t\tdie(\"waiting for git-unpack-objects: %s\",\n-\t\t\t    strerror(errno));\n+\t\t\tdie(\"waiting for git-unpack-objects: %s\", strerror(errno));\n  \t}\n  \tif (WIFEXITED(status)) {\n  \t\tint code = WEXITSTATUS(status);\n  \t\tif (code)\n-\t\t\tdie(\"git-unpack-objects died with error code %d\",\n-\t\t\t    code);\n+\t\t\tdie(\"git-unpack-objects died with error code %d\", code);\n  \t\treturn 0;\n  \t}\n  \tif (WIFSIGNALED(status)) {\ndiff --git a/fetch-pack.c b/fetch-pack.c\nindex a3bcad0..f7053e7 100644\n--- a/fetch-pack.c\n+++ b/fetch-pack.c\n@@ -390,7 +390,7 @@ static int fetch_pack(int fd[2], int nr_\n  \t\tstatus = receive_unpack_pack(fd, \"git-fetch-pack\", quiet);\n  \n  \tif (status)\n-\t\tdie(\"git-fetch-pack: fetch failed.\");\n+\t\tdie(\"fetch failed.\");\n  \n   all_done:\n  \twhile (ref) {\n@@ -408,6 +408,8 @@ int main(int argc, char **argv)\n  \tint fd[2];\n  \tpid_t pid;\n  \n+\tgit_set_appname(\"git-fetch-pack\");\n+\n  \tsetup_git_directory();\n  \n  \tnr_heads = 0;\ndiff --git a/fsck-objects.c b/fsck-objects.c\nindex 59b2590..5e004b6 100644\n--- a/fsck-objects.c\n+++ b/fsck-objects.c\n@@ -442,6 +442,8 @@ int main(int argc, char **argv)\n  {\n  \tint i, heads;\n  \n+\tgit_set_appname(\"git-fsck-objects\");\n+\n  \tsetup_git_directory();\n  \n  \tfor (i = 1; i < argc; i++) {\ndiff --git a/get-tar-commit-id.c b/get-tar-commit-id.c\nindex 4166290..036094d 100644\n--- a/get-tar-commit-id.c\n+++ b/get-tar-commit-id.c\n@@ -12,6 +12,8 @@ int main(int argc, char **argv)\n  \tchar buffer[HEADERSIZE];\n  \tssize_t n;\n  \n+\tgit_set_appname(\"git-get-tar-commit-id\");\n+\n  \tn = read(0, buffer, HEADERSIZE);\n  \tif (n < HEADERSIZE) {\n  \t\tfprintf(stderr, \"read error\\n\");\ndiff --git a/git-compat-util.h b/git-compat-util.h\nindex 5d543d2..cc5370c 100644\n--- a/git-compat-util.h\n+++ b/git-compat-util.h\n@@ -39,6 +39,7 @@ #endif\n  extern void usage(const char *err) NORETURN;\n  extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));\n  extern int error(const char *err, ...) __attribute__((format (printf, 1, 2)));\n+extern void git_set_appname(const char *name);\n  \n  #ifdef NO_MMAP\n  \ndiff --git a/git.c b/git.c\nindex aa2b814..ad49bb7 100644\n--- a/git.c\n+++ b/git.c\n@@ -71,6 +71,8 @@ int main(int argc, const char **argv, ch\n  \tchar git_command[PATH_MAX + 1];\n  \tconst char *exec_path = NULL;\n  \n+\tgit_set_appname(\"git\");\n+\n  \t/*\n  \t * Take the basename of argv[0] as the command\n  \t * name, and the dirname as the default exec_path\ndiff --git a/hash-object.c b/hash-object.c\nindex 43bd93b..0c95d05 100644\n--- a/hash-object.c\n+++ b/hash-object.c\n@@ -42,6 +42,8 @@ int main(int argc, char **argv)\n  \tint prefix_length = -1;\n  \tint no_more_flags = 0;\n  \n+\tgit_set_appname(\"git-hash-object\");\n+\n  \tfor (i = 1 ; i < argc; i++) {\n  \t\tif (!no_more_flags && argv[i][0] == '-') {\n  \t\t\tif (!strcmp(argv[i], \"-t\")) {\ndiff --git a/http-fetch.c b/http-fetch.c\nindex 861644b..69c7cdb 100644\n--- a/http-fetch.c\n+++ b/http-fetch.c\n@@ -1222,6 +1222,8 @@ int main(int argc, char **argv)\n  \tint arg = 1;\n  \tint rc = 0;\n  \n+\tgit_set_appname(\"git-http-fetch\");\n+\n  \tsetup_git_directory();\n  \n  \twhile (arg < argc && argv[arg][0] == '-') {\ndiff --git a/http-push.c b/http-push.c\nindex b4327d9..0ff5b05 100644\n--- a/http-push.c\n+++ b/http-push.c\n@@ -2130,8 +2130,7 @@ static void fetch_symref(char *path, cha\n  \tif (start_active_slot(slot)) {\n  \t\trun_active_slot(slot);\n  \t\tif (results.curl_result != CURLE_OK) {\n-\t\t\tdie(\"Couldn't get %s for remote symref\\n%s\",\n-\t\t\t    url, curl_errorstr);\n+\t\t\tdie(\"Couldn't get %s for remote symref\\n%s\", url, curl_errorstr);\n  \t\t}\n  \t} else {\n  \t\tdie(\"Unable to start remote symref request\");\n@@ -2315,6 +2314,8 @@ int main(int argc, char **argv)\n  \tint new_refs;\n  \tstruct ref *ref;\n  \n+\tgit_set_appname(\"git-http-push\");\n+\n  \tsetup_git_directory();\n  \tsetup_ident();\n  \ndiff --git a/index-pack.c b/index-pack.c\nindex b39953d..bcfd116 100644\n--- a/index-pack.c\n+++ b/index-pack.c\n@@ -39,21 +39,18 @@ static void open_pack_file(void)\n  \n  \tfd = open(pack_name, O_RDONLY);\n  \tif (fd < 0)\n-\t\tdie(\"cannot open packfile '%s': %s\", pack_name,\n-\t\t    strerror(errno));\n+\t\tdie(\"cannot open packfile '%s': %s\", pack_name, strerror(errno));\n  \tif (fstat(fd, &st)) {\n  \t\tint err = errno;\n  \t\tclose(fd);\n-\t\tdie(\"cannot fstat packfile '%s': %s\", pack_name,\n-\t\t    strerror(err));\n+\t\tdie(\"cannot fstat packfile '%s': %s\", pack_name, strerror(err));\n  \t}\n  \tpack_size = st.st_size;\n  \tpack_base = mmap(NULL, pack_size, PROT_READ, MAP_PRIVATE, fd, 0);\n  \tif (pack_base == MAP_FAILED) {\n  \t\tint err = errno;\n  \t\tclose(fd);\n-\t\tdie(\"cannot mmap packfile '%s': %s\", pack_name,\n-\t\t    strerror(err));\n+\t\tdie(\"cannot mmap packfile '%s': %s\", pack_name, strerror(err));\n  \t}\n  \tclose(fd);\n  }\n@@ -97,8 +94,7 @@ static void bad_object(unsigned long off\n  \tva_start(params, format);\n  \tvsnprintf(buf, sizeof(buf), format, params);\n  \tva_end(params);\n-\tdie(\"packfile '%s': bad object at offset %lu: %s\",\n-\t    pack_name, offset, buf);\n+\tdie(\"packfile '%s': bad object at offset %lu: %s\", pack_name, offset, buf);\n  }\n  \n  static void *unpack_entry_data(unsigned long offset,\n@@ -425,6 +421,8 @@ int main(int argc, char **argv)\n  \tchar *index_name_buf = NULL;\n  \tunsigned char sha1[20];\n  \n+\tgit_set_appname(\"git-index-pack\");\n+\n  \tfor (i = 1; i < argc; i++) {\n  \t\tconst char *arg = argv[i];\n  \n@@ -448,8 +446,7 @@ int main(int argc, char **argv)\n  \tif (!index_name) {\n  \t\tint len = strlen(pack_name);\n  \t\tif (len < 5 || strcmp(pack_name + len - 5, \".pack\"))\n-\t\t\tdie(\"packfile name '%s' does not end with '.pack'\",\n-\t\t\t    pack_name);\n+\t\t\tdie(\"packfile name '%s' does not end with '.pack'\", pack_name);\n  \t\tindex_name_buf = xmalloc(len);\n  \t\tmemcpy(index_name_buf, pack_name, len - 5);\n  \t\tstrcpy(index_name_buf + len - 5, \".idx\");\ndiff --git a/init-db.c b/init-db.c\nindex ff29496..29c93e3 100644\n--- a/init-db.c\n+++ b/init-db.c\n@@ -241,6 +241,8 @@ int main(int argc, char **argv)\n  \tchar *path, *template_dir = NULL;\n  \tint len, i;\n  \n+\tgit_set_appname(\"git-init-db\");\n+\n  \tfor (i = 1; i < argc; i++, argv++) {\n  \t\tchar *arg = argv[1];\n  \t\tif (!strncmp(arg, \"--template=\", 11))\ndiff --git a/local-fetch.c b/local-fetch.c\nindex fa9e697..11bf6f8 100644\n--- a/local-fetch.c\n+++ b/local-fetch.c\n@@ -207,6 +207,8 @@ int main(int argc, char **argv)\n  \tchar *commit_id;\n  \tint arg = 1;\n  \n+\tgit_set_appname(\"git-local-fetch\");\n+\n  \tsetup_git_directory();\n  \n  \twhile (arg < argc && argv[arg][0] == '-') {\ndiff --git a/ls-files.c b/ls-files.c\nindex 4a4af1c..15a9bb2 100644\n--- a/ls-files.c\n+++ b/ls-files.c\n@@ -383,7 +383,7 @@ static void show_dir_entry(const char *t\n  \tint offset = prefix_offset;\n  \n  \tif (len >= ent->len)\n-\t\tdie(\"git-ls-files: internal error - directory entry not superset of prefix\");\n+\t\tdie(\"internal error - directory entry not superset of prefix\");\n  \n  \tif (pathspec && !match(pathspec, ps_matched, ent->name, len))\n  \t\treturn;\n@@ -471,7 +471,7 @@ static void show_ce_entry(const char *ta\n  \tint offset = prefix_offset;\n  \n  \tif (len >= ce_namelen(ce))\n-\t\tdie(\"git-ls-files: internal error - cache entry not superset of prefix\");\n+\t\tdie(\"internal error - cache entry not superset of prefix\");\n  \n  \tif (pathspec && !match(pathspec, ps_matched, ce->name, len))\n  \t\treturn;\n@@ -630,7 +630,7 @@ static void verify_pathspec(void)\n  \t}\n  \n  \tif (prefix_offset > max || memcmp(prev, prefix, prefix_offset))\n-\t\tdie(\"git-ls-files: cannot generate relative filenames containing '..'\");\n+\t\tdie(\"cannot generate relative filenames containing '..'\");\n  \n  \treal_prefix = NULL;\n  \tprefix_len = max;\n@@ -653,6 +653,8 @@ int main(int argc, const char **argv)\n  \tint i;\n  \tint exc_given = 0;\n  \n+\tgit_set_appname(\"git-ls-files\");\n+\n  \tprefix = setup_git_directory();\n  \tif (prefix)\n  \t\tprefix_offset = strlen(prefix);\ndiff --git a/ls-tree.c b/ls-tree.c\nindex e4ef200..e037bf0 100644\n--- a/ls-tree.c\n+++ b/ls-tree.c\n@@ -89,6 +89,8 @@ int main(int argc, const char **argv)\n  \tunsigned char sha1[20];\n  \tstruct tree *tree;\n  \n+\tgit_set_appname(\"git-ls-tree\");\n+\n  \tprefix = setup_git_directory();\n  \tgit_config(git_default_config);\n  \tif (prefix && *prefix)\ndiff --git a/mailinfo.c b/mailinfo.c\nindex b276519..7baa3ff 100644\n--- a/mailinfo.c\n+++ b/mailinfo.c\n@@ -757,6 +757,8 @@ static const char mailinfo_usage[] =\n  \n  int main(int argc, char **argv)\n  {\n+\tgit_set_appname(\"git-mailinfo\");\n+\n  \t/* NEEDSWORK: might want to do the optional .git/ directory\n  \t * discovery\n  \t */\ndiff --git a/mailsplit.c b/mailsplit.c\nindex c529e2d..686920e 100644\n--- a/mailsplit.c\n+++ b/mailsplit.c\n@@ -111,6 +111,8 @@ int main(int argc, const char **argv)\n  \tstatic const char *stdin_only[] = { \"-\", NULL };\n  \tchar *name;\n  \n+\tgit_set_appname(\"git-mailsplit\");\n+\n  \tfor (argp = argv+1; *argp; argp++) {\n  \t\tconst char *arg = *argp;\n  \ndiff --git a/merge-base.c b/merge-base.c\nindex 07f5ab4..29cdbd7 100644\n--- a/merge-base.c\n+++ b/merge-base.c\n@@ -236,6 +236,8 @@ int main(int argc, char **argv)\n  \tstruct commit *rev1, *rev2;\n  \tunsigned char rev1key[20], rev2key[20];\n  \n+\tgit_set_appname(\"git-merge-base\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \ndiff --git a/merge-index.c b/merge-index.c\nindex 024196e..3430da5 100644\n--- a/merge-index.c\n+++ b/merge-index.c\n@@ -42,7 +42,7 @@ static int merge_entry(int pos, const ch\n  \tint found;\n  \t\n  \tif (pos >= active_nr)\n-\t\tdie(\"git-merge-index: %s not in the cache\", path);\n+\t\tdie(\"%s not in the cache\", path);\n  \targuments[0] = pgm;\n  \targuments[1] = \"\";\n  \targuments[2] = \"\";\n@@ -67,7 +67,7 @@ static int merge_entry(int pos, const ch\n  \t\targuments[stage + 4] = ownbuf[stage];\n  \t} while (++pos < active_nr);\n  \tif (!found)\n-\t\tdie(\"git-merge-index: %s not in the cache\", path);\n+\t\tdie(\"%s not in the cache\", path);\n  \trun_program();\n  \treturn found;\n  }\n@@ -99,6 +99,8 @@ int main(int argc, char **argv)\n  {\n  \tint i, force_file = 0;\n  \n+\tgit_set_appname(\"git-merge-index\");\n+\n  \tif (argc < 3)\n  \t\tusage(\"git-merge-index [-o] [-q] <merge-program> (-a | <filename>*)\");\n  \n@@ -126,7 +128,7 @@ int main(int argc, char **argv)\n  \t\t\t\tmerge_all();\n  \t\t\t\tcontinue;\n  \t\t\t}\n-\t\t\tdie(\"git-merge-index: unknown option %s\", arg);\n+\t\t\tdie(\"unknown option %s\", arg);\n  \t\t}\n  \t\tmerge_file(arg);\n  \t}\ndiff --git a/merge-tree.c b/merge-tree.c\nindex 50528d5..1eca1d7 100644\n--- a/merge-tree.c\n+++ b/merge-tree.c\n@@ -164,6 +164,8 @@ int main(int argc, char **argv)\n  \tstruct tree_desc t[3];\n  \tvoid *buf1, *buf2, *buf3;\n  \n+\tgit_set_appname(\"git-merge-tree\");\n+\n  \tif (argc < 4)\n  \t\tusage(merge_tree_usage);\n  \ndiff --git a/mktag.c b/mktag.c\nindex 2328878..dcc917e 100644\n--- a/mktag.c\n+++ b/mktag.c\n@@ -109,6 +109,8 @@ int main(int argc, char **argv)\n  \tchar buffer[MAXSIZE];\n  \tunsigned char result_sha1[20];\n  \n+\tgit_set_appname(\"git-mktag\");\n+\n  \tif (argc != 1)\n  \t\tusage(\"cat <signaturefile> | git-mktag\");\n  \ndiff --git a/mktree.c b/mktree.c\nindex ab63cd9..a1ac929 100644\n--- a/mktree.c\n+++ b/mktree.c\n@@ -79,6 +79,8 @@ int main(int ac, char **av)\n  \tunsigned char sha1[20];\n  \tint line_termination = '\\n';\n  \n+\tgit_set_appname(\"git-mktree\");\n+\n  \tsetup_git_directory();\n  \n  \twhile ((1 < ac) && av[1][0] == '-') {\ndiff --git a/name-rev.c b/name-rev.c\nindex bad8a53..c426059 100644\n--- a/name-rev.c\n+++ b/name-rev.c\n@@ -126,6 +126,8 @@ int main(int argc, char **argv)\n  \tstruct object_list **walker = &revs;\n  \tint as_is = 0, all = 0, transform_stdin = 0;\n  \n+\tgit_set_appname(\"git-name-rev\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \ndiff --git a/pack-objects.c b/pack-objects.c\nindex c0acc46..ecbe9f9 100644\n--- a/pack-objects.c\n+++ b/pack-objects.c\n@@ -1237,6 +1237,8 @@ int main(int argc, char **argv)\n  \tint num_preferred_base = 0;\n  \tint i;\n  \n+\tgit_set_appname(\"git-pack-objects\");\n+\n  \tsetup_git_directory();\n  \n  \tfor (i = 1; i < argc; i++) {\n@@ -1315,8 +1317,7 @@ int main(int argc, char **argv)\n  \n  \t\tif (line[0] == '-') {\n  \t\t\tif (get_sha1_hex(line+1, sha1))\n-\t\t\t\tdie(\"expected edge sha1, got garbage:\\n %s\",\n-\t\t\t\t    line+1);\n+\t\t\t\tdie(\"expected edge sha1, got garbage:\\n %s\", line+1);\n  \t\t\tif (num_preferred_base++ < window)\n  \t\t\t\tadd_preferred_base(sha1);\n  \t\t\tcontinue;\ndiff --git a/pack-redundant.c b/pack-redundant.c\nindex cd81f5a..e2eff1b 100644\n--- a/pack-redundant.c\n+++ b/pack-redundant.c\n@@ -589,6 +589,8 @@ int main(int argc, char **argv)\n  \tunsigned char *sha1;\n  \tchar buf[42]; /* 40 byte sha1 + \\n + \\0 */\n  \n+\tgit_set_appname(\"git-pack-redundant\");\n+\n  \tsetup_git_directory();\n  \n  \tfor (i = 1; i < argc; i++) {\ndiff --git a/patch-id.c b/patch-id.c\nindex edbc4aa..0e2bd85 100644\n--- a/patch-id.c\n+++ b/patch-id.c\n@@ -74,6 +74,8 @@ static const char patch_id_usage[] = \"gi\n  \n  int main(int argc, char **argv)\n  {\n+\tgit_set_appname(\"git-patch-id\");\n+\n  \tif (argc != 1)\n  \t\tusage(patch_id_usage);\n  \ndiff --git a/peek-remote.c b/peek-remote.c\nindex a90cf22..99dac1b 100644\n--- a/peek-remote.c\n+++ b/peek-remote.c\n@@ -29,6 +29,8 @@ int main(int argc, char **argv)\n  \tpid_t pid;\n  \tint nongit = 0;\n  \n+\tgit_set_appname(\"git-pack-remote\");\n+\n  \tsetup_git_directory_gently(&nongit);\n  \n  \tfor (i = 1; i < argc; i++) {\ndiff --git a/prune-packed.c b/prune-packed.c\nindex d24b097..106cc39 100644\n--- a/prune-packed.c\n+++ b/prune-packed.c\n@@ -58,6 +58,8 @@ int main(int argc, char **argv)\n  {\n  \tint i;\n  \n+\tgit_set_appname(\"git-prune-packed\");\n+\n  \tsetup_git_directory();\n  \n  \tfor (i = 1; i < argc; i++) {\ndiff --git a/read-tree.c b/read-tree.c\nindex 26f4f7e..6e1b698 100644\n--- a/read-tree.c\n+++ b/read-tree.c\n@@ -235,8 +235,7 @@ #endif\n  \n  static void reject_merge(struct cache_entry *ce)\n  {\n-\tdie(\"Entry '%s' would be overwritten by merge. Cannot merge.\", \n-\t    ce->name);\n+\tdie(\"Entry '%s' would be overwritten by merge. Cannot merge.\", ce->name);\n  }\n  \n  /* Unlink the last component and attempt to remove leading\n@@ -723,6 +722,8 @@ int main(int argc, char **argv)\n  \tunsigned char sha1[20];\n  \tmerge_fn_t fn = NULL;\n  \n+\tgit_set_appname(\"git-read-tree\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \ndiff --git a/receive-pack.c b/receive-pack.c\nindex 93929b5..54ec6dc 100644\n--- a/receive-pack.c\n+++ b/receive-pack.c\n@@ -237,8 +237,7 @@ static void read_head_info(void)\n  \t\t    line[81] != ' ' ||\n  \t\t    get_sha1_hex(line, old_sha1) ||\n  \t\t    get_sha1_hex(line + 41, new_sha1))\n-\t\t\tdie(\"protocol error: expected old/new/ref, got '%s'\",\n-\t\t\t    line);\n+\t\t\tdie(\"protocol error: expected old/new/ref, got '%s'\", line);\n  \n  \t\trefname = line + 82;\n  \t\treflen = strlen(refname);\n@@ -304,6 +303,8 @@ int main(int argc, char **argv)\n  \tint i;\n  \tchar *dir = NULL;\n  \n+\tgit_set_appname(\"git-receive-pack\");\n+\n  \targv++;\n  \tfor (i = 1; i < argc; i++) {\n  \t\tchar *arg = *argv++;\ndiff --git a/repo-config.c b/repo-config.c\nindex c5ebb76..793af68 100644\n--- a/repo-config.c\n+++ b/repo-config.c\n@@ -86,6 +86,8 @@ static int get_value(const char* key_, c\n  \n  int main(int argc, const char **argv)\n  {\n+\tgit_set_appname(\"git-repo-config\");\n+\n  \tsetup_git_directory();\n  \n  \twhile (1 < argc) {\ndiff --git a/rev-list.c b/rev-list.c\nindex 8b0ec38..4646372 100644\n--- a/rev-list.c\n+++ b/rev-list.c\n@@ -296,6 +296,8 @@ int main(int argc, const char **argv)\n  \tstruct commit_list *list;\n  \tint i;\n  \n+\tgit_set_appname(\"git-rev-list\");\n+\n  \tinit_revisions(&revs);\n  \trevs.abbrev = 0;\n  \trevs.commit_format = CMIT_FMT_UNSPECIFIED;\ndiff --git a/rev-parse.c b/rev-parse.c\nindex 7f66ae2..aaaf813 100644\n--- a/rev-parse.c\n+++ b/rev-parse.c\n@@ -172,8 +172,11 @@ int main(int argc, char **argv)\n  {\n  \tint i, as_is = 0, verify = 0;\n  \tunsigned char sha1[20];\n-\tconst char *prefix = setup_git_directory();\n+\tconst char *prefix;\n  \t\n+\tgit_set_appname(\"git-rev-parse\");\n+\n+\tprefix = setup_git_directory();\n  \tgit_config(git_default_config);\n  \n  \tfor (i = 1; i < argc; i++) {\ndiff --git a/send-pack.c b/send-pack.c\nindex 409f188..803e193 100644\n--- a/send-pack.c\n+++ b/send-pack.c\n@@ -361,6 +361,8 @@ int main(int argc, char **argv)\n  \tint fd[2], ret;\n  \tpid_t pid;\n  \n+\tgit_set_appname(\"git-send-pack\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \ndiff --git a/shell.c b/shell.c\nindex 8c08cf0..c22cde1 100644\n--- a/shell.c\n+++ b/shell.c\n@@ -32,6 +32,8 @@ int main(int argc, char **argv)\n  \tchar *prog;\n  \tstruct commands *cmd;\n  \n+\tgit_set_appname(\"git-shell\");\n+\n  \t/* We want to see \"-c cmd args\", and nothing else */\n  \tif (argc != 3 || strcmp(argv[1], \"-c\"))\n  \t\tdie(\"What do you think I am? A shell?\");\ndiff --git a/show-branch.c b/show-branch.c\nindex 24efb65..9ec3553 100644\n--- a/show-branch.c\n+++ b/show-branch.c\n@@ -549,6 +549,8 @@ int main(int ac, char **av)\n  \tint head_at = -1;\n  \tint topics = 0;\n  \n+\tgit_set_appname(\"git-show-branch\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_show_branch_config);\n  \ndiff --git a/show-index.c b/show-index.c\nindex c21d660..b8a9fba 100644\n--- a/show-index.c\n+++ b/show-index.c\n@@ -7,6 +7,8 @@ int main(int argc, char **argv)\n  \tunsigned int entry[6];\n  \tstatic unsigned int top_index[256];\n  \n+\tgit_set_appname(\"git-show-index\");\n+\n  \tif (fread(top_index, sizeof(top_index), 1, stdin) != 1)\n  \t\tdie(\"unable to read idex\");\n  \tnr = 0;\ndiff --git a/ssh-fetch.c b/ssh-fetch.c\nindex 4eb9e04..4bab7e7 100644\n--- a/ssh-fetch.c\n+++ b/ssh-fetch.c\n@@ -128,6 +128,8 @@ int main(int argc, char **argv)\n  \tint arg = 1;\n  \tconst char *prog;\n  \n+\tgit_set_appname(\"git-ssh-fetch\");\n+\n  \tprog = getenv(\"GIT_SSH_PUSH\");\n  \tif (!prog) prog = \"git-ssh-upload\";\n  \ndiff --git a/ssh-upload.c b/ssh-upload.c\nindex b675a0b..9860cf4 100644\n--- a/ssh-upload.c\n+++ b/ssh-upload.c\n@@ -119,6 +119,8 @@ int main(int argc, char **argv)\n  \tunsigned char sha1[20];\n  \tchar hex[41];\n  \n+\tgit_set_appname(\"git-ssh-upload\");\n+\n  \tprog = getenv(COUNTERPART_ENV_NAME);\n  \tif (!prog) prog = COUNTERPART_PROGRAM_NAME;\n  \ndiff --git a/stripspace.c b/stripspace.c\nindex 65a6346..95c2e43 100644\n--- a/stripspace.c\n+++ b/stripspace.c\n@@ -34,6 +34,8 @@ int main(int argc, char **argv)\n  \tint incomplete = 0;\n  \tchar line[1024];\n  \n+\tgit_set_appname(\"git-stripspace\");\n+\n  \twhile (fgets(line, sizeof(line), stdin)) {\n  \t\tincomplete = cleanup(line);\n  \ndiff --git a/symbolic-ref.c b/symbolic-ref.c\nindex 193c87c..a8b3b9d 100644\n--- a/symbolic-ref.c\n+++ b/symbolic-ref.c\n@@ -19,6 +19,8 @@ static void check_symref(const char *HEA\n  \n  int main(int argc, const char **argv)\n  {\n+\tgit_set_appname(\"git-symbolic-ref\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \tswitch (argc) {\ndiff --git a/tar-tree.c b/tar-tree.c\nindex fc60a90..7a388f5 100644\n--- a/tar-tree.c\n+++ b/tar-tree.c\n@@ -26,9 +26,9 @@ static void reliable_write(void *buf, un\n  \t\tif (ret < 0) {\n  \t\t\tif (errno == EPIPE)\n  \t\t\t\texit(0);\n-\t\t\tdie(\"git-tar-tree: %s\", strerror(errno));\n+\t\t\tdie(\"%s\", strerror(errno));\n  \t\t} else if (!ret) {\n-\t\t\tdie(\"git-tar-tree: disk full?\");\n+\t\t\tdie(\"disk full?\");\n  \t\t}\n  \t\tsize -= ret;\n  \t\tbuf += ret;\n@@ -308,6 +308,8 @@ int main(int argc, char **argv)\n  \tstruct tree_desc tree;\n  \tstruct strbuf current_path;\n  \n+\tgit_set_appname(\"git-tar-tree\");\n+\n  \tcurrent_path.buf = xmalloc(PATH_MAX);\n  \tcurrent_path.alloc = PATH_MAX;\n  \tcurrent_path.len = current_path.eof = 0;\ndiff --git a/test-date.c b/test-date.c\nindex 93e8027..3d2cfbb 100644\n--- a/test-date.c\n+++ b/test-date.c\n@@ -7,6 +7,8 @@ int main(int argc, char **argv)\n  {\n  \tint i;\n  \n+\tgit_set_appname(\"git-test-date\");\n+\n  \tfor (i = 1; i < argc; i++) {\n  \t\tchar result[100];\n  \t\ttime_t t;\ndiff --git a/test-delta.c b/test-delta.c\nindex 1be8ee0..bf6c6ac 100644\n--- a/test-delta.c\n+++ b/test-delta.c\n@@ -27,6 +27,8 @@ int main(int argc, char *argv[])\n  \tvoid *from_buf, *data_buf, *out_buf;\n  \tunsigned long from_size, data_size, out_size;\n  \n+\tgit_set_appname(\"git-test-delta\");\n+\n  \tif (argc != 5 || (strcmp(argv[1], \"-d\") && strcmp(argv[1], \"-p\"))) {\n  \t\tfprintf(stderr, \"Usage: %s\\n\", usage);\n  \t\treturn 1;\ndiff --git a/tree-diff.c b/tree-diff.c\nindex 1cdf8aa..5170ddf 100644\n--- a/tree-diff.c\n+++ b/tree-diff.c\n@@ -191,7 +191,7 @@ int diff_tree(struct tree_desc *t1, stru\n  \t\t\tupdate_tree_entry(t2);\n  \t\t\tcontinue;\n  \t\t}\n-\t\tdie(\"git-diff-tree: internal error\");\n+\t\tdie(\"internal error\");\n  \t}\n  \treturn 0;\n  }\ndiff --git a/unpack-file.c b/unpack-file.c\nindex 23a8562..a49e230 100644\n--- a/unpack-file.c\n+++ b/unpack-file.c\n@@ -27,6 +27,8 @@ int main(int argc, char **argv)\n  {\n  \tunsigned char sha1[20];\n  \n+\tgit_set_appname(\"git-unpack-file\");\n+\n  \tif (argc != 2 || get_sha1(argv[1], sha1))\n  \t\tusage(\"git-unpack-file <sha1>\");\n  \ndiff --git a/unpack-objects.c b/unpack-objects.c\nindex 3b824b0..315ea67 100644\n--- a/unpack-objects.c\n+++ b/unpack-objects.c\n@@ -270,6 +270,8 @@ int main(int argc, char **argv)\n  \tint i;\n  \tunsigned char sha1[20];\n  \n+\tgit_set_appname(\"git-unpack-objects\");\n+\n  \tsetup_git_directory();\n  \n  \tquiet = !isatty(2);\ndiff --git a/update-index.c b/update-index.c\nindex facec8d..f8e24d4 100644\n--- a/update-index.c\n+++ b/update-index.c\n@@ -354,7 +354,7 @@ static void chmod_path(int flip, const c\n  \treport(\"chmod %cx '%s'\", flip, path);\n  \treturn;\n   fail:\n-\tdie(\"git-update-index: cannot chmod %cx '%s'\", flip, path);\n+\tdie(\"cannot chmod %cx '%s'\", flip, path);\n  }\n  \n  static struct cache_file cache_file;\n@@ -374,7 +374,7 @@ static void update_one(const char *path,\n  \n  \tif (force_remove) {\n  \t\tif (remove_file_from_cache(p))\n-\t\t\tdie(\"git-update-index: unable to remove %s\", path);\n+\t\t\tdie(\"unable to remove %s\", path);\n  \t\treport(\"remove '%s'\", path);\n  \t\treturn;\n  \t}\n@@ -450,8 +450,7 @@ static void read_index_info(int line_ter\n  \t\tif (!mode) {\n  \t\t\t/* mode == 0 means there is no such path -- remove */\n  \t\t\tif (remove_file_from_cache(path_name))\n-\t\t\t\tdie(\"git-update-index: unable to remove %s\",\n-\t\t\t\t    ptr);\n+\t\t\t\tdie(\"unable to remove %s\", ptr);\n  \t\t}\n  \t\telse {\n  \t\t\t/* mode ' ' sha1 '\\t' name\n@@ -460,8 +459,7 @@ static void read_index_info(int line_ter\n  \t\t\t */\n  \t\t\tptr[-42] = ptr[-1] = 0;\n  \t\t\tif (add_cacheinfo(mode, sha1, path_name, stage))\n-\t\t\t\tdie(\"git-update-index: unable to update %s\",\n-\t\t\t\t    path_name);\n+\t\t\t\tdie(\"unable to update %s\", path_name);\n  \t\t}\n  \t\tif (path_name != ptr)\n  \t\t\tfree(path_name);\n@@ -598,12 +596,17 @@ int main(int argc, const char **argv)\n  \tint i, newfd, entries, has_errors = 0, line_termination = '\\n';\n  \tint allow_options = 1;\n  \tint read_from_stdin = 0;\n-\tconst char *prefix = setup_git_directory();\n-\tint prefix_length = prefix ? strlen(prefix) : 0;\n+\tconst char *prefix;\n+\tint prefix_length;\n  \tchar set_executable_bit = 0;\n  \n+\tgit_set_appname(\"git-update-index\");\n+\n  \tgit_config(git_default_config);\n  \n+\tprefix = setup_git_directory();\n+\tprefix_length = prefix ? strlen(prefix) : 0;\n+\n  \tnewfd = hold_index_file_for_update(&cache_file, get_index_file());\n  \tif (newfd < 0)\n  \t\tdie(\"unable to create new cachefile\");\n@@ -653,20 +656,19 @@ int main(int argc, const char **argv)\n  \t\t\t\tunsigned int mode;\n  \n  \t\t\t\tif (i+3 >= argc)\n-\t\t\t\t\tdie(\"git-update-index: --cacheinfo <mode> <sha1> <path>\");\n+\t\t\t\t\tdie(\"--cacheinfo <mode> <sha1> <path>\");\n  \n  \t\t\t\tif ((sscanf(argv[i+1], \"%o\", &mode) != 1) ||\n  \t\t\t\t    get_sha1_hex(argv[i+2], sha1) ||\n  \t\t\t\t    add_cacheinfo(mode, sha1, argv[i+3], 0))\n-\t\t\t\t\tdie(\"git-update-index: --cacheinfo\"\n-\t\t\t\t\t    \" cannot add %s\", argv[i+3]);\n+\t\t\t\t\tdie(\"--cacheinfo cannot add %s\", argv[i+3]);\n  \t\t\t\ti += 3;\n  \t\t\t\tcontinue;\n  \t\t\t}\n  \t\t\tif (!strcmp(path, \"--chmod=-x\") ||\n  \t\t\t    !strcmp(path, \"--chmod=+x\")) {\n  \t\t\t\tif (argc <= i+1)\n-\t\t\t\t\tdie(\"git-update-index: %s <path>\", path);\n+\t\t\t\t\tdie(\"%s <path>\", path);\n  \t\t\t\tset_executable_bit = path[8];\n  \t\t\t\tcontinue;\n  \t\t\t}\ndiff --git a/update-ref.c b/update-ref.c\nindex ba4bf51..1fd32d1 100644\n--- a/update-ref.c\n+++ b/update-ref.c\n@@ -24,6 +24,8 @@ int main(int argc, char **argv)\n  \tunsigned char sha1[20], oldsha1[20], currsha1[20];\n  \tint fd, written;\n  \n+\tgit_set_appname(\"git-update-ref\");\n+\n  \tsetup_git_directory();\n  \tgit_config(git_default_config);\n  \tif (argc < 3 || argc > 4)\ndiff --git a/update-server-info.c b/update-server-info.c\nindex 0b6c383..3496d0e 100644\n--- a/update-server-info.c\n+++ b/update-server-info.c\n@@ -7,6 +7,9 @@ int main(int ac, char **av)\n  {\n  \tint i;\n  \tint force = 0;\n+\n+\tgit_set_appname(\"git-update-server-info\");\n+\n  \tfor (i = 1; i < ac; i++) {\n  \t\tif (av[i][0] == '-') {\n  \t\t\tif (!strcmp(\"--force\", av[i]) ||\ndiff --git a/upload-pack.c b/upload-pack.c\nindex 47560c9..ed16b53 100644\n--- a/upload-pack.c\n+++ b/upload-pack.c\n@@ -38,10 +38,10 @@ static void create_pack_file(void)\n  \tint create_full_pack = (nr_our_refs == nr_needs && !nr_has);\n  \n  \tif (pipe(fd) < 0)\n-\t\tdie(\"git-upload-pack: unable to create pipe\");\n+\t\tdie(\"unable to create pipe\");\n  \tpid = fork();\n  \tif (pid < 0)\n-\t\tdie(\"git-upload-pack: unable to fork git-rev-list\");\n+\t\tdie(\"unable to fork git-rev-list\");\n  \n  \tif (!pid) {\n  \t\tint i;\n@@ -84,19 +84,19 @@ static void create_pack_file(void)\n  \t\t\t}\n  \t\t*p++ = NULL;\n  \t\texecv_git_cmd(argv);\n-\t\tdie(\"git-upload-pack: unable to exec git-rev-list\");\n+\t\tdie(\"unable to exec git-rev-list\");\n  \t}\n  \tdup2(fd[0], 0);\n  \tclose(fd[0]);\n  \tclose(fd[1]);\n  \texecl_git_cmd(\"pack-objects\", \"--stdout\", NULL);\n-\tdie(\"git-upload-pack: unable to exec git-pack-objects\");\n+\tdie(\"unable to exec git-pack-objects\");\n  }\n  \n  static int got_sha1(char *hex, unsigned char *sha1)\n  {\n  \tif (get_sha1_hex(hex, sha1))\n-\t\tdie(\"git-upload-pack: expected SHA1 object, got '%s'\", hex);\n+\t\tdie(\"expected SHA1 object, got '%s'\", hex);\n  \tif (!has_sha1_file(sha1))\n  \t\treturn 0;\n  \tif (nr_has < MAX_HAS) {\n@@ -162,7 +162,7 @@ static int get_common_commits(void)\n  \t\t\tpacket_write(1, \"NAK\\n\");\n  \t\t\treturn -1;\n  \t\t}\n-\t\tdie(\"git-upload-pack: expected SHA1 list, got '%s'\", line);\n+\t\tdie(\"expected SHA1 list, got '%s'\", line);\n  \t}\n  }\n  \n@@ -191,8 +191,7 @@ static int receive_needs(void)\n  \t\t\tsha1_buf = needs_sha1[needs];\n  \n  \t\tif (strncmp(\"want \", line, 5) || get_sha1_hex(line+5, sha1_buf))\n-\t\t\tdie(\"git-upload-pack: protocol error, \"\n-\t\t\t    \"expected to get sha, not '%s'\", line);\n+\t\t\tdie(\"protocol error, expected to get sha, not '%s'\", line);\n  \t\tif (strstr(line+45, \"multi_ack\"))\n  \t\t\tmulti_ack = 1;\n  \t\tif (strstr(line+45, \"thin-pack\"))\n@@ -208,7 +207,7 @@ static int receive_needs(void)\n  \t\t */\n  \t\to = lookup_object(sha1_buf);\n  \t\tif (!o || !(o->flags & OUR_REF))\n-\t\t\tdie(\"git-upload-pack: not our ref %s\", line+5);\n+\t\t\tdie(\"not our ref %s\", line+5);\n  \t\tif (!(o->flags & WANTED)) {\n  \t\t\to->flags |= WANTED;\n  \t\t\tneeds++;\n@@ -222,7 +221,7 @@ static int send_ref(const char *refname,\n  \tstruct object *o = parse_object(sha1);\n  \n  \tif (!o)\n-\t\tdie(\"git-upload-pack: cannot find object %s:\", sha1_to_hex(sha1));\n+\t\tdie(\"cannot find object %s:\", sha1_to_hex(sha1));\n  \n  \tif (capabilities)\n  \t\tpacket_write(1, \"%s %s%c%s\\n\", sha1_to_hex(sha1), refname,\n@@ -261,6 +260,8 @@ int main(int argc, char **argv)\n  \tint i;\n  \tint strict = 0;\n  \n+\tgit_set_appname(\"git-upload-pack\");\n+\n  \tfor (i = 1; i < argc; i++) {\n  \t\tchar *arg = argv[i];\n  \ndiff --git a/usage.c b/usage.c\nindex 1fa924c..bb89d66 100644\n--- a/usage.c\n+++ b/usage.c\n@@ -5,8 +5,11 @@\n   */\n  #include \"git-compat-util.h\"\n  \n+static char appname[32+3]=\"\";      /* +3 for ': \\0' */\n+\n  static void report(const char *prefix, const char *err, va_list params)\n  {\n+\tfputs(appname[0]?appname:\"\",stderr);\n  \tfputs(prefix, stderr);\n  \tvfprintf(stderr, err, params);\n  \tfputs(\"\\n\", stderr);\n@@ -37,3 +40,14 @@ int error(const char *err, ...)\n  \tva_end(params);\n  \treturn -1;\n  }\n+\n+void git_set_appname(const char *name)\n+{\n+\tsize_t len=(name && *name)?strlen(name):0;\n+\tif (0==len)\n+\t\treturn;\n+\tmemcpy(appname,name,len>sizeof(appname)-3?sizeof(appname)-3:len);\n+\tappname[len++]=':';\n+\tappname[len++]=' ';\n+\tappname[len++]='\\0';\n+}\ndiff --git a/var.c b/var.c\nindex a57a33b..a816373 100644\n--- a/var.c\n+++ b/var.c\n@@ -54,6 +54,9 @@ static int show_config(const char *var, \n  int main(int argc, char **argv)\n  {\n  \tconst char *val;\n+\n+\tgit_set_appname(\"git-var\");\n+\n  \tif (argc != 2) {\n  \t\tusage(var_usage);\n  \t}\ndiff --git a/verify-pack.c b/verify-pack.c\nindex c99db9d..e1b3b01 100644\n--- a/verify-pack.c\n+++ b/verify-pack.c\n@@ -35,6 +35,8 @@ int main(int ac, char **av)\n  \tint verbose = 0;\n  \tint no_more_options = 0;\n  \n+\tgit_set_appname(\"git-verify-pack\");\n+\n  \twhile (1 < ac) {\n  \t\tchar path[PATH_MAX];\n  \ndiff --git a/write-tree.c b/write-tree.c\nindex dcad6e6..9f68fda 100644\n--- a/write-tree.c\n+++ b/write-tree.c\n@@ -92,6 +92,8 @@ int main(int argc, char **argv)\n  \tint entries;\n  \tunsigned char sha1[20];\n  \t\n+\tgit_set_appname(\"git-write-tree\");\n+\n  \tsetup_git_directory();\n  \n  \tentries = read_cache();\n@@ -106,7 +108,7 @@ int main(int argc, char **argv)\n  \t\tdie(\"too many options\");\n  \n  \tif (entries < 0)\n-\t\tdie(\"git-write-tree: error reading cache\");\n+\t\tdie(\"error reading cache\");\n  \n  \t/* Verify that the tree is merged */\n  \tfunny = 0;\n@@ -121,7 +123,7 @@ int main(int argc, char **argv)\n  \t\t}\n  \t}\n  \tif (funny)\n-\t\tdie(\"git-write-tree: not able to write tree\");\n+\t\tdie(\"not able to write tree\");\n  \n  \t/* Also verify that the cache does not have path and path/file\n  \t * at the same time.  At this point we know the cache has only\n@@ -148,11 +150,11 @@ int main(int argc, char **argv)\n  \t\t}\n  \t}\n  \tif (funny)\n-\t\tdie(\"git-write-tree: not able to write tree\");\n+\t\tdie(\"not able to write tree\");\n  \n  \t/* Ok, write it out */\n  \tif (write_tree(active_cache, entries, \"\", 0, sha1) != entries)\n-\t\tdie(\"git-write-tree: internal error\");\n+\t\tdie(\"internal error\");\n  \tprintf(\"%s\\n\", sha1_to_hex(sha1));\n  \treturn 0;\n  }\n-- \n1.3.0.g36932-dirty\n"}]}