{"thread":{"id":"3964","subject":"[PATCH] Make die() and error() prefix line with binary name if set","startedAt":"2006-04-25T10:12:08Z","lastAt":"2006-04-26T10:43:26Z","messageCount":5,"participants":["Rocco Rutte","Jakub Narebski","Junio C Hamano"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"19093","messageId":"20060425101207.GC5482@bolero.cs.tu-berlin.de","threadId":"3964","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-25T10:12:08Z","receivedAt":"2006-04-25T10:12:08Z","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\nSigned-off-by: Rocco Rutte <pdmef@gmx.net>\n\n---\n\n  apply.c              |   10 ++++++----\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        |    2 +-\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          |    2 ++\n  index-pack.c         |    2 ++\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       |    2 ++\n  pack-redundant.c     |    2 ++\n  patch-id.c           |    2 ++\n  peek-remote.c        |    2 ++\n  prune-packed.c       |    2 ++\n  read-tree.c          |    2 ++\n  receive-pack.c       |    2 ++\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       |   23 ++++++++++++++---------\n  update-ref.c         |    2 ++\n  update-server-info.c |    3 +++\n  upload-pack.c        |   20 +++++++++++---------\n  usage.c              |   14 ++++++++++++++\n  var.c                |    3 +++\n  verify-pack.c        |    2 ++\n  write-tree.c         |   10 ++++++----\n  70 files changed, 210 insertions(+), 58 deletions(-)\n\n92e903a0273996028d069b28fde6c5a990e1157b\ndiff --git a/apply.c b/apply.c\nindex 269210a..84879d2 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@@ -1960,6 +1960,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 a1ccda3..ddf59d0 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..b44ab8f 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);\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..75a544b 100644\n--- a/http-push.c\n+++ b/http-push.c\n@@ -2315,6 +2315,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..a69e51a 100644\n--- a/index-pack.c\n+++ b/index-pack.c\n@@ -425,6 +425,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  \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..de733b6 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++) {\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..23c2014 100644\n--- a/read-tree.c\n+++ b/read-tree.c\n@@ -723,6 +723,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..8ad291c 100644\n--- a/receive-pack.c\n+++ b/receive-pack.c\n@@ -304,6 +304,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 e956cd5..b0b701e 100644\n--- a/rev-parse.c\n+++ b/rev-parse.c\n@@ -164,8 +164,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 1efac27..1972328 100644\n--- a/update-index.c\n+++ b/update-index.c\n@@ -370,7 +370,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@@ -446,7 +446,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\tdie(\"unable to remove %s\",\n  \t\t\t\t    ptr);\n  \t\t}\n  \t\telse {\n@@ -456,7 +456,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\tdie(\"unable to update %s\",\n  \t\t\t\t    path_name);\n  \t\t}\n  \t\tif (path_name != ptr)\n@@ -476,8 +476,13 @@ 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+\n+\tgit_set_appname(\"git-unpack-index\");\n+\n+\tprefix = setup_git_directory();\n+\tprefix_length = prefix ? strlen(prefix) : 0;\n  \n  \tgit_config(git_default_config);\n  \n@@ -530,12 +535,12 @@ 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\tdie(\"--cacheinfo\"\n  \t\t\t\t\t    \" cannot add %s\", argv[i+3]);\n  \t\t\t\ti += 3;\n  \t\t\t\tcontinue;\n@@ -543,9 +548,9 @@ int main(int argc, const char **argv)\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\tif (chmod_path(path[8], argv[++i]))\n-\t\t\t\t\tdie(\"git-update-index: %s cannot chmod %s\", path, argv[i]);\n+\t\t\t\t\tdie(\"%s cannot chmod %s\", path, argv[i]);\n  \t\t\t\tcontinue;\n  \t\t\t}\n  \t\t\tif (!strcmp(path, \"--assume-unchanged\")) {\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..4b8d690 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,7 +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\tdie(\"protocol error, \"\n  \t\t\t    \"expected to get sha, not '%s'\", line);\n  \t\tif (strstr(line+45, \"multi_ack\"))\n  \t\t\tmulti_ack = 1;\n@@ -208,7 +208,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 +222,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 +261,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..27dd5f5 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=strlen(name && *name ? name : \"\");\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.ge649-dirty\n"},{"id":"19094","messageId":"e2kt7h$o4a$1@sea.gmane.org","threadId":"3964","inReplyTo":"20060425101207.GC5482@bolero.cs.tu-berlin.de","subject":"Re: [PATCH] Make die() and error() prefix line with binary name if set","fromName":"Jakub Narebski","fromEmail":"jnareb@gmail.com","sentAt":"2006-04-25T10:22:02Z","receivedAt":"2006-04-25T10:22:02Z","isPatch":true,"sender":{"key":"jnareb@gmail.com","avatar":"https://avatars.githubusercontent.com/u/2706?v=4"},"body":"Rocco Rutte wrote:\n\n> +        size_t len=strlen(name && *name ? name : \"\");\n> +        if (0==len)\n\nWouldn't it be easier (and less idiomatic) to just do\n\n+        size_t len= *name ? strlen(name) : 0;\n+        if (0==len)\n\n-- \nJakub Narebski\nWarsaw, Poland\n"},{"id":"19096","messageId":"20060425141358.GH5482@bolero.cs.tu-berlin.de","threadId":"3964","inReplyTo":"e2kt7h$o4a$1@sea.gmane.org","subject":"Re: [PATCH] Make die() and error() prefix line with binary name if set","fromName":"Rocco Rutte","fromEmail":"pdmef@gmx.net","sentAt":"2006-04-25T14:13:58Z","receivedAt":"2006-04-25T14:13:58Z","isPatch":true,"sender":{"key":"pdmef@gmx.net","avatar":null},"body":"* Jakub Narebski <jnareb@gmail.com>:\n\n>Wouldn't it be easier (and less idiomatic) to just do\n\nOh, thanks for pointing it out. The second one I sent fixes it (and is \nagainst an updated master branch).\n\n   bye, Rocco\n-- \n:wq!\n"},{"id":"19141","messageId":"7vejzkrb2y.fsf@assigned-by-dhcp.cox.net","threadId":"3964","inReplyTo":"20060425101207.GC5482@bolero.cs.tu-berlin.de","subject":"Re: [PATCH] Make die() and error() prefix line with binary name if set","fromName":"Junio C Hamano","fromEmail":"junkio@cox.net","sentAt":"2006-04-26T08:32:37Z","receivedAt":"2006-04-26T08:32:37Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Rocco Rutte <pdmef@gmx.net> writes:\n\n> Now, git_set_appname() can be used to set the name of the binary\n> as first call in a binary's main() routine which will be used\n> as prefix in die() and error(). If it was not called, no prefix\n> will be printed.\n\nI agree with the general direction, but...\n\n> @@ -1960,6 +1960,8 @@ int main(int argc, char **argv)\n>  \tint read_stdin = 1;\n>  \tconst char *whitespace_option = NULL;\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;\n\n... what's wrong with your mailer?\n"},{"id":"19145","messageId":"20060426104326.GL5482@bolero.cs.tu-berlin.de","threadId":"3964","inReplyTo":"7vejzkrb2y.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH] Make die() and error() prefix line with binary name if set","fromName":"Rocco Rutte","fromEmail":"pdmef@gmx.net","sentAt":"2006-04-26T10:43:26Z","receivedAt":"2006-04-26T10:43:26Z","isPatch":true,"sender":{"key":"pdmef@gmx.net","avatar":null},"body":"* Junio C Hamano <junkio@cox.net>:\n\n>... what's wrong with your mailer?\n\nI don't know. I recall to have seen this earlier.\n\nAnd while I'll look at it (I bet this an f=f issue), the patch is at:\n\n   <http://user.cs.tu-berlin.de/~pdmef/0001-Make-die-and-error-prefix-line-with-binary-name-if-set.txt>\n\n   bye, Rocco\n-- \n:wq!\n"}]}