{"thread":{"id":"34023","subject":"[PATCH] git-remote-mediawiki: use git.pm functions for credentials","startedAt":"2013-06-04T11:11:32Z","lastAt":"2013-06-05T15:55:35Z","messageCount":4,"participants":["benoit.person@gmail.com","Junio C Hamano","benoit.person@ensimag.fr","Jeff King"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"219345","messageId":"1370344292-7088-1-git-send-email-benoit.person@ensimag.fr","threadId":"34023","inReplyTo":null,"subject":"[PATCH] git-remote-mediawiki: use git.pm functions for credentials","fromName":"","fromEmail":"benoit.person@gmail.com","sentAt":"2013-06-04T11:11:32Z","receivedAt":"2013-06-04T11:11:32Z","isPatch":true,"sender":{"key":"benoit.person@gmail.com","avatar":"https://avatars.githubusercontent.com/u/1145270?v=4"},"body":"From: Benoit Person <benoit.person@ensimag.fr>\n\nIn 52dce6d, a new credential function was added to git.pm, based on\ngit-remote-mediawiki's functions. The logical follow-up is to use\nthose functions in git-remote-mediawiki.\n\nSigned-off-by: Benoit Person <benoit.person@ensimag.fr>\nSigned-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>\n---\n contrib/mw-to-git/git-remote-mediawiki.perl | 66 ++++-------------------------\n 1 file changed, 9 insertions(+), 57 deletions(-)\n\ndiff --git a/contrib/mw-to-git/git-remote-mediawiki.perl b/contrib/mw-to-git/git-remote-mediawiki.perl\nindex 9c14c1f..9fb281e 100755\n--- a/contrib/mw-to-git/git-remote-mediawiki.perl\n+++ b/contrib/mw-to-git/git-remote-mediawiki.perl\n@@ -13,6 +13,7 @@\n \n use strict;\n use MediaWiki::API;\n+use Git;\n use DateTime::Format::ISO8601;\n \n # By default, use UTF-8 to communicate with Git and the user\n@@ -156,57 +157,6 @@ while (<STDIN>) {\n \n ########################## Functions ##############################\n \n-## credential API management (generic functions)\n-\n-sub credential_read {\n-\tmy %credential;\n-\tmy $reader = shift;\n-\tmy $op = shift;\n-\twhile (<$reader>) {\n-\t\tmy ($key, $value) = /([^=]*)=(.*)/;\n-\t\tif (not defined $key) {\n-\t\t\tdie \"ERROR receiving response from git credential $op:\\n$_\\n\";\n-\t\t}\n-\t\t$credential{$key} = $value;\n-\t}\n-\treturn %credential;\n-}\n-\n-sub credential_write {\n-\tmy $credential = shift;\n-\tmy $writer = shift;\n-\t# url overwrites other fields, so it must come first\n-\tprint $writer \"url=$credential->{url}\\n\" if exists $credential->{url};\n-\twhile (my ($key, $value) = each(%$credential) ) {\n-\t\tif (length $value && $key ne 'url') {\n-\t\t\tprint $writer \"$key=$value\\n\";\n-\t\t}\n-\t}\n-}\n-\n-sub credential_run {\n-\tmy $op = shift;\n-\tmy $credential = shift;\n-\tmy $pid = open2(my $reader, my $writer, \"git credential $op\");\n-\tcredential_write($credential, $writer);\n-\tprint $writer \"\\n\";\n-\tclose($writer);\n-\n-\tif ($op eq \"fill\") {\n-\t\t%$credential = credential_read($reader, $op);\n-\t} else {\n-\t\tif (<$reader>) {\n-\t\t\tdie \"ERROR while running git credential $op:\\n$_\";\n-\t\t}\n-\t}\n-\tclose($reader);\n-\twaitpid($pid, 0);\n-\tmy $child_exit_status = $? >> 8;\n-\tif ($child_exit_status != 0) {\n-\t\tdie \"'git credential $op' failed with code $child_exit_status.\";\n-\t}\n-}\n-\n # MediaWiki API instance, created lazily.\n my $mediawiki;\n \n@@ -217,22 +167,24 @@ sub mw_connect_maybe {\n \t$mediawiki = MediaWiki::API->new;\n \t$mediawiki->{config}->{api_url} = \"$url/api.php\";\n \tif ($wiki_login) {\n-\t\tmy %credential = (url => $url);\n-\t\t$credential{username} = $wiki_login;\n-\t\t$credential{password} = $wiki_passwd;\n-\t\tcredential_run(\"fill\", \\%credential);\n+\t\tmy %credential = (\n+\t\t\t'url' => $url,\n+\t\t\t'username' => $wiki_login,\n+\t\t\t'password' => $wiki_passwd\n+\t\t);\n+\t\tGit::credential \\%credential;\n \t\tmy $request = {lgname => $credential{username},\n \t\t\t       lgpassword => $credential{password},\n \t\t\t       lgdomain => $wiki_domain};\n \t\tif ($mediawiki->login($request)) {\n-\t\t\tcredential_run(\"approve\", \\%credential);\n+\t\t\tGit::credential \\%credential, 'approve';\n \t\t\tprint STDERR \"Logged in mediawiki user \\\"$credential{username}\\\".\\n\";\n \t\t} else {\n \t\t\tprint STDERR \"Failed to log in mediawiki user \\\"$credential{username}\\\" on $url\\n\";\n \t\t\tprint STDERR \"  (error \" .\n \t\t\t\t$mediawiki->{error}->{code} . ': ' .\n \t\t\t\t$mediawiki->{error}->{details} . \")\\n\";\n-\t\t\tcredential_run(\"reject\", \\%credential);\n+\t\t\tGit::credential \\%credential, 'reject';\n \t\t\texit 1;\n \t\t}\n \t}\n-- \n1.8.3.rc3.7.gc2f33ed.dirty\n"},{"id":"219394","messageId":"7vr4gh7m24.fsf@alter.siamese.dyndns.org","threadId":"34023","inReplyTo":"1370344292-7088-1-git-send-email-benoit.person@ensimag.fr","subject":"Re: [PATCH] git-remote-mediawiki: use git.pm functions for credentials","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2013-06-04T18:44:35Z","receivedAt":"2013-06-04T18:44:35Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"benoit.person@gmail.com writes:\n\n> From: Benoit Person <benoit.person@ensimag.fr>\n>\n> In 52dce6d, a new credential function was added to git.pm, based on\n> git-remote-mediawiki's functions. The logical follow-up is to use\n> those functions in git-remote-mediawiki.\n>\n> Signed-off-by: Benoit Person <benoit.person@ensimag.fr>\n> Signed-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>\n> ---\n>  contrib/mw-to-git/git-remote-mediawiki.perl | 66 ++++-------------------------\n>  1 file changed, 9 insertions(+), 57 deletions(-)\n\nWith s/git.pm/Git.pm/, the above looks perfect.\n\n> @@ -217,22 +167,24 @@ sub mw_connect_maybe {\n>  \t$mediawiki = MediaWiki::API->new;\n>  \t$mediawiki->{config}->{api_url} = \"$url/api.php\";\n>  \tif ($wiki_login) {\n> -\t\tmy %credential = (url => $url);\n> -\t\t$credential{username} = $wiki_login;\n> -\t\t$credential{password} = $wiki_passwd;\n> -\t\tcredential_run(\"fill\", \\%credential);\n> +\t\tmy %credential = (\n> +\t\t\t'url' => $url,\n> +\t\t\t'username' => $wiki_login,\n> +\t\t\t'password' => $wiki_passwd\n> +\t\t);\n> +\t\tGit::credential \\%credential;\n>  \t\tmy $request = {lgname => $credential{username},\n>  \t\t\t       lgpassword => $credential{password},\n>  \t\t\t       lgdomain => $wiki_domain};\n>  \t\tif ($mediawiki->login($request)) {\n> -\t\t\tcredential_run(\"approve\", \\%credential);\n> +\t\t\tGit::credential \\%credential, 'approve';\n\nThe example in perl/Git.pm for =item credential shows the subroutine\ncall without surrounding parentheses, and that is perfectly valid\nPerl, but given that the prevalent style of subroutine calls made in\nthis file seems to be with them, i.e. subr(arg, arg), you might want\nto consider being consistent here (and in the implicit 'fill' call\nseveral lines above, and 'reject' call below).\n\nThanks.\n\n>  \t\t\tprint STDERR \"Logged in mediawiki user \\\"$credential{username}\\\".\\n\";\n>  \t\t} else {\n>  \t\t\tprint STDERR \"Failed to log in mediawiki user \\\"$credential{username}\\\" on $url\\n\";\n>  \t\t\tprint STDERR \"  (error \" .\n>  \t\t\t\t$mediawiki->{error}->{code} . ': ' .\n>  \t\t\t\t$mediawiki->{error}->{details} . \")\\n\";\n> -\t\t\tcredential_run(\"reject\", \\%credential);\n> +\t\t\tGit::credential \\%credential, 'reject';\n>  \t\t\texit 1;\n>  \t\t}\n>  \t}\n"},{"id":"219448","messageId":"1370429880-12696-1-git-send-email-benoit.person@ensimag.fr","threadId":"34023","inReplyTo":"7vr4gh7m24.fsf@alter.siamese.dyndns.org","subject":"[PATCH] git-remote-mediawiki: use Git.pm functions for credentials","fromName":"","fromEmail":"benoit.person@ensimag.fr","sentAt":"2013-06-05T10:58:00Z","receivedAt":"2013-06-05T10:58:00Z","isPatch":true,"sender":{"key":"benoit.person@ensimag.fr","avatar":null},"body":"From: Benoit Person <benoit.person@ensimag.fr>\n\nIn 52dce6d, a new credential function was added to Git.pm, based on\ngit-remote-mediawiki's functions. The logical follow-up is to use\nthose functions in git-remote-mediawiki.\n\nSigned-off-by: Benoit Person <benoit.person@ensimag.fr>\nSigned-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>\n---\n contrib/mw-to-git/git-remote-mediawiki.perl | 66 ++++-------------------------\n 1 file changed, 9 insertions(+), 57 deletions(-)\n\ndiff --git a/contrib/mw-to-git/git-remote-mediawiki.perl b/contrib/mw-to-git/git-remote-mediawiki.perl\nindex 9c14c1f..6672e4c 100755\n--- a/contrib/mw-to-git/git-remote-mediawiki.perl\n+++ b/contrib/mw-to-git/git-remote-mediawiki.perl\n@@ -13,6 +13,7 @@\n \n use strict;\n use MediaWiki::API;\n+use Git;\n use DateTime::Format::ISO8601;\n \n # By default, use UTF-8 to communicate with Git and the user\n@@ -156,57 +157,6 @@ while (<STDIN>) {\n \n ########################## Functions ##############################\n \n-## credential API management (generic functions)\n-\n-sub credential_read {\n-\tmy %credential;\n-\tmy $reader = shift;\n-\tmy $op = shift;\n-\twhile (<$reader>) {\n-\t\tmy ($key, $value) = /([^=]*)=(.*)/;\n-\t\tif (not defined $key) {\n-\t\t\tdie \"ERROR receiving response from git credential $op:\\n$_\\n\";\n-\t\t}\n-\t\t$credential{$key} = $value;\n-\t}\n-\treturn %credential;\n-}\n-\n-sub credential_write {\n-\tmy $credential = shift;\n-\tmy $writer = shift;\n-\t# url overwrites other fields, so it must come first\n-\tprint $writer \"url=$credential->{url}\\n\" if exists $credential->{url};\n-\twhile (my ($key, $value) = each(%$credential) ) {\n-\t\tif (length $value && $key ne 'url') {\n-\t\t\tprint $writer \"$key=$value\\n\";\n-\t\t}\n-\t}\n-}\n-\n-sub credential_run {\n-\tmy $op = shift;\n-\tmy $credential = shift;\n-\tmy $pid = open2(my $reader, my $writer, \"git credential $op\");\n-\tcredential_write($credential, $writer);\n-\tprint $writer \"\\n\";\n-\tclose($writer);\n-\n-\tif ($op eq \"fill\") {\n-\t\t%$credential = credential_read($reader, $op);\n-\t} else {\n-\t\tif (<$reader>) {\n-\t\t\tdie \"ERROR while running git credential $op:\\n$_\";\n-\t\t}\n-\t}\n-\tclose($reader);\n-\twaitpid($pid, 0);\n-\tmy $child_exit_status = $? >> 8;\n-\tif ($child_exit_status != 0) {\n-\t\tdie \"'git credential $op' failed with code $child_exit_status.\";\n-\t}\n-}\n-\n # MediaWiki API instance, created lazily.\n my $mediawiki;\n \n@@ -217,22 +167,24 @@ sub mw_connect_maybe {\n \t$mediawiki = MediaWiki::API->new;\n \t$mediawiki->{config}->{api_url} = \"$url/api.php\";\n \tif ($wiki_login) {\n-\t\tmy %credential = (url => $url);\n-\t\t$credential{username} = $wiki_login;\n-\t\t$credential{password} = $wiki_passwd;\n-\t\tcredential_run(\"fill\", \\%credential);\n+\t\tmy %credential = (\n+\t\t\t'url' => $url,\n+\t\t\t'username' => $wiki_login,\n+\t\t\t'password' => $wiki_passwd\n+\t\t);\n+\t\tGit::credential(\\%credential);\n \t\tmy $request = {lgname => $credential{username},\n \t\t\t       lgpassword => $credential{password},\n \t\t\t       lgdomain => $wiki_domain};\n \t\tif ($mediawiki->login($request)) {\n-\t\t\tcredential_run(\"approve\", \\%credential);\n+\t\t\tGit::credential(\\%credential, 'approve');\n \t\t\tprint STDERR \"Logged in mediawiki user \\\"$credential{username}\\\".\\n\";\n \t\t} else {\n \t\t\tprint STDERR \"Failed to log in mediawiki user \\\"$credential{username}\\\" on $url\\n\";\n \t\t\tprint STDERR \"  (error \" .\n \t\t\t\t$mediawiki->{error}->{code} . ': ' .\n \t\t\t\t$mediawiki->{error}->{details} . \")\\n\";\n-\t\t\tcredential_run(\"reject\", \\%credential);\n+\t\t\tGit::credential(\\%credential, 'reject');\n \t\t\texit 1;\n \t\t}\n \t}\n-- \n1.8.3.rc3.7.gc2f33ed.dirty\n"},{"id":"219458","messageId":"20130605155534.GC8664@sigill.intra.peff.net","threadId":"34023","inReplyTo":"1370429880-12696-1-git-send-email-benoit.person@ensimag.fr","subject":"Re: [PATCH] git-remote-mediawiki: use Git.pm functions for credentials","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2013-06-05T15:55:35Z","receivedAt":"2013-06-05T15:55:35Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Wed, Jun 05, 2013 at 12:58:00PM +0200, benoit.person@ensimag.fr wrote:\n\n> From: Benoit Person <benoit.person@ensimag.fr>\n> \n> In 52dce6d, a new credential function was added to Git.pm, based on\n> git-remote-mediawiki's functions. The logical follow-up is to use\n> those functions in git-remote-mediawiki.\n> \n> Signed-off-by: Benoit Person <benoit.person@ensimag.fr>\n> Signed-off-by: Matthieu Moy <matthieu.moy@grenoble-inp.fr>\n\nThanks, this looks correct to me.\n\n-Peff\n"}]}