コマンドにおけるオプション、引数を間違えた時にhelpを出力する

Sep 7, 2006 From: yasuo@e...

えとー@引越し準備長期化中。。。

現在の所、コマンドを使った際に、オプションの値のミスや
オプションの引数の指定に失敗した場合は以下のようになります。

$ /usr/sbin/qwik-service --showpassword
/usr/lib/ruby/1.8/optparse.rb:446:in `parse': missing argument: --showpassword (OptionParser::MissingArgument)

from /usr/lib/ruby/1.8/optparse.rb:1278:in `order!'
from /usr/lib/ruby/1.8/optparse.rb:1266:in `catch'
from /usr/lib/ruby/1.8/optparse.rb:1266:in `order!'
from /usr/lib/ruby/1.8/optparse.rb:1346:in `permute!'
from /usr/lib/ruby/1.8/optparse.rb:1373:in `parse!'
from /usr/lib/ruby/1.8/qwik/qwik-service.rb:108:in `parse_args'
from /usr/lib/ruby/1.8/qwik/qwik-service.rb:27:in `run'
from /usr/lib/ruby/1.8/qwik/qwik-service.rb:22:in `main'
from /usr/sbin/qwik-service:3

これだと、この直後に -h などで確認したりすることになるので
$ /usr/sbin/qwik-service --showpassword
missing argument: --showpassword
Usage: qwik-service [options]{{br}}

Specific options:

   -c, --config file                Specify config file.
   -d, --[no-]debug                 Run in debug mode.
       --start                      Start qwikWeb and QuickML services.
       --stop                       Stop qwikWeb and QuickML services.
       --restart                    Restart qwikWeb and QuickML services.
       --web-start                  Start qwikWeb services.
       --web-stop                   Stop qwikWeb services.
       --web-restart                Restart qwikWeb services.
       --ml-start                   Start QuickML services.
       --ml-stop                    Stop QuickML services.
       --ml-restart                 Restart QuickML services.
       --watchlog                   Watch log continuously.
       --makesite sitename,mailaddr Make a new site.
       --adduser sitename,mailaddr  Add a user.
       --showpassword mailaddress   Show password.
       --incgen mailaddress         Increment a generation.

Common options:

   -h, --help                       Show this message.
   -v, --version                    Show version.

のように -h の出力と同様のものを出すようにしませんか?

パッチは以下のような簡単なものです。

$ diff -u qwik-service.rb.orig qwik-service.rb

      • qwik-service.rb.orig 2006-09-07 00:05:10.000000000 +0900
      1. qwik-service.rb 2006-09-07 00:05:23.000000000 +0900

@@ -4,7 +4,6 @@

require 'optparse'
  • $LOAD_PATH << '..' unless $LOAD_PATH.include? '..'
require 'qwik/config'
require 'qwik/version'
require 'qwik/util-pathname'

@@ -106,7 +105,13 @@

	  exit
	}
      }
  • optionparser.parse!(args)
  1. begin
  2. optionparser.parse!(args)
  3. rescue OptionParser::ParseError => err
  4. puts err.message
  5. puts optionparser.to_s
  6. exit
  7. end
      if cmd.empty?
	print '
To show help,

これで問題なさそうでしたらマージしたいと思います。

ついでに、
qwik-service以外もこうしたほうがいいかなと思っていますが、
optparseをrequreしている物についていちお所見を

ユーザも使うかもしれないが、デベロッパー向けなので
コマンドラインミスについてもそのままでもいいかもしれないもの
lib/qwik/dev-bench.rb
lib/qwik/test-module-suite.rb
lib/qwik/dev-release.rb

開発用途ではなくユーザが使うことを想定されているので
変更したほうがよいと思うもの
lib/qwik/config.rb
lib/qwik/qwik-service.rb

#debパッケージそろそろ再ITPしたいですね。。。

Sep 7, 2006 From: yasuo@e...

えとーです。

そーいえば、オプション、引数がなにもなかった場合を忘れてました。

To show help,

% qwik-service --help

とか、表示するよりも、helpを表示したほうがいいと思います。

よって、前記のパッチは以下のように変更したいと思います。

$ diff -u qwik-service.rb.orig qwik-service.rb

      • qwik-service.rb.orig 2006-09-07 00:05:10.000000000 +0900
      1. qwik-service.rb 2006-09-07 00:19:43.000000000 +0900

@@ -4,7 +4,6 @@

require 'optparse'
  • $LOAD_PATH << '..' unless $LOAD_PATH.include? '..'
require 'qwik/config'
require 'qwik/version'
require 'qwik/util-pathname'

@@ -106,14 +105,15 @@

	  exit
	}
      }
  • optionparser.parse!(args)
  1. begin
  2. optionparser.parse!(args)
  3. rescue OptionParser::ParseError => err
  4. puts err.message
  5. puts optionparser.to_s
  6. exit
  7. end
      if cmd.empty?
  • print '
  • To show help,

-

  • % qwik-service --help

-

  • '
  1. puts optionparser.to_s
	exit
      end
      return config, cmd

Sep 28, 2006 From: yasuo@e...

えとーです。

これはコミットしてしまってもよいでしょうか?
それともなにか問題ありそうですか?

Sep 29, 2006 From: 2006@e...

えとです。

これはコミットしてしまってもよいでしょうか? それともなにか問題ありそうですか?

確認遅くなりましてすいません。問題ないのでコミットお願いします。

Last modified: 2006-09-29 Attached files total: 1MB