{"thread":{"id":"11058","subject":"[PATCH v2] Do check_repository_format() early","startedAt":"2007-11-29T12:21:39Z","lastAt":"2007-12-14T20:37:15Z","messageCount":10,"participants":["Nguyễn Thái Ngọc Duy","Junio C Hamano","Jeff King","Nguyen Thai Ngoc Duy","Johannes Schindelin"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"61392","messageId":"20071129122139.GA11176@laptop","threadId":"11058","inReplyTo":null,"subject":"[PATCH v2] Do check_repository_format() early","fromName":"Nguyễn Thái Ngọc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2007-11-29T12:21:39Z","receivedAt":"2007-11-29T12:21:39Z","isPatch":true,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"Repository version check is only performed when\nsetup_git_directory() is called. This makes sure\nsetup_git_directory_gently() does the check too.\n\nSigned-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>\nAcked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>\n---\n Comment updated.\n\n setup.c |   13 ++++++++++---\n 1 files changed, 10 insertions(+), 3 deletions(-)\n\ndiff --git a/setup.c b/setup.c\nindex faf4137..8fde2b2 100644\n--- a/setup.c\n+++ b/setup.c\n@@ -246,8 +246,14 @@ const char *setup_git_directory_gently(int *nongit_ok)\n \t\t\tstatic char buffer[1024 + 1];\n \t\t\tconst char *retval;\n \n-\t\t\tif (!work_tree_env)\n-\t\t\t\treturn set_work_tree(gitdirenv);\n+\t\t\tif (!work_tree_env) {\n+\t\t\t\tretval = set_work_tree(gitdirenv);\n+\t\t\t\t/* config may override worktree\n+\t\t\t\t * see set_work_tree comment */\n+\t\t\t\tcheck_repository_format();\n+\t\t\t\treturn retval;\n+\t\t\t}\n+\t\t\tcheck_repository_format();\n \t\t\tretval = get_relative_cwd(buffer, sizeof(buffer) - 1,\n \t\t\t\t\tget_git_work_tree());\n \t\t\tif (!retval || !*retval)\n@@ -287,6 +293,7 @@ const char *setup_git_directory_gently(int *nongit_ok)\n \t\t\tif (!work_tree_env)\n \t\t\t\tinside_work_tree = 0;\n \t\t\tsetenv(GIT_DIR_ENVIRONMENT, \".\", 1);\n+\t\t\tcheck_repository_format();\n \t\t\treturn NULL;\n \t\t}\n \t\tchdir(\"..\");\n@@ -307,6 +314,7 @@ const char *setup_git_directory_gently(int *nongit_ok)\n \tif (!work_tree_env)\n \t\tinside_work_tree = 1;\n \tgit_work_tree_cfg = xstrndup(cwd, offset);\n+\tcheck_repository_format();\n \tif (offset == len)\n \t\treturn NULL;\n \n@@ -367,7 +375,6 @@ int check_repository_format(void)\n const char *setup_git_directory(void)\n {\n \tconst char *retval = setup_git_directory_gently(NULL);\n-\tcheck_repository_format();\n \n \t/* If the work tree is not the default one, recompute prefix */\n \tif (inside_work_tree < 0) {\n-- \n1.5.3.6.2041.g106f-dirty\n"},{"id":"63070","messageId":"7vmysexdvw.fsf@gitster.siamese.dyndns.org","threadId":"11058","inReplyTo":"20071129122139.GA11176@laptop","subject":"[Funky] \"git -p cmd\" inside a bare repository","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2007-12-14T01:29:23Z","receivedAt":"2007-12-14T01:29:23Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"If you have a bare repository and try this there:\n\n\t$ PAGER=head git show HEAD:gcc/ChangeLog\n\nit works as expected, but if you explicitly ask for pagination, like\nthis:\n\n\t$ PAGER=head git -p show HEAD:gcc/ChangeLog\n\nyou would get a very funky error message:\n\n\tfatal: ambiguous argument 'HEAD:gcc/ChangeLog': unknown revision or path not in the working tree.\n\tUse '--' to separate paths from revisions\n\nas if we are working with a repository with working tree.\n\nI originally noticed this with ls-tree.  The symptom is a bit different:\n\n\t$ git -p ls-tree HEAD\n\tfatal: Not a valid object name HEAD\n\n\n\nI _think_ what is happening is that setup_pager() tries to run\ngit_config(), which runs setup(), and then RUN_SETUP set for \"ls-tree\"\n(or \"show\") internal command runs setup again.  HEAD is given to\nresolve_ref() and git_path(\"%s\", ref) makes it to \".git/HEAD\", even\nthough in a bare repository git_dir should be set to \".\", and of course\nwe cannot find such a path in the git directory.\n"},{"id":"63082","messageId":"7vsl25x3yc.fsf_-_@gitster.siamese.dyndns.org","threadId":"11058","inReplyTo":"7vmysexdvw.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] make git start-up sequence a bit more robust","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2007-12-14T05:03:55Z","receivedAt":"2007-12-14T05:03:55Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"The handle options loop called setup_git_dir() and setup_pager() that\nwould silently trigger repository discovery while it cycled.  This patch\nchanges it to collect the options from the user, and uses the\ninformation in a saner, more controlled order, namely:\n\n - GIT_DIR, GIT_WORK_TREE and GIT_PAGER environments are set as needed;\n - setup_git_directory() is run if needed;\n - setup_work_tree(0 is run if needed;\n - setup_pager() is run if needed; \n\nThe last two wants to read config, which means setup_git_directory()\nshould come before them, which in turn means GIT_DIR must be set up\nbefore that.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Junio C Hamano <gitster@pobox.com> writes:\n\n > If you have a bare repository and try this there:\n >\n > \t$ PAGER=head git show HEAD:gcc/ChangeLog\n >\n > it works as expected, but if you explicitly ask for pagination, like\n > this:\n >\n > \t$ PAGER=head git -p show HEAD:gcc/ChangeLog\n >\n > you would get a very funky error message:\n >\n > \tfatal: ambiguous argument 'HEAD:gcc/ChangeLog': unknown revision or path not in the working tree.\n > \tUse '--' to separate paths from revisions\n >\n > as if we are working with a repository with working tree.\n >\n > I originally noticed this with ls-tree.  The symptom is a bit different:\n >\n > \t$ git -p ls-tree HEAD\n > \tfatal: Not a valid object name HEAD\n >\n > I _think_ what is happening is that setup_pager() tries to run\n > git_config(), which runs setup(), and then RUN_SETUP set for \"ls-tree\"\n > (or \"show\") internal command runs setup again.  HEAD is given to\n > resolve_ref() and git_path(\"%s\", ref) makes it to \".git/HEAD\", even\n > though in a bare repository git_dir should be set to \".\", and of course\n > we cannot find such a path in the git directory.\n\n git.c |   73 ++++++++++++++++++++++++++++++++++++++++-------------------------\n 1 files changed, 45 insertions(+), 28 deletions(-)\n\ndiff --git a/git.c b/git.c\nindex 15fec89..fd756cd 100644\n--- a/git.c\n+++ b/git.c\n@@ -6,7 +6,21 @@\n const char git_usage_string[] =\n \t\"git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]\";\n \n-static int handle_options(const char*** argv, int* argc, int* envchanged)\n+static int want_pager = -1;\n+static const char *want_git_dir;\n+static int want_git_dir_badly = 1;\n+static const char *want_work_tree;\n+\n+static void no_env_change_from_alias(const char *alias_command)\n+{\n+\tif (!alias_command)\n+\t\treturn;\n+\tdie(\"alias '%s' changes environment variables\\n\"\n+\t    \"You can use '!git' in the alias to do this.\",\n+\t    alias_command);\n+}\n+\n+static int handle_options(const char ***argv, int *argc, const char *alias_command)\n {\n \tint handled = 0;\n \n@@ -35,46 +49,42 @@ static int handle_options(const char*** argv, int* argc, int* envchanged)\n \t\t\t\texit(0);\n \t\t\t}\n \t\t} else if (!strcmp(cmd, \"-p\") || !strcmp(cmd, \"--paginate\")) {\n-\t\t\tsetup_pager();\n+\t\t\twant_pager = 1;\n \t\t} else if (!strcmp(cmd, \"--no-pager\")) {\n-\t\t\tsetenv(\"GIT_PAGER\", \"cat\", 1);\n-\t\t\tif (envchanged)\n-\t\t\t\t*envchanged = 1;\n+\t\t\twant_pager = 0;\n \t\t} else if (!strcmp(cmd, \"--git-dir\")) {\n+\t\t\tno_env_change_from_alias(alias_command);\n \t\t\tif (*argc < 2) {\n \t\t\t\tfprintf(stderr, \"No directory given for --git-dir.\\n\" );\n \t\t\t\tusage(git_usage_string);\n \t\t\t}\n-\t\t\tsetenv(GIT_DIR_ENVIRONMENT, (*argv)[1], 1);\n-\t\t\tif (envchanged)\n-\t\t\t\t*envchanged = 1;\n+\t\t\twant_git_dir = (*argv)[1];\n \t\t\t(*argv)++;\n \t\t\t(*argc)--;\n \t\t\thandled++;\n \t\t} else if (!prefixcmp(cmd, \"--git-dir=\")) {\n-\t\t\tsetenv(GIT_DIR_ENVIRONMENT, cmd + 10, 1);\n-\t\t\tif (envchanged)\n-\t\t\t\t*envchanged = 1;\n+\t\t\tno_env_change_from_alias(alias_command);\n+\t\t\twant_git_dir = cmd + 10;\n \t\t} else if (!strcmp(cmd, \"--work-tree\")) {\n+\t\t\tno_env_change_from_alias(alias_command);\n \t\t\tif (*argc < 2) {\n \t\t\t\tfprintf(stderr, \"No directory given for --work-tree.\\n\" );\n \t\t\t\tusage(git_usage_string);\n \t\t\t}\n-\t\t\tsetenv(GIT_WORK_TREE_ENVIRONMENT, (*argv)[1], 1);\n-\t\t\tif (envchanged)\n-\t\t\t\t*envchanged = 1;\n+\t\t\twant_work_tree = (*argv)[1];\n \t\t\t(*argv)++;\n \t\t\t(*argc)--;\n+\t\t\thandled++;\n \t\t} else if (!prefixcmp(cmd, \"--work-tree=\")) {\n-\t\t\tsetenv(GIT_WORK_TREE_ENVIRONMENT, cmd + 12, 1);\n-\t\t\tif (envchanged)\n-\t\t\t\t*envchanged = 1;\n+\t\t\tno_env_change_from_alias(alias_command);\n+\t\t\twant_work_tree = cmd + 12;\n \t\t} else if (!strcmp(cmd, \"--bare\")) {\n \t\t\tstatic char git_dir[PATH_MAX+1];\n+\t\t\tno_env_change_from_alias(alias_command);\n \t\t\tis_bare_repository_cfg = 1;\n-\t\t\tsetenv(GIT_DIR_ENVIRONMENT, getcwd(git_dir, sizeof(git_dir)), 0);\n-\t\t\tif (envchanged)\n-\t\t\t\t*envchanged = 1;\n+\t\t\tgetcwd(git_dir, sizeof(git_dir));\n+\t\t\twant_git_dir = git_dir;\n+\t\t\twant_git_dir_badly = 0;\n \t\t} else {\n \t\t\tfprintf(stderr, \"Unknown option: %s\\n\", cmd);\n \t\t\tusage(git_usage_string);\n@@ -153,7 +163,7 @@ static int split_cmdline(char *cmdline, const char ***argv)\n \n static int handle_alias(int *argcp, const char ***argv)\n {\n-\tint nongit = 0, envchanged = 0, ret = 0, saved_errno = errno;\n+\tint nongit = 0, ret = 0, saved_errno = errno;\n \tconst char *subdir;\n \tint count, option_count;\n \tconst char** new_argv;\n@@ -183,11 +193,7 @@ static int handle_alias(int *argcp, const char ***argv)\n \t\t\t    alias_string + 1, alias_command);\n \t\t}\n \t\tcount = split_cmdline(alias_string, &new_argv);\n-\t\toption_count = handle_options(&new_argv, &count, &envchanged);\n-\t\tif (envchanged)\n-\t\t\tdie(\"alias '%s' changes environment variables\\n\"\n-\t\t\t\t \"You can use '!git' in the alias to do this.\",\n-\t\t\t\t alias_command);\n+\t\toption_count = handle_options(&new_argv, &count, alias_command);\n \t\tmemmove(new_argv - option_count, new_argv,\n \t\t\t\tcount * sizeof(char *));\n \t\tnew_argv -= option_count;\n@@ -247,11 +253,12 @@ static int run_command(struct cmd_struct *p, int argc, const char **argv)\n \tprefix = NULL;\n \tif (p->option & RUN_SETUP)\n \t\tprefix = setup_git_directory();\n-\tif (p->option & USE_PAGER)\n-\t\tsetup_pager();\n \tif (p->option & NEED_WORK_TREE)\n \t\tsetup_work_tree();\n \n+\tif (0 < want_pager || (p->option & USE_PAGER))\n+\t\tsetup_pager();\n+\n \ttrace_argv_printf(argv, \"trace: built-in: git\");\n \n \tstatus = p->fn(argc, argv, prefix);\n@@ -434,6 +441,13 @@ int main(int argc, const char **argv)\n \t}\n \tcmd = argv[0];\n \n+\tif (want_git_dir)\n+\t\tsetenv(GIT_DIR_ENVIRONMENT, want_git_dir, want_git_dir_badly);\n+\tif (want_work_tree)\n+\t\tsetenv(GIT_WORK_TREE_ENVIRONMENT, want_work_tree, 1);\n+\tif (!want_pager)\n+\t\tsetenv(\"GIT_PAGER\", \"cat\", 1);\n+\n \t/*\n \t * We use PATH to find git commands, but we prepend some higher\n \t * precidence paths: the \"--exec-path\" option, the GIT_EXEC_PATH\n@@ -446,6 +460,9 @@ int main(int argc, const char **argv)\n \t\t/* See if it's an internal command */\n \t\thandle_internal_command(argc, argv);\n \n+\t\tif (!done_alias && 0 < want_pager)\n+\t\t\tsetup_pager();\n+\n \t\t/* .. then try the external ones */\n \t\texecv_git_cmd(argv);\n \n"},{"id":"63084","messageId":"20071214051223.GD10169@sigill.intra.peff.net","threadId":"11058","inReplyTo":"7vmysexdvw.fsf@gitster.siamese.dyndns.org","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2007-12-14T05:12:23Z","receivedAt":"2007-12-14T05:12:23Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Thu, Dec 13, 2007 at 05:29:23PM -0800, Junio C Hamano wrote:\n\n> I _think_ what is happening is that setup_pager() tries to run\n> git_config(), which runs setup(), and then RUN_SETUP set for \"ls-tree\"\n> (or \"show\") internal command runs setup again.  HEAD is given to\n> resolve_ref() and git_path(\"%s\", ref) makes it to \".git/HEAD\", even\n> though in a bare repository git_dir should be set to \".\", and of course\n> we cannot find such a path in the git directory.\n\nI think that there is perhaps a larger bug here, which is that running\nsetup twice gives bad results, and should either be fixed or have its\nown \"don't run me twice\" guard.\n\nBut it makes sense to always spawn the pager at the same time for\nconsistency. As a bonus, this makes \"git -p bogus\" a little more\nfriendly by not spawning the pager until we verify the command name.\n\n-- >8 --\ndelay \"git -p\" page spawning until command runtime\n\nThis makes the timing consistent with those commands that always spawn a\npager. It also avoids a funny interaction related to calling\nsetup_pager() before setup().\n\n---\ndiff --git a/git.c b/git.c\nindex c8b7e74..21d204f 100644\n--- a/git.c\n+++ b/git.c\n@@ -6,6 +6,8 @@\n const char git_usage_string[] =\n \t\"git [--version] [--exec-path[=GIT_EXEC_PATH]] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]\";\n \n+static int user_asked_for_pager;\n+\n static int handle_options(const char*** argv, int* argc, int* envchanged)\n {\n \tint handled = 0;\n@@ -35,7 +37,7 @@ static int handle_options(const char*** argv, int* argc, int* envchanged)\n \t\t\t\texit(0);\n \t\t\t}\n \t\t} else if (!strcmp(cmd, \"-p\") || !strcmp(cmd, \"--paginate\")) {\n-\t\t\tsetup_pager();\n+\t\t\tuser_asked_for_pager = 1;\n \t\t} else if (!strcmp(cmd, \"--no-pager\")) {\n \t\t\tsetenv(\"GIT_PAGER\", \"cat\", 1);\n \t\t\tif (envchanged)\n@@ -256,7 +258,7 @@ static int run_command(struct cmd_struct *p, int argc, const char **argv)\n \tprefix = NULL;\n \tif (p->option & RUN_SETUP)\n \t\tprefix = setup_git_directory();\n-\tif (p->option & USE_PAGER)\n+\tif (p->option & USE_PAGER || user_asked_for_pager)\n \t\tsetup_pager();\n \tif (p->option & NEED_WORK_TREE)\n \t\tsetup_work_tree();\n"},{"id":"63085","messageId":"20071214051434.GE10169@sigill.intra.peff.net","threadId":"11058","inReplyTo":"20071214051223.GD10169@sigill.intra.peff.net","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2007-12-14T05:14:34Z","receivedAt":"2007-12-14T05:14:34Z","isPatch":false,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Fri, Dec 14, 2007 at 12:12:23AM -0500, Jeff King wrote:\n\n> -- >8 --\n> delay \"git -p\" page spawning until command runtime\n\nHrmph. Bad timing. :)\n\nYour patch is much nicer, though, so please ignore mine.\n\n-Peff\n"},{"id":"63093","messageId":"7vabodvmg6.fsf@gitster.siamese.dyndns.org","threadId":"11058","inReplyTo":"20071214051434.GE10169@sigill.intra.peff.net","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2007-12-14T06:07:21Z","receivedAt":"2007-12-14T06:07:21Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Jeff King <peff@peff.net> writes:\n\n> On Fri, Dec 14, 2007 at 12:12:23AM -0500, Jeff King wrote:\n>\n>> -- >8 --\n>> delay \"git -p\" page spawning until command runtime\n>\n> Hrmph. Bad timing. :)\n>\n> Your patch is much nicer, though, so please ignore mine.\n\nIt may look nicer, but I do not know if it is correct, though.  I do not\ndo much \"work tree\" stuff, and would really appreciate testing by people\nwho are more involved in that part of the system.\n"},{"id":"63166","messageId":"fcaeb9bf0712140558p37eb3387h7c4d3177473e6fcd@mail.gmail.com","threadId":"11058","inReplyTo":"7vmysexdvw.fsf@gitster.siamese.dyndns.org","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Nguyen Thai Ngoc Duy","fromEmail":"pclouds@gmail.com","sentAt":"2007-12-14T13:58:52Z","receivedAt":"2007-12-14T13:58:52Z","isPatch":false,"sender":{"key":"pclouds@gmail.com","avatar":"https://avatars.githubusercontent.com/u/720?v=4"},"body":"On Dec 14, 2007 8:29 AM, Junio C Hamano <gitster@pobox.com> wrote:\n> If you have a bare repository and try this there:\n>\n>         $ PAGER=head git show HEAD:gcc/ChangeLog\n>\n> it works as expected, but if you explicitly ask for pagination, like\n> this:\n>\n>         $ PAGER=head git -p show HEAD:gcc/ChangeLog\n>\n> you would get a very funky error message:\n>\n>         fatal: ambiguous argument 'HEAD:gcc/ChangeLog': unknown revision or path not in the working tree.\n>         Use '--' to separate paths from revisions\n>\n> as if we are working with a repository with working tree.\n>\n> I originally noticed this with ls-tree.  The symptom is a bit different:\n>\n>         $ git -p ls-tree HEAD\n>         fatal: Not a valid object name HEAD\n>\n>\n>\n> I _think_ what is happening is that setup_pager() tries to run\n> git_config(), which runs setup(), and then RUN_SETUP set for \"ls-tree\"\n> (or \"show\") internal command runs setup again.  HEAD is given to\n> resolve_ref() and git_path(\"%s\", ref) makes it to \".git/HEAD\", even\n> though in a bare repository git_dir should be set to \".\", and of course\n> we cannot find such a path in the git directory.\n\nYou meant setup_git_directory() or setup_git_env()? If find that\nsetup_git_env() is called too soon so it caches wrong git_dir and\nfriends if you setup_pager().\n\nAnother option (BTW I think your patch is fine) is to call\nsetup_git_env one more time to refresh its cache.\n-- \nDuy\n"},{"id":"63194","messageId":"Pine.LNX.4.64.0712141943280.27959@racer.site","threadId":"11058","inReplyTo":"7vmysexdvw.fsf@gitster.siamese.dyndns.org","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-12-14T19:44:10Z","receivedAt":"2007-12-14T19:44:10Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Thu, 13 Dec 2007, Junio C Hamano wrote:\n\n> If you have a bare repository and try this there:\n> \n> \t$ PAGER=head git show HEAD:gcc/ChangeLog\n> \n> it works as expected, but if you explicitly ask for pagination, like\n> this:\n> \n> \t$ PAGER=head git -p show HEAD:gcc/ChangeLog\n\nI have no time left to work on git for a few days, so I cannot even review \nyour patch.  But Jeff's patch being smaller, I could, and AFAICT it solves \nthe problem.\n\nCiao,\nDscho\n"},{"id":"63199","messageId":"7vejdpqbbh.fsf@gitster.siamese.dyndns.org","threadId":"11058","inReplyTo":"Pine.LNX.4.64.0712141943280.27959@racer.site","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2007-12-14T20:18:58Z","receivedAt":"2007-12-14T20:18:58Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n\n> I have no time left to work on git for a few days, so I cannot even review \n> your patch.  But Jeff's patch being smaller, I could, and AFAICT it solves \n> the problem.\n\nWe have more than a few days ;-) Hope you are feeling better now.\n\nYou got familialized yourself with the work-tree part because the\ninitial round was so broken and you had to step in during the last round\n(unfortuantely ;-), and Nguyễn also is familiar with that part of the\ncode.  It would be nice if we can have a proper fix that is not papering\nover deeper breakage.\n"},{"id":"63205","messageId":"Pine.LNX.4.64.0712142036290.27959@racer.site","threadId":"11058","inReplyTo":"7vejdpqbbh.fsf@gitster.siamese.dyndns.org","subject":"Re: [Funky] \"git -p cmd\" inside a bare repository","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2007-12-14T20:37:15Z","receivedAt":"2007-12-14T20:37:15Z","isPatch":false,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Fri, 14 Dec 2007, Junio C Hamano wrote:\n\n> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:\n> \n> > I have no time left to work on git for a few days, so I cannot even \n> > review your patch.  But Jeff's patch being smaller, I could, and \n> > AFAICT it solves the problem.\n> \n> We have more than a few days ;-) Hope you are feeling better now.\n> \n> You got familialized yourself with the work-tree part because the \n> initial round was so broken and you had to step in during the last round \n> (unfortuantely ;-), and Nguyễn also is familiar with that part of the \n> code.  It would be nice if we can have a proper fix that is not papering \n> over deeper breakage.\n\nLike always, you are correct.\n\nWill look into it over the weekend (although I will only be able to report \nback on Monday, due to the wonderful administrators who broke my internet \nconnection at home).\n\nCiao,\nDscho\n"}]}