{"thread":{"id":"14922","subject":"[PATCH] git-submodule - Add 'foreach' subcommand","startedAt":"2008-08-10T16:44:07Z","lastAt":"2008-08-12T01:45:52Z","messageCount":10,"participants":["Mark Levedahl","Johan Herland","Junio C Hamano","Balazs Nagy","Johannes Schindelin","Matthias Kestenholz","Petr Baudis"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"86687","messageId":"1218386647-2348-1-git-send-email-mlevedahl@gmail.com","threadId":"14922","inReplyTo":null,"subject":"[PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Mark Levedahl","fromEmail":"mlevedahl@gmail.com","sentAt":"2008-08-10T16:44:07Z","receivedAt":"2008-08-10T16:44:07Z","isPatch":true,"sender":{"key":"mdl123@verizon.net","avatar":"https://avatars.githubusercontent.com/u/5302462?v=4"},"body":"submodule foreach <command-list> will execute the list of commands in\neach currently checked out submodule directory. The list of commands\nis arbitrary as long as it is acceptable to sh. The variables '$path'\nand '$sha1' are availble to the command-list, defining the submodule\npath relative to the superproject and the submodules's commitID as\nrecorded in the superproject (this may be different than HEAD in the\nsubmodule).\n\nThis utility is inspired by a number of threads on the mailing list\nlooking for ways to better integrate submodules in a tree and work\nwith them as a unit. This could include fetching a new branch in each\nfrom a given source, or possibly checking out a given named branch in\neach. Currently, there is no consensus as to what additional commands\nshould be implemented in the porcelain, requiring all users whose needs\nexceed that of git-submodule to do their own scripting. The foreach\ncommand is intended to support such scripting, and in particular does\nno error checking and produces no output, thus allowing end users\ncomplete control over any information printed out and over what\nconstitutes an error.\n\nSigned-off-by: Mark Levedahl <mlevedahl@gmail.com>\n---\n Documentation/git-submodule.txt |   12 ++++++++++++\n git-submodule.sh                |   22 ++++++++++++++++++++--\n 2 files changed, 32 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt\nindex bf33b0c..5b52f35 100644\n--- a/Documentation/git-submodule.txt\n+++ b/Documentation/git-submodule.txt\n@@ -14,6 +14,7 @@ SYNOPSIS\n 'git submodule' [--quiet] init [--] [<path>...]\n 'git submodule' [--quiet] update [--init] [--] [<path>...]\n 'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]\n+'git submodule' foreach <command-list>\n \n \n DESCRIPTION\n@@ -123,6 +124,17 @@ summary::\n \tin the submodule between the given super project commit and the\n \tindex or working tree (switched by --cached) are shown.\n \n+foreach::\n+\tExecutes an arbitrary list of commands in each checked out submodule.\n+\t$path is the name of the submodule directory relative to the\n+\tsuperproject, and $sha1 is the commit as recorded in the superproject.\n+\tAnd submodules defined in the superproject but not checked out are\n+\tignored by this command, and an empty command-list provides no output.\n++\n+As an example, \"git submodule foreach 'echo $path `git rev-parse HEAD`' will\n+show the path and currently checked out commit for each submodule.\n+\n+\n OPTIONS\n -------\n -q::\ndiff --git a/git-submodule.sh b/git-submodule.sh\nindex b40f876..abbc7bb 100755\n--- a/git-submodule.sh\n+++ b/git-submodule.sh\n@@ -6,7 +6,7 @@\n \n USAGE=\"[--quiet] [--cached] \\\n [add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \\\n-[--] [<path>...]\"\n+[--] [<path>...]|[foreach <command-list>]\"\n OPTIONS_SPEC=\n . git-sh-setup\n require_work_tree\n@@ -199,6 +199,24 @@ cmd_add()\n }\n \n #\n+# Execute an arbitrary command sequence in each checked out\n+# submodule\n+#\n+# $@ = command to execute\n+#\n+cmd_foreach()\n+{\n+\tgit ls-files --stage | grep '^160000 ' |\n+\twhile read mode sha1 stage path\n+\tdo\n+\t\tif test -e \"$path\"/.git\n+\t\tthen\n+\t\t\t(cd \"$path\" && eval \"$@\")\n+\t\tfi\n+\tdone\n+}\n+\n+#\n # Register submodules in .git/config\n #\n # $@ = requested paths (default to all)\n@@ -583,7 +601,7 @@ cmd_status()\n while test $# != 0 && test -z \"$command\"\n do\n \tcase \"$1\" in\n-\tadd | init | update | status | summary)\n+\tadd | foreach | init | update | status | summary)\n \t\tcommand=$1\n \t\t;;\n \t-q|--quiet)\n-- \n1.6.0.rc2.44.g974eb\n"},{"id":"86724","messageId":"200808110022.33696.johan@herland.net","threadId":"14922","inReplyTo":"1218386647-2348-1-git-send-email-mlevedahl@gmail.com","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Johan Herland","fromEmail":"johan@herland.net","sentAt":"2008-08-10T22:22:33Z","receivedAt":"2008-08-10T22:22:33Z","isPatch":true,"sender":{"key":"johan@herland.net","avatar":"https://avatars.githubusercontent.com/u/547031?v=4"},"body":"On Sunday 10 August 2008, Mark Levedahl wrote:\n> submodule foreach <command-list> will execute the list of commands in\n> each currently checked out submodule directory. The list of commands\n> is arbitrary as long as it is acceptable to sh. The variables '$path'\n> and '$sha1' are availble to the command-list, defining the submodule\n> path relative to the superproject and the submodules's commitID as\n> recorded in the superproject (this may be different than HEAD in the\n> submodule).\n>\n> This utility is inspired by a number of threads on the mailing list\n> looking for ways to better integrate submodules in a tree and work\n> with them as a unit. This could include fetching a new branch in each\n> from a given source, or possibly checking out a given named branch in\n> each. Currently, there is no consensus as to what additional commands\n> should be implemented in the porcelain, requiring all users whose needs\n> exceed that of git-submodule to do their own scripting. The foreach\n> command is intended to support such scripting, and in particular does\n> no error checking and produces no output, thus allowing end users\n> complete control over any information printed out and over what\n> constitutes an error.\n>\n> Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>\n\nHi,\n\nI was about to send an equivalent patch, but you beat me to it. Yours is \nshorter and more elegant as well, so thanks for saving me the \nembarrasment ;)\n\nSo, FWIW:\n\nLiked-by: Johan Herland <johan@herland.net>\n\n-- \nJohan Herland, <johan@herland.net>\nwww.herland.net\n"},{"id":"86728","messageId":"7vsktczebg.fsf@gitster.siamese.dyndns.org","threadId":"14922","inReplyTo":"1218386647-2348-1-git-send-email-mlevedahl@gmail.com","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-08-10T22:37:55Z","receivedAt":"2008-08-10T22:37:55Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Mark Levedahl <mlevedahl@gmail.com> writes:\n\n> This utility is inspired by a number of threads on the mailing list\n> looking for ways to better integrate submodules in a tree and work\n> with them as a unit.\n\nThanks for keeping the topic going\n\n> +foreach::\n> +\tExecutes an arbitrary list of commands in each checked out submodule.\n> +\t$path is the name of the submodule directory relative to the\n> +\tsuperproject, and $sha1 is the commit as recorded in the superproject.\n> +\tAnd submodules defined in the superproject but not checked out are\n> +\tignored by this command, and an empty command-list provides no output.\n> ++\n> +As an example, \"git submodule foreach 'echo $path `git rev-parse HEAD`' will\n> +show the path and currently checked out commit for each submodule.\n\nI think this is a sensible building block to have.\n\n> +cmd_foreach()\n> +{\n> +\tgit ls-files --stage | grep '^160000 ' |\n> +\twhile read mode sha1 stage path\n> +\tdo\n> +\t\tif test -e \"$path\"/.git\n> +\t\tthen\n> +\t\t\t(cd \"$path\" && eval \"$@\")\n> +\t\tfi\n> +\tdone\n> +}\n\nI suspect we may want to stop the loop upon failure from eval (any user\nthat wants to run command in all submodules no matter what could add '||:'\nto the cmd list), but other than that this is a simple enough and good\naddition.\n"},{"id":"86732","messageId":"1218409804-1556-1-git-send-email-mlevedahl@gmail.com","threadId":"14922","inReplyTo":"7vsktczebg.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Mark Levedahl","fromEmail":"mlevedahl@gmail.com","sentAt":"2008-08-10T23:10:04Z","receivedAt":"2008-08-10T23:10:04Z","isPatch":true,"sender":{"key":"mdl123@verizon.net","avatar":"https://avatars.githubusercontent.com/u/5302462?v=4"},"body":"submodule foreach <command-list> will execute the list of commands in\neach currently checked out submodule directory. The list of commands\nis arbitrary as long as it is acceptable to sh. The variables '$path'\nand '$sha1' are availble to the command-list, defining the submodule\npath relative to the superproject and the submodules's commitID as\nrecorded in the superproject (this may be different than HEAD in the\nsubmodule).\n\nThis utility is inspired by a number of threads on the mailing list\nlooking for ways to better integrate submodules in a tree and work\nwith them as a unit. This could include fetching a new branch in each\nfrom a given source, or possibly checking out a given named branch in\neach. Currently, there is no consensus as to what additional commands\nshould be implemented in the porcelain, requiring all users whose needs\nexceed that of git-submodule to do their own scripting. The foreach\ncommand is intended to support such scripting, and in particular does\nno error checking and produces no output, thus allowing end users\ncomplete control over any information printed out and over what\nconstitutes an error. The processing does terminate if the command-list\nreturns an error, but processing can easily be forced for all\nsubmodules be terminating the list with ';true'.\n\nSigned-off-by: Mark Levedahl <mlevedahl@gmail.com>\n---\n Documentation/git-submodule.txt |   15 +++++++++++++++\n git-submodule.sh                |   23 +++++++++++++++++++++--\n 2 files changed, 36 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt\nindex bf33b0c..1e7d352 100644\n--- a/Documentation/git-submodule.txt\n+++ b/Documentation/git-submodule.txt\n@@ -14,6 +14,7 @@ SYNOPSIS\n 'git submodule' [--quiet] init [--] [<path>...]\n 'git submodule' [--quiet] update [--init] [--] [<path>...]\n 'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]\n+'git submodule' foreach <command-list>\n \n \n DESCRIPTION\n@@ -123,6 +124,20 @@ summary::\n \tin the submodule between the given super project commit and the\n \tindex or working tree (switched by --cached) are shown.\n \n+foreach::\n+\tExecutes an arbitrary list of commands in each checked out submodule.\n+\t$path is the name of the submodule directory relative to the\n+\tsuperproject, and $sha1 is the commit as recorded in the superproject.\n+\tAny submodules defined in the superproject but not checked out are\n+\tignored by this command, and an empty command-list provides no output.\n+\tA non-zero return from the command-list in any submodule causes\n+\tthe processing to terminate. This can be overridden by adding '; true'\n+\tto the end of the command list.\n++\n+As an example, \"git submodule foreach 'echo $path `git rev-parse HEAD`' will\n+show the path and currently checked out commit for each submodule.\n+\n+\n OPTIONS\n -------\n -q::\ndiff --git a/git-submodule.sh b/git-submodule.sh\nindex b40f876..39a19f0 100755\n--- a/git-submodule.sh\n+++ b/git-submodule.sh\n@@ -6,7 +6,7 @@\n \n USAGE=\"[--quiet] [--cached] \\\n [add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \\\n-[--] [<path>...]\"\n+[--] [<path>...]|[foreach <command-list>]\"\n OPTIONS_SPEC=\n . git-sh-setup\n require_work_tree\n@@ -199,6 +199,25 @@ cmd_add()\n }\n \n #\n+# Execute an arbitrary command sequence in each checked out\n+# submodule\n+#\n+# $@ = command to execute\n+#\n+cmd_foreach()\n+{\n+\tgit ls-files --stage | grep '^160000 ' |\n+\twhile read mode sha1 stage path\n+\tdo\n+\t\tif test -e \"$path\"/.git\n+\t\tthen\n+\t\t\t(cd \"$path\" && eval \"$@\") ||\n+\t\t\tdie \"Error detected evaluating commands in '$path'\"\n+\t\tfi\n+\tdone\n+}\n+\n+#\n # Register submodules in .git/config\n #\n # $@ = requested paths (default to all)\n@@ -583,7 +602,7 @@ cmd_status()\n while test $# != 0 && test -z \"$command\"\n do\n \tcase \"$1\" in\n-\tadd | init | update | status | summary)\n+\tadd | foreach | init | update | status | summary)\n \t\tcommand=$1\n \t\t;;\n \t-q|--quiet)\n-- \n1.6.0.rc2.44.g974eb\n"},{"id":"86749","messageId":"489FDC29.5090503@iksz.hu","threadId":"14922","inReplyTo":"1218409804-1556-1-git-send-email-mlevedahl@gmail.com","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Balazs Nagy","fromEmail":"js@iksz.hu","sentAt":"2008-08-11T06:28:57Z","receivedAt":"2008-08-11T06:28:57Z","isPatch":true,"sender":{"key":"js@iksz.hu","avatar":"https://gravatar.com/avatar/8e618db1f4a022c12a6f0cd5a9632663f61afd781108fdf32f2433589b1901b8?d=mp&s=160"},"body":"Hi,\n\nSorry for being a bit late, but what if we would have --all for all\nsubmodule commands instead of having another command?\n\nRgds,\n-- \n-jul-\n"},{"id":"86755","messageId":"alpine.DEB.1.00.0808111207070.24820@pacific.mpi-cbg.de.mpi-cbg.de","threadId":"14922","inReplyTo":"489FDC29.5090503@iksz.hu","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Johannes Schindelin","fromEmail":"johannes.schindelin@gmx.de","sentAt":"2008-08-11T10:08:15Z","receivedAt":"2008-08-11T10:08:15Z","isPatch":true,"sender":{"key":"johannes.schindelin@gmx.de","avatar":"https://avatars.githubusercontent.com/u/127790?v=4"},"body":"Hi,\n\nOn Mon, 11 Aug 2008, Balazs Nagy wrote:\n\n> Sorry for being a bit late, but what if we would have --all for all \n> submodule commands instead of having another command?\n\nand the foreach patch would go into which existing command, exactly?  \"git \n--all\"?  A new \"git foreach --all\"?\n\nJust kidding,\nDscho\n"},{"id":"86757","messageId":"1218449492.21750.2.camel@localhost","threadId":"14922","inReplyTo":"489FDC29.5090503@iksz.hu","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Matthias Kestenholz","fromEmail":"mk@spinlock.ch","sentAt":"2008-08-11T10:11:32Z","receivedAt":"2008-08-11T10:11:32Z","isPatch":true,"sender":{"key":"matthias@spinlock.ch","avatar":"https://gravatar.com/avatar/bc18f396e70163d09ab458a341b1decb7e8b6ee3aa2c0c954ec20162e67c4d46?d=mp&s=160"},"body":"On Mon, 2008-08-11 at 08:28 +0200, Balazs Nagy wrote:\n> Hi,\n> \n> Sorry for being a bit late, but what if we would have --all for all\n> submodule commands instead of having another command?\n> \n> Rgds,\n\nThis would not be very smart. The example in the documentation part of\nthe patch would be impossible only with --all switches (or, you'd need\nto duplicate all git commands in git-submodule instead of reusing them\nwith git submodule foreach)\n"},{"id":"86760","messageId":"20080811102344.GG32184@machine.or.cz","threadId":"14922","inReplyTo":"1218409804-1556-1-git-send-email-mlevedahl@gmail.com","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Petr Baudis","fromEmail":"pasky@suse.cz","sentAt":"2008-08-11T10:23:45Z","receivedAt":"2008-08-11T10:23:45Z","isPatch":true,"sender":{"key":"pasky@ucw.cz","avatar":"https://avatars.githubusercontent.com/u/18439?v=4"},"body":"  Hi,\n\nOn Sun, Aug 10, 2008 at 07:10:04PM -0400, Mark Levedahl wrote:\n> submodule foreach <command-list> will execute the list of commands in\n> each currently checked out submodule directory. The list of commands\n> is arbitrary as long as it is acceptable to sh. The variables '$path'\n> and '$sha1' are availble to the command-list, defining the submodule\n> path relative to the superproject and the submodules's commitID as\n> recorded in the superproject (this may be different than HEAD in the\n> submodule).\n\n  in principle, this looks pretty sensible.\n\n> diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt\n> index bf33b0c..1e7d352 100644\n> --- a/Documentation/git-submodule.txt\n> +++ b/Documentation/git-submodule.txt\n> @@ -14,6 +14,7 @@ SYNOPSIS\n>  'git submodule' [--quiet] init [--] [<path>...]\n>  'git submodule' [--quiet] update [--init] [--] [<path>...]\n>  'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]\n> +'git submodule' foreach <command-list>\n>  \n>  \n>  DESCRIPTION\n\n  But as visible here, this is a little bit inconsistent. I think\nforeach should be by default verbose about which submodules does it\nrecurse into - this is what you want in case of casual usage on\ncommand-line. In case you want to have full control on the output within\na script, you can always pass the extra --quiet and it's less obnoxious\nthis way around.\n\n  I also have a problem with the <command-list> - is this one argument?\nMultiple arguments? The semantics is ill-defined. If it is supposed to\nbe a single argument, please drop the -list bit; silent DWIMmery of\nusing \"$@\" internally is acceptable, I guess. If it is supposed to be\nmultiple arguments, you need to\n\n\t(i) Specify that as <command>... instead\n\n\t(ii) Either have an eternal annoyance about insane behaviour\nhere, or use something better than eval \"$@\". Since\n\n\tgit submodule foreach cp x\\ y z\n\nwill simply _not_ work properly.\n\n  So I think it's best to just drop the 'list' part. You're just\nevaluating a shell expression passed in a parameter.\n\n> @@ -123,6 +124,20 @@ summary::\n>  \tin the submodule between the given super project commit and the\n>  \tindex or working tree (switched by --cached) are shown.\n>  \n> +foreach::\n> +\tExecutes an arbitrary list of commands in each checked out submodule.\n\nI think \"evaluates\" is a better word here, too.\n\n-- \n\t\t\t\tPetr \"Pasky\" Baudis\nThe next generation of interesting software will be done\non the Macintosh, not the IBM PC.  -- Bill Gates\n"},{"id":"86827","messageId":"7vhc9rwain.fsf@gitster.siamese.dyndns.org","threadId":"14922","inReplyTo":"20080811102344.GG32184@machine.or.cz","subject":"Re: [PATCH] git-submodule - Add 'foreach' subcommand","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2008-08-11T20:40:32Z","receivedAt":"2008-08-11T20:40:32Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Petr Baudis <pasky@suse.cz> writes:\n\n>   in principle, this looks pretty sensible.\n> ...\n> I think \"evaluates\" is a better word here, too.\n\nI think your refinements all make sense.  Thanks for commenting.\n"},{"id":"86890","messageId":"1218505552-3276-1-git-send-email-mlevedahl@gmail.com","threadId":"14922","inReplyTo":"7vhc9rwain.fsf@gitster.siamese.dyndns.org","subject":"[PATCH] git-submodule foreach - Include output and clarify usage.","fromName":"Mark Levedahl","fromEmail":"mlevedahl@gmail.com","sentAt":"2008-08-12T01:45:52Z","receivedAt":"2008-08-12T01:45:52Z","isPatch":true,"sender":{"key":"mdl123@verizon.net","avatar":"https://avatars.githubusercontent.com/u/5302462?v=4"},"body":"Petr Baudis provided good feedback on the list, leading to this\npatch to modify foreach.\n\nThis clarifies that the input to \"foreach\" is a single shell command,\nthough internally foreach evaluates \"$@\" so *may* work even if the\nuser fails to enclose the command in quotes. Also, this adds output\nof each submodule entered unless --quiet is given, providing feedback\nat the command line but still allowing a script to precisely control\nthe output given.\n\nSigned-off-by: Mark Levedahl <mlevedahl@gmail.com>\n---\n Documentation/git-submodule.txt |   12 +++++++-----\n git-submodule.sh                |    3 ++-\n 2 files changed, 9 insertions(+), 6 deletions(-)\n\ndiff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt\nindex 3470795..abbd5b7 100644\n--- a/Documentation/git-submodule.txt\n+++ b/Documentation/git-submodule.txt\n@@ -14,7 +14,7 @@ SYNOPSIS\n 'git submodule' [--quiet] init [--] [<path>...]\n 'git submodule' [--quiet] update [--init] [--] [<path>...]\n 'git submodule' [--quiet] summary [--summary-limit <n>] [commit] [--] [<path>...]\n-'git submodule' foreach <command-list>\n+'git submodule' [--quiet] foreach <command>\n \n \n DESCRIPTION\n@@ -125,14 +125,16 @@ summary::\n \tindex or working tree (switched by --cached) are shown.\n \n foreach::\n-\tExecutes an arbitrary list of commands in each checked out submodule.\n+\tEvaluates an arbitrary shell command in each checked out submodule.\n+\tThe command has access to the variables $path and $sha1:\n \t$path is the name of the submodule directory relative to the\n \tsuperproject, and $sha1 is the commit as recorded in the superproject.\n \tAny submodules defined in the superproject but not checked out are\n-\tignored by this command, and an empty command-list provides no output.\n-\tA non-zero return from the command-list in any submodule causes\n+\tignored by this command. Unless given --quiet, foreach prints the name\n+\tof each submodule before evaluating the command.\n+\tA non-zero return from the command in any submodule causes\n \tthe processing to terminate. This can be overridden by adding '|| :'\n-\tto the end of the command list.\n+\tto the end of the command.\n +\n As an example, \"git submodule foreach 'echo $path `git rev-parse HEAD`' will\n show the path and currently checked out commit for each submodule.\ndiff --git a/git-submodule.sh b/git-submodule.sh\nindex fc41e59..2d57d60 100755\n--- a/git-submodule.sh\n+++ b/git-submodule.sh\n@@ -6,7 +6,7 @@\n \n USAGE=\"[--quiet] [--cached] \\\n [add <repo> [-b branch] <path>]|[status|init|update [-i|--init]|summary [-n|--summary-limit <n>] [<commit>]] \\\n-[--] [<path>...]|[foreach <command-list>]\"\n+[--] [<path>...]|[foreach <command>]\"\n OPTIONS_SPEC=\n . git-sh-setup\n require_work_tree\n@@ -211,6 +211,7 @@ cmd_foreach()\n \tdo\n \t\tif test -e \"$path\"/.git\n \t\tthen\n+\t\t\tsay \"Entering '$path'\"\n \t\t\t(cd \"$path\" && eval \"$@\") ||\n \t\t\tdie \"Stopping at '$path'; script returned non-zero status.\"\n \t\tfi\n-- \n1.6.0.rc2.45.g1363\n"}]}