{"thread":{"id":"8846","subject":"[PATCH] gitweb: prefer git_get_project_owner() over get_file_owner()","startedAt":"2007-07-03T22:11:23Z","lastAt":"2007-07-07T19:05:18Z","messageCount":3,"participants":["Miklos Vajna","Junio C Hamano","Luben Tuikov"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"46418","messageId":"20070703221122.GI32766@genesis.frugalware.org","threadId":"8846","inReplyTo":"11834866911868-git-send-email-vmiklos@frugalware.org","subject":"[PATCH] gitweb: prefer git_get_project_owner() over get_file_owner()","fromName":"Miklos Vajna","fromEmail":"vmiklos@frugalware.org","sentAt":"2007-07-03T22:11:23Z","receivedAt":"2007-07-03T22:11:23Z","isPatch":true,"sender":{"key":"vmiklos@frugalware.org","avatar":"https://gravatar.com/avatar/401c1cbbb3a5d13e650c691a2c71d6fd0b80df1a01bc74d9f1972675dd58f2bd?d=mp&s=160"},"body":"This way if $projects_list exists, it'll be used, otherwise get_file_owner()\nwill be used as before.\n\nSigned-off-by: Miklos Vajna <vmiklos@frugalware.org>\n---\n\nSorry for sending it again, even if sending it to myself first, the long\ndescription was left out somehow.\n\nAlso it seems that i had some problem with git-send-email, my bad.\n\n gitweb/gitweb.perl |    4 ++--\n 1 files changed, 2 insertions(+), 2 deletions(-)\n\ndiff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\nindex dbfb044..6201b90 100755\n--- a/gitweb/gitweb.perl\n+++ b/gitweb/gitweb.perl\n@@ -3166,7 +3166,7 @@ sub git_project_list_body {\n \t\t\t$pr->{'descr'} = chop_str($descr, 25, 5);\n \t\t}\n \t\tif (!defined $pr->{'owner'}) {\n-\t\t\t$pr->{'owner'} = get_file_owner(\"$projectroot/$pr->{'path'}\") || \"\";\n+\t\t\t$pr->{'owner'} = git_get_project_owner(\"$pr->{'path'}\") || \"\";\n \t\t}\n \t\tif ($check_forks) {\n \t\t\tmy $pname = $pr->{'path'};\n@@ -3590,7 +3590,7 @@ sub git_project_index {\n \n \tforeach my $pr (@projects) {\n \t\tif (!exists $pr->{'owner'}) {\n-\t\t\t$pr->{'owner'} = get_file_owner(\"$projectroot/$pr->{'path'}\");\n+\t\t\t$pr->{'owner'} = git_get_project_owner(\"$pr->{'path'}\");\n \t\t}\n \n \t\tmy ($path, $owner) = ($pr->{'path'}, $pr->{'owner'});\n-- \n1.5.2.2\n"},{"id":"46439","messageId":"7vzm2ckb3h.fsf@assigned-by-dhcp.cox.net","threadId":"8846","inReplyTo":"20070703221122.GI32766@genesis.frugalware.org","subject":"Re: [PATCH] gitweb: prefer git_get_project_owner() over get_file_owner()","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2007-07-04T05:10:42Z","receivedAt":"2007-07-04T05:10:42Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Miklos Vajna <vmiklos@frugalware.org> writes:\n\n> This way if $projects_list exists, it'll be used, otherwise get_file_owner()\n> will be used as before.\n>\n> Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>\n\nThe patch looks good to me.\n\nHOWEVER.\n\nIt strikes me that repeated call to git_get_project_owner()\nwould be way too inefficient.  Not caller's fault.\n\nHow about doing something like this on top of your patch?\n\n gitweb/gitweb.perl |   28 ++++++++++++++++++++--------\n 1 files changed, 20 insertions(+), 8 deletions(-)\n\ndiff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\nindex dbfb044..f114585 100755\n--- a/gitweb/gitweb.perl\n+++ b/gitweb/gitweb.perl\n@@ -1465,12 +1465,12 @@ sub git_get_projects_list {\n \treturn @list;\n }\n \n-sub git_get_project_owner {\n-\tmy $project = shift;\n-\tmy $owner;\n+our $gitweb_project_owner = undef;\n+sub git_get_project_list_from_file {\n \n-\treturn undef unless $project;\n+\treturn if (defined $gitweb_project_owner);\n \n+\t$gitweb_project_owner = {};\n \t# read from file (url-encoded):\n \t# 'git%2Fgit.git Linus+Torvalds'\n \t# 'libs%2Fklibc%2Fklibc.git H.+Peter+Anvin'\n@@ -1482,13 +1482,25 @@ sub git_get_project_owner {\n \t\t\tmy ($pr, $ow) = split ' ', $line;\n \t\t\t$pr = unescape($pr);\n \t\t\t$ow = unescape($ow);\n-\t\t\tif ($pr eq $project) {\n-\t\t\t\t$owner = to_utf8($ow);\n-\t\t\t\tlast;\n-\t\t\t}\n+\t\t\t$gitweb_project_owner->{$project} = to_utf8($ow);\n \t\t}\n \t\tclose $fd;\n \t}\n+}\n+\n+sub git_get_project_owner {\n+\tmy $project = shift;\n+\tmy $owner;\n+\n+\treturn undef unless $project;\n+\n+\tif (!defined $gitweb_project_owner) {\n+\t\tgit_get_project_list_from_file();\n+\t}\n+\n+\tif (exists $gitweb_project_owner->{$project}) {\n+\t\t$owner = $gitweb_project_owner->{$project};\n+\t}\n \tif (!defined $owner) {\n \t\t$owner = get_file_owner(\"$projectroot/$project\");\n \t}\n"},{"id":"46707","messageId":"260120.95921.qm@web31806.mail.mud.yahoo.com","threadId":"8846","inReplyTo":"7vzm2ckb3h.fsf@assigned-by-dhcp.cox.net","subject":"Re: [PATCH] gitweb: prefer git_get_project_owner() over get_file_owner()","fromName":"Luben Tuikov","fromEmail":"ltuikov@yahoo.com","sentAt":"2007-07-07T19:05:18Z","receivedAt":"2007-07-07T19:05:18Z","isPatch":true,"sender":{"key":"ltuikov@yahoo.com","avatar":null},"body":"--- Junio C Hamano <gitster@pobox.com> wrote:\n> Miklos Vajna <vmiklos@frugalware.org> writes:\n> \n> > This way if $projects_list exists, it'll be used, otherwise get_file_owner()\n> > will be used as before.\n> >\n> > Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>\n> \n> The patch looks good to me.\n> \n> HOWEVER.\n> \n> It strikes me that repeated call to git_get_project_owner()\n> would be way too inefficient.  Not caller's fault.\n> \n> How about doing something like this on top of your patch?\n\nYes, this sounds sensible. ACK.\n\n    Luben\n\n\n> \n>  gitweb/gitweb.perl |   28 ++++++++++++++++++++--------\n>  1 files changed, 20 insertions(+), 8 deletions(-)\n> \n> diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl\n> index dbfb044..f114585 100755\n> --- a/gitweb/gitweb.perl\n> +++ b/gitweb/gitweb.perl\n> @@ -1465,12 +1465,12 @@ sub git_get_projects_list {\n>  \treturn @list;\n>  }\n>  \n> -sub git_get_project_owner {\n> -\tmy $project = shift;\n> -\tmy $owner;\n> +our $gitweb_project_owner = undef;\n> +sub git_get_project_list_from_file {\n>  \n> -\treturn undef unless $project;\n> +\treturn if (defined $gitweb_project_owner);\n>  \n> +\t$gitweb_project_owner = {};\n>  \t# read from file (url-encoded):\n>  \t# 'git%2Fgit.git Linus+Torvalds'\n>  \t# 'libs%2Fklibc%2Fklibc.git H.+Peter+Anvin'\n> @@ -1482,13 +1482,25 @@ sub git_get_project_owner {\n>  \t\t\tmy ($pr, $ow) = split ' ', $line;\n>  \t\t\t$pr = unescape($pr);\n>  \t\t\t$ow = unescape($ow);\n> -\t\t\tif ($pr eq $project) {\n> -\t\t\t\t$owner = to_utf8($ow);\n> -\t\t\t\tlast;\n> -\t\t\t}\n> +\t\t\t$gitweb_project_owner->{$project} = to_utf8($ow);\n>  \t\t}\n>  \t\tclose $fd;\n>  \t}\n> +}\n> +\n> +sub git_get_project_owner {\n> +\tmy $project = shift;\n> +\tmy $owner;\n> +\n> +\treturn undef unless $project;\n> +\n> +\tif (!defined $gitweb_project_owner) {\n> +\t\tgit_get_project_list_from_file();\n> +\t}\n> +\n> +\tif (exists $gitweb_project_owner->{$project}) {\n> +\t\t$owner = $gitweb_project_owner->{$project};\n> +\t}\n>  \tif (!defined $owner) {\n>  \t\t$owner = get_file_owner(\"$projectroot/$project\");\n>  \t}\n> \n> \n"}]}