You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Bruce Korb <bk...@cruzio.com> on 2000/10/19 14:07:44 UTC

My code is where my mouth is now...

Attached is a tarball used to create an executable that
processes a lot of options and does nothing else.  The
ia32 Linux binary is at:

  ftp://autogen.linuxave.net/pub/svn

To make changes in option naming, flag character acceptance
etc., change the *opts.def files, rebuild and everything is
up to date.

It will do stuff like this:

> $ ./svn help
> What command do you need help with?
> You must type the command you need help with along with the `--help'
> command line option.  Choose from the following commands:
> 
>   ad        add       ann       annotate  branch    checkout  ci
>   co        commit    copy      cp        del       delete    di
>   dif       diff      exit      help      im        imp       import
>   lo        log       mv        new       pget      propget   propset
>   pset      quit      rdiff     rename    rm        stat      status
>   tag       up        update

> $ ./svn exit --help
> USAGE:  exit
> This command is provided as a means of exiting `svn' when it is being
> used to process a series of commands.

> $ ./svn log --more-help
> svn_log - Print out history information for files
> USAGE:  svn log [ -<flag> [<val>] | --<name>[{=| }<val>] ]... <file> [ ... ]
>   Flg Arg Option-Name    Description

<< I need to tweak AutoOpts here... :->>

> 
> These options are uniuqe to this command:
> 
>   Flg Arg Option-Name    Description
>    -b no  default-branch-only Only list revisions on the default branch.
>    -d YES date-range     Specify dates (D1<D2 for range, D for latest before).
>    -h no  header-only    Only print header.
>    -N no  no-tags        Do not list tags.
>    -R no  file-only      Only print name of RCS file.
>    -r YES revisions      Only list revisions REVS.
>    -s YES states         Only list revisions with specified states.
>    -t no  text-and-header-only Only print header and descriptive text.
>    -w YES for-logins     Only list revisions checked in by specified logins.
>    -R YES repository     SVN repository identifier
> 
> These are the common options that apply to all commands:
> 
>   Flg Arg Option-Name    Description
>    -a no  authenticate   Authenticate all communication.
>    -n no  dry-run        Do not change any files.
>    -e YES editor         Edit messages with EDITOR.
>    -x no  encrypt        Encrypt all communication.
>    -k YES keyword-expansion Set/Use keyword expansion
>    -f no  no-load-opts   Do not read the `~/.cvsrc' file.
>    -l no  no-log         Do not log in CVSROOT/history file.
>    -q no  quiet          Alias for:  --verbose=quiet
>    -r no  read-only      Make new working files read-only.
>                                 - prohibits these options:
>                                 writable
>    -s YES set-var        Set a user variable to a value.
>    -T YES tempdir        Put temporary files in TEMPDIR.
>    -t no  trace          Trace CVS.  Alias for:  --verbose=trace
>    -V KWd verbose        What level of chatter?
>    -w no  writable       Make new working files read-write.
>                                 - prohibits these options:
>                                 read-only
>    -z YES zip-level      Set the compression level.
> 
> These options are common to many commands:
> 
>   Flg Arg Option-Name    Description
>    -l no  local-dir      Local; run only in current working directory.
>                                 - prohibits these options:
>                                 recursive
>    -R no  recursive      Operate recursively (default).
>                                 - prohibits these options:
>                                 local-dir
> 
> Auto-supported Options:
> 
>   Flg Arg Option-Name    Description
>    -H no  help           Display usage information and exit
>    -! no  more-help      Extended usage information passed thru pager
>       opt save-opts      Save the option state to an rc file
>    -L YES load-opts      Load options from an rc file
>                                 - disabled as --no-load-opts
>                                 - may appear multiple times
> 
> Options may be specified by doubled hyphens and their name
> or by a single hyphen and the flag character/option value.
> 
> The following option preset mechanisms are supported:
>  - reading file $$/../share/svn/svnrc/.svnrc
>  - reading file $HOME/.svnrc
>  - reading file ./.svnrc
>  - examining environment variables named SVN_LOG_*
> 
> The valid verbose option keywords are:
>         silent
>         quiet
>         progress
>         activity
>         detail
>         trace

Re: My code is where my mouth is now...

Posted by Karl Fogel <kf...@galois.collab.net>.
Bruce, I'm now better able to articulate what I was trying to say
before.  Sorry it took a while to get it in words:

The main problem the client team faces right now is describing the
user interface spec: exactly what commands are supported, exactly what
options, precisely how everything behaves, etc.

This is essentially a thinking and prose-writing task.  You may,
personally, find that building an AutoOpts executable helps you with
this task, and that's fine.  But that's a private thinking method,
just as some people find it helpful to to pace around a room with
their hands behind their backs.  AutoOpts templates are not useful for
others right now, because it can distract us into learning AutoOpts
instead of concentrating on the task at hand.

The thing we need to do is figure out the options we want, and *then*
decide how they will be implemented technically.  It may well be that
AutoOpts is a good solution.  It may also be that creating
apr_getopt_long() is a good solution.  Or it may be that using GNU
getopt and GPL'ing all of Subversion turns out to be the best thing.
Whatever -- the point is that concentrating on *how* we implement the
options instead of what options we're implementing is putting the cart
before the horse.

So please do what Brian has been doing, editing the text in
subversion/client/README to lay down a spec.  That's something we can
all review without having to learn a new tool.  AutoOpts looks like a
very cool thing, but it's not what the team should collectively be
thinking about right now.

Thanks,
-Karl

Bruce Korb <bk...@cruzio.com> writes:
> Attached is a tarball used to create an executable that
> processes a lot of options and does nothing else.  The
> ia32 Linux binary is at:
> 
>   ftp://autogen.linuxave.net/pub/svn
> 
> To make changes in option naming, flag character acceptance
> etc., change the *opts.def files, rebuild and everything is
> up to date.
> 
> It will do stuff like this:
> 
> > $ ./svn help
> > What command do you need help with?
> > You must type the command you need help with along with the `--help'
> > command line option.  Choose from the following commands:
> > 
> >   ad        add       ann       annotate  branch    checkout  ci
> >   co        commit    copy      cp        del       delete    di
> >   dif       diff      exit      help      im        imp       import
> >   lo        log       mv        new       pget      propget   propset
> >   pset      quit      rdiff     rename    rm        stat      status
> >   tag       up        update
> 
> > $ ./svn exit --help
> > USAGE:  exit
> > This command is provided as a means of exiting `svn' when it is being
> > used to process a series of commands.
> 
> > $ ./svn log --more-help
> > svn_log - Print out history information for files
> > USAGE:  svn log [ -<flag> [<val>] | --<name>[{=| }<val>] ]... <file> [ ... ]
> >   Flg Arg Option-Name    Description
> 
> << I need to tweak AutoOpts here... :->>
> 
> > 
> > These options are uniuqe to this command:
> > 
> >   Flg Arg Option-Name    Description
> >    -b no  default-branch-only Only list revisions on the default branch.
> >    -d YES date-range     Specify dates (D1<D2 for range, D for latest before).
> >    -h no  header-only    Only print header.
> >    -N no  no-tags        Do not list tags.
> >    -R no  file-only      Only print name of RCS file.
> >    -r YES revisions      Only list revisions REVS.
> >    -s YES states         Only list revisions with specified states.
> >    -t no  text-and-header-only Only print header and descriptive text.
> >    -w YES for-logins     Only list revisions checked in by specified logins.
> >    -R YES repository     SVN repository identifier
> > 
> > These are the common options that apply to all commands:
> > 
> >   Flg Arg Option-Name    Description
> >    -a no  authenticate   Authenticate all communication.
> >    -n no  dry-run        Do not change any files.
> >    -e YES editor         Edit messages with EDITOR.
> >    -x no  encrypt        Encrypt all communication.
> >    -k YES keyword-expansion Set/Use keyword expansion
> >    -f no  no-load-opts   Do not read the `~/.cvsrc' file.
> >    -l no  no-log         Do not log in CVSROOT/history file.
> >    -q no  quiet          Alias for:  --verbose=quiet
> >    -r no  read-only      Make new working files read-only.
> >                                 - prohibits these options:
> >                                 writable
> >    -s YES set-var        Set a user variable to a value.
> >    -T YES tempdir        Put temporary files in TEMPDIR.
> >    -t no  trace          Trace CVS.  Alias for:  --verbose=trace
> >    -V KWd verbose        What level of chatter?
> >    -w no  writable       Make new working files read-write.
> >                                 - prohibits these options:
> >                                 read-only
> >    -z YES zip-level      Set the compression level.
> > 
> > These options are common to many commands:
> > 
> >   Flg Arg Option-Name    Description
> >    -l no  local-dir      Local; run only in current working directory.
> >                                 - prohibits these options:
> >                                 recursive
> >    -R no  recursive      Operate recursively (default).
> >                                 - prohibits these options:
> >                                 local-dir
> > 
> > Auto-supported Options:
> > 
> >   Flg Arg Option-Name    Description
> >    -H no  help           Display usage information and exit
> >    -! no  more-help      Extended usage information passed thru pager
> >       opt save-opts      Save the option state to an rc file
> >    -L YES load-opts      Load options from an rc file
> >                                 - disabled as --no-load-opts
> >                                 - may appear multiple times
> > 
> > Options may be specified by doubled hyphens and their name
> > or by a single hyphen and the flag character/option value.
> > 
> > The following option preset mechanisms are supported:
> >  - reading file $$/../share/svn/svnrc/.svnrc
> >  - reading file $HOME/.svnrc
> >  - reading file ./.svnrc
> >  - examining environment variables named SVN_LOG_*
> > 
> > The valid verbose option keywords are:
> >         silent
> >         quiet
> >         progress
> >         activity
> >         detail
> >         trace