Re: [PATCH] mv(1): add -v option for verbosity

2017-06-25 Thread Landry Breuil
On Sun, Jun 25, 2017 at 02:41:28PM +0200, Mark Kettenis wrote:
> > Date: Sun, 25 Jun 2017 14:06:11 +0200
> > From: Job Snijders 
> > 
> > Hi all,
> > 
> > This patch adds a -v option to mv(1) for more verbose output.
> > 
> > $ touch a
> > $ mv -v a b
> > 'a' -> 'b'
> > $ mkdir c
> > $ mv -v b c
> > 'b' -> 'c/b'
> > $ mv -v c d
> > 'e' -> 'd'
> > 
> > And here is an example of the output of the situation mentioned in the
> > 'caveats' section in the manpage:
> > 
> > $ touch f g; mkdir -p d/f
> > $ mv -v f g d
> > mv: rename f to d/f: Is a directory
> > 'g' -> 'd/g'
> > $ echo $?
> > 1
> > 
> > Kind regards,
> 
> This is not something we want for OpenBSD.

I beg to differ. Personally, i've sometimes had to use rsync -P (or -i,
or -v, or other equivalents) to have some kind of listing/progress of a
large copy/move operation. Granted, it's not in POSIX or other
standards, and it's in GNU mv/coreutils that everyone loves to hate for
the kitchensink approach, but that shouldnt be a reason. If there's a
sensible usecase, why not ?

Landry



Re: [PATCH] mv(1): add -v option for verbosity

2017-06-25 Thread Mark Kettenis
> Date: Sun, 25 Jun 2017 14:06:11 +0200
> From: Job Snijders 
> 
> Hi all,
> 
> This patch adds a -v option to mv(1) for more verbose output.
> 
>   $ touch a
>   $ mv -v a b
>   'a' -> 'b'
>   $ mkdir c
>   $ mv -v b c
>   'b' -> 'c/b'
> $ mv -v c d
> 'e' -> 'd'
> 
> And here is an example of the output of the situation mentioned in the
> 'caveats' section in the manpage:
> 
>   $ touch f g; mkdir -p d/f
>   $ mv -v f g d
>   mv: rename f to d/f: Is a directory
>   'g' -> 'd/g'
>   $ echo $?
>   1
> 
> Kind regards,

This is not something we want for OpenBSD.

> diff --git bin/mv/mv.1 bin/mv/mv.1
> index cb6c9d92673..fc8e642017e 100644
> --- bin/mv/mv.1
> +++ bin/mv/mv.1
> @@ -103,6 +103,8 @@ The
>  option overrides any previous
>  .Fl f
>  options.
> +.It Fl v
> +Explain what is being done.
>  .El
>  .Pp
>  The
> diff --git bin/mv/mv.c bin/mv/mv.c
> index 003aca59e87..fa8654b50e4 100644
> --- bin/mv/mv.c
> +++ bin/mv/mv.c
> @@ -51,7 +51,7 @@
>  
>  extern char *__progname;
>  
> -int fflg, iflg;
> +int fflg, iflg, vflg;
>  int stdin_ok;
>  
>  extern int cpmain(int argc, char **argv);
> @@ -71,7 +71,7 @@ main(int argc, char *argv[])
>   int ch;
>   char path[PATH_MAX];
>  
> - while ((ch = getopt(argc, argv, "if")) != -1)
> + while ((ch = getopt(argc, argv, "ifv")) != -1)
>   switch (ch) {
>   case 'i':
>   fflg = 0;
> @@ -81,6 +81,9 @@ main(int argc, char *argv[])
>   iflg = 0;
>   fflg = 1;
>   break;
> + case 'v':
> + vflg = 1;
> + break;
>   default:
>   usage();
>   }
> @@ -208,8 +211,11 @@ do_move(char *from, char *to)
>*  message to standard error, and do nothing more with the
>*  current source file...
>*/
> - if (!rename(from, to))
> + if (!rename(from, to)) {
> + if (vflg)
> + (void)fprintf(stdout, "'%s' -> '%s'\n", from, to);
>   return (0);
> + }
>  
>   if (errno != EXDEV) {
>   warn("rename %s to %s", from, to);
> @@ -339,6 +345,10 @@ err: if (unlink(to))
>   warn("%s: remove", from);
>   return (1);
>   }
> +
> + if (vflg)
> + (void)fprintf(stdout, "'%s' -> '%s'\n", from, to);
> +
>   return (0);
>  }
>  
> @@ -362,14 +372,17 @@ mvcopy(char *from, char *to)
>   _exit(1);
>   }
>  
> + if (vflg)
> + (void)fprintf(stdout, "'%s' -> '%s'\n", from, to);
> +
>   return (0);
>  }
>  
>  void
>  usage(void)
>  {
> - (void)fprintf(stderr, "usage: %s [-fi] source target\n", __progname);
> - (void)fprintf(stderr, "   %s [-fi] source ... directory\n",
> + (void)fprintf(stderr, "usage: %s [-fiv] source target\n", __progname);
> + (void)fprintf(stderr, "   %s [-fiv] source ... directory\n",
>   __progname);
>   exit(1);
>  }
> 
>