You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Mo DeJong <su...@bayarea.net> on 2001/09/13 08:51:03 UTC

Patch to add a --verbose option.

Hi all.

After poking around in the and testing out the apr_getopt_long function, I have come
to the conclusion that it is not currently possible to implement the --verbose option
as described in the clients/cmdline/README file.

-V --verbose [ KEY ]           [quiet|progress|verbose|trace]
                                 Determines the level of spewage that the
                                 client gives (progress is the default,
                                 --verbose without arg defaults to verbose)

-q --quiet                     alias for --verbose=quiet


If the user issues a command like `svn --verbose update`, the "update" argument
will be seen as an argument to the --verbose option. Thing is, I don't think we
really need to pass an argument here. The default can be the "progress" level.
If the user pass -q, it will be quiet. If the user passes -V, it will be verbose. The
careful reader will note that I skipped the "trace" verbosity level. The 'T' option
is not currently used but it is mentioned in the README so I figured I would
just leave that for later. The patch is attached.

cheers
Mo DeJong

Re: Patch to add a --verbose option.

Posted by Mo DeJong <su...@bayarea.net>.
On 13 Sep 2001 10:47:04 -0400
"Paul D. Smith" <pa...@nortelnetworks.com> wrote:

> %% Mo DeJong <su...@bayarea.net> writes:
> 
>   md> After poking around in the and testing out the apr_getopt_long
>   md> function, I have come to the conclusion that it is not currently
>   md> possible to implement the --verbose option as described in the
>   md> clients/cmdline/README file.
> 
>   md> -V --verbose [ KEY ]           [quiet|progress|verbose|trace]
> 
> I think this might be a typo.
> 
> The GNU standards state that arguments given to long options use "=", so
> it should be:
> 
> > -V --verbose[=KEY]           [quiet|progress|verbose|trace]
> 
> As an example, see the next line:
> 
>   md> -q --quiet                     alias for --verbose=quiet

That does not matter. The apr_getopt_long function supports both
"--option foo" and "--option=foo" style argument passing. It does not
support an option that may or may not take an argument, an option
either accepts an argument or it does not.

If you declared that --verbose takes an argument and then run a command
like:

svn status --verbose

It would error out inside apr_getopt_long saying that an argument is
required for the --verbose option. That is why I went with the --verbose
and --quiet options. If we added a --trace option later on all 4 levels
of verbosity mentioned in the README could be supported.

cheers
Mo

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: Patch to add a --verbose option.

Posted by "Paul D. Smith" <pa...@nortelnetworks.com>.
%% Mo DeJong <su...@bayarea.net> writes:

  md> After poking around in the and testing out the apr_getopt_long
  md> function, I have come to the conclusion that it is not currently
  md> possible to implement the --verbose option as described in the
  md> clients/cmdline/README file.

  md> -V --verbose [ KEY ]           [quiet|progress|verbose|trace]

I think this might be a typo.

The GNU standards state that arguments given to long options use "=", so
it should be:

> -V --verbose[=KEY]           [quiet|progress|verbose|trace]

As an example, see the next line:

  md> -q --quiet                     alias for --verbose=quiet
                                               ^^^^^^^^^^^^^^^

I do something like this in GNU make and it works fine, FWIW.

-- 
-------------------------------------------------------------------------------
 Paul D. Smith <pa...@nortelnetworks.com> HASMAT--HA Software Mthds & Tools
 "Please remain calm...I may be mad, but I am a professional." --Mad Scientist
-------------------------------------------------------------------------------
   These are my opinions---Nortel Networks takes no responsibility for them.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: Patch to add a --verbose option.

Posted by cm...@collab.net.
Mo DeJong <su...@bayarea.net> writes:

> My most sincere apologies. I switched to a new GUI email
> client and it seems to be doing some base 64 encoding
> of a plain text attachment behind my back. I may
> have to hack this email client to get it working
> properly with the text/plain mime type.
> 
> Here are the patches just pasted in, does that work for you?

Xlnt.  Bee-oo-tiful.  Thanks.  Will review.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: Patch to add a --verbose option.

Posted by Mo DeJong <su...@bayarea.net>.
On 14 Sep 2001 13:07:35 -0500
cmpilato@collab.net wrote:

> Hey, Mo, you recently submitted a couple of patches to the list here:
> 
>  (1) Patch to add a --verbose option.
>  (2) New files need to appear in diff output by default
> 
> Could you possibly re-submit those as plaintext diffs (with log
> messages per the policies in HACKING) instead of binary archives?
> Pretty-please?
> 
> Thanks.

My most sincere apologies. I switched to a new GUI email
client and it seems to be doing some base 64 encoding
of a plain text attachment behind my back. I may
have to hack this email client to get it working
properly with the text/plain mime type.

Here are the patches just pasted in, does that work for you?

2001-09-12  Mo DeJong  <su...@bayarea.net>

	* subversion/clients/cmdline/README:
	* subversion/clients/cmdline/checkout-cmd.c:
	* subversion/clients/cmdline/cl.h:
	* subversion/clients/cmdline/commit-cmd.c:
	* subversion/clients/cmdline/import-cmd.c:
	* subversion/clients/cmdline/main.c:
	* subversion/clients/cmdline/propdel-cmd.c:
	* subversion/clients/cmdline/propset-cmd.c:
	Implement --verbose option to complement the existing
	--quiet option. Replace "quiet" member of the
	svn_cl__opt_state_t struct with a more generic
	"verbosity" member, it is set via the --verbose
	or --quiet options.

Index: subversion/clients/cmdline/cl.h
===================================================================
--- subversion/clients/cmdline/SVN/text-base/cl.h	Wed Sep 12 23:02:28 2001
+++ subversion/clients/cmdline/cl.h	Thu Sep 13 00:27:22 2001
@@ -48,6 +48,15 @@
   svn_cl__auth_password_opt,
 } svn_cl__longopt_t;
 
+/* Client verbosity */
+typedef enum {
+  svn_cl__verbosity_quiet_opt,
+  svn_cl__verbosity_progress_opt,
+  svn_cl__verbosity_verbose_opt,
+  svn_cl__verbosity_trace_opt,
+} svn_cl__verbosity_t;
+
+
 
 /*** Command dispatch. ***/
 
@@ -67,8 +76,8 @@
      set either of these flags, but will be recursive anyway */
   svn_boolean_t recursive;
   svn_boolean_t nonrecursive;
-  svn_boolean_t quiet;
   svn_boolean_t version;
+  svn_cl__verbosity_t verbosity;
   svn_boolean_t modified;
   apr_array_header_t *args;
   /* TODO fixme. This still doesn't handle binary data from a file! */
Index: subversion/clients/cmdline/propdel-cmd.c
===================================================================
--- subversion/clients/cmdline/SVN/text-base/propdel-cmd.c	Mon Sep 10 09:51:09 2001
+++ subversion/clients/cmdline/propdel-cmd.c	Wed Sep 12 23:53:47 2001
@@ -58,7 +58,7 @@
     {
       svn_stringbuf_t *target = ((svn_stringbuf_t **) (targets->elts))[i];
       SVN_ERR (svn_wc_prop_set (pname, NULL, target, pool));
-      if (! opt_state->quiet)
+      if (opt_state->verbosity != svn_cl__verbosity_quiet_opt)
         printf ("property `%s' deleted from %s.\n", pname->data, target->data);
     }
 
Index: subversion/clients/cmdline/checkout-cmd.c
===================================================================
--- subversion/clients/cmdline/SVN/text-base/checkout-cmd.c	Mon Sep 10 09:51:09 2001
+++ subversion/clients/cmdline/checkout-cmd.c	Wed Sep 12 23:56:01 2001
@@ -117,8 +117,12 @@
         return err;
       
       err = svn_client_checkout (NULL, NULL,
-                                 opt_state->quiet ? NULL : trace_editor, 
-                                 opt_state->quiet ? NULL : trace_edit_baton,
+                                 (opt_state->verbosity ==
+                                   svn_cl__verbosity_quiet_opt)
+                                     ? NULL : trace_editor,
+                                 (opt_state->verbosity ==
+                                   svn_cl__verbosity_quiet_opt)
+                                     ? NULL : trace_edit_baton,
                                  auth_obj,
                                  repos_url,
                                  local_dir,
Index: subversion/clients/cmdline/import-cmd.c
===================================================================
--- subversion/clients/cmdline/SVN/text-base/import-cmd.c	Mon Sep 10 09:51:08 2001
+++ subversion/clients/cmdline/import-cmd.c	Thu Sep 13 00:00:50 2001
@@ -130,8 +130,12 @@
                                             pool));
 
   SVN_ERR (svn_client_import (NULL, NULL,
-                              opt_state->quiet ? NULL : trace_editor, 
-                              opt_state->quiet ? NULL : trace_edit_baton,
+                              (opt_state->verbosity ==
+                                svn_cl__verbosity_quiet_opt)
+                                  ? NULL : trace_editor,
+                              (opt_state->verbosity ==
+                                svn_cl__verbosity_quiet_opt)
+                                  ? NULL : trace_edit_baton,
                               auth_obj,
                               path,
                               url,
Index: subversion/clients/cmdline/README
===================================================================
--- subversion/clients/cmdline/SVN/text-base/README	Mon Sep 10 09:51:14 2001
+++ subversion/clients/cmdline/README	Thu Sep 13 01:24:49 2001
@@ -98,11 +98,6 @@
   client.
 
   -? -h -H --help                Help.
-      
-  -V --verbose [ KEY ]           [quiet|progress|verbose|trace]
-                                 Determines the level of spewage that the
-                                 client gives (progress is the default,
-                                 --verbose without arg defaults to verbose)
 
   -D --date DATESPEC             Like "cvs cmd -D DATESPEC"
 
@@ -140,11 +135,16 @@
 
   -L --line-conversion GLOB      Do line-end conversion for files matching GLOB.
 
+  -q --quiet                     Spew as little information as possible
+                                 while processing a subcommand.
+
+  -V --verbose                   Spew a more verbose description
+                                 while processing a subcommand.
+
      --                          End of option processing
 
 * Aliases (shorthand for commonly used options and option combinations)
 
-  -q --quiet                     alias for --verbose=quiet
   -T --text-defaults GLOB        alias for '-L GLOB -K GLOB'
 
 
Index: subversion/clients/cmdline/main.c
===================================================================
--- subversion/clients/cmdline/SVN/text-base/main.c	Wed Sep 12 23:02:57 2001
+++ subversion/clients/cmdline/main.c	Thu Sep 13 01:23:02 2001
@@ -181,6 +181,7 @@
     {"help",          'h', 0},
     {"message",       'm', 1},
     {"quiet",         'q', 0},
+    {"verbose",       'V', 0},
     {"recursive",     svn_cl__recursive_opt, 0},
     {"nonrecursive",  'n', 0},
     {"revision",      'r', 1},
@@ -216,6 +217,7 @@
   svn_cl__init_feedback_vtable (pool);
   memset (&opt_state, 0, sizeof (opt_state));
   opt_state.revision = SVN_INVALID_REVNUM;
+  opt_state.verbosity = svn_cl__verbosity_progress_opt;
 
   /* No args?  Show usage. */
   if (argc <= 1)
@@ -259,12 +261,16 @@
         break;
       case 'v':
         opt_state.version = TRUE;
+        /* fall through and print version info in help subcommand */
       case 'h':
       case '?':
         opt_state.help = TRUE;
         break;
       case 'q':
-        opt_state.quiet = TRUE;
+        opt_state.verbosity = svn_cl__verbosity_quiet_opt;
+        break;
+      case 'V':
+        opt_state.verbosity = svn_cl__verbosity_verbose_opt;
         break;
       case svn_cl__xml_file_opt:
         opt_state.xml_file = svn_stringbuf_create (opt_arg, pool);
Index: subversion/clients/cmdline/commit-cmd.c
===================================================================
--- subversion/clients/cmdline/SVN/text-base/commit-cmd.c	Mon Sep 10 09:51:11 2001
+++ subversion/clients/cmdline/commit-cmd.c	Wed Sep 12 23:59:22 2001
@@ -105,8 +105,12 @@
 
   /* Commit. */
   SVN_ERR (svn_client_commit (NULL, NULL,
-                              opt_state->quiet ? NULL : trace_editor, 
-                              opt_state->quiet ? NULL : trace_edit_baton,
+                              (opt_state->verbosity ==
+                                svn_cl__verbosity_quiet_opt)
+                                  ? NULL : trace_editor,
+                              (opt_state->verbosity ==
+                                svn_cl__verbosity_quiet_opt)
+                                  ? NULL : trace_edit_baton,
                               auth_obj,
                               targets,
                               message,
Index: subversion/clients/cmdline/propset-cmd.c
===================================================================
--- subversion/clients/cmdline/SVN/text-base/propset-cmd.c	Mon Sep 10 09:51:10 2001
+++ subversion/clients/cmdline/propset-cmd.c	Wed Sep 12 23:54:19 2001
@@ -68,7 +68,7 @@
       svn_stringbuf_t *target = ((svn_stringbuf_t **) (targets->elts))[i];
       SVN_ERR (svn_wc_prop_set (propname, propval, target, pool));
 
-      if (! opt_state->quiet)
+      if (opt_state->verbosity != svn_cl__verbosity_quiet_opt)
         printf ("property `%s' set on %s.\n", propname->data, target->data);
     }
 





(Note: There is a missing call to apr_file_close in
 case the first open worked. I figured I would just
 send that fix later)


2001-09-12  Mo DeJong  <su...@bayarea.net>

	* subversion/clients/cmdline/diff.c:
	Include a newly added file in the diff output
	by creating an empty file in the SVN dir before
	exec'ing diff.

Index: ./subversion/clients/cmdline/diff.c
===================================================================
--- ./subversion/clients/cmdline/SVN/text-base/diff.c	Mon Sep 10 09:51:09 2001
+++ ./subversion/clients/cmdline/diff.c	Thu Sep 13 02:53:00 2001
@@ -108,6 +108,7 @@
   svn_stringbuf_t *pristine_copy_path;
   svn_boolean_t text_is_modified = FALSE;
   const char **args;
+  svn_boolean_t pristine_existed;
   int i = 0;
 
   apr_file_t *outhandle = NULL;
@@ -126,6 +127,26 @@
   /* Get a PRISTINE_COPY_PATH to compare against.  */
   SVN_ERR (svn_client_file_diff (path, &pristine_copy_path, pool));
 
+  /* If the PRISTINE_COPY_PATH file does not exist the diff will fail.
+     Create an empty file so the generated patch will add the new file */
+
+  status = apr_file_open (&outhandle, pristine_copy_path->data, APR_READ,
+                          APR_OS_DEFAULT, pool);
+  if (!status)
+    pristine_existed = TRUE;
+  else
+    {
+      pristine_existed = FALSE;
+      status = apr_file_open (&outhandle, pristine_copy_path->data,
+                              APR_READ | APR_CREATE,
+                              APR_OS_DEFAULT, pool);
+      if (status)
+        return svn_error_create (status, 0, NULL, pool,
+                                 "error: can't touch pristine copy");
+      else
+        apr_file_close (outhandle);
+    }
+
   /* Get an apr_file_t representing stdout, which is where we'll have
      the diff program print to. */
   status = apr_file_open_stdout (&outhandle, pool);
@@ -171,6 +192,14 @@
      makes use of the two paths, instead of just blindly running
      SVN_CLIENT_DIFF. 
   */
+
+  if (!pristine_existed)
+    {
+      apr_file_remove (pristine_copy_path->data, pool);
+      if (status)
+        return svn_error_create (status, 0, NULL, pool,
+                                 "error: can't delete tmp pristine copy");
+    }
 
   return SVN_NO_ERROR;
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org

Re: Patch to add a --verbose option.

Posted by cm...@collab.net.
Hey, Mo, you recently submitted a couple of patches to the list here:

 (1) Patch to add a --verbose option.
 (2) New files need to appear in diff output by default

Could you possibly re-submit those as plaintext diffs (with log
messages per the policies in HACKING) instead of binary archives?
Pretty-please?

Thanks.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org