Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 11 Jan 2000 20:02:31 -0600
From:      "Matthew D. Fuller" <fullermd@futuresouth.com>
To:        Bill Fumerola <billf@chc-chimes.com>
Cc:        Kris Kennaway <kris@hub.freebsd.org>, cvs-committers@FreeBSD.ORG, cvs-all@FreeBSD.ORG
Subject:   Re: cvs commit: src/usr.sbin/pkg_install/delete perform.c
Message-ID:  <20000111200231.C22816@futuresouth.com>
In-Reply-To: <Pine.BSF.4.10.10001112012560.31538-100000@jade.chc-chimes.com>
References:  <Pine.BSF.4.21.0001111708410.89967-100000@hub.freebsd.org> <Pine.BSF.4.10.10001112012560.31538-100000@jade.chc-chimes.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jan 11, 2000 at 08:13:13PM -0500, a little birdie told me
that Bill Fumerola remarked
> On Tue, 11 Jan 2000, Kris Kennaway wrote:
> 
> > > Wasn't there a discussion some time ago about making pkg_delete accept a
> > > '/var/db/pkg/package-name-version' argument to allow use of filename
> > > completion?  Some of those package names are rather convulted and painful
> > > to type.  Was there ever a 'yes' or 'no' decision on that, or is it just
> > > waiting for someone to write patches (yes, maybe I am offering...)?
> > 
> > I'd love this to work :-)
> 
> ... and I would commit patches that do this. :->

OK :)   See below .sig.

One stumbling point (which accounts for a lot of the complexity) is that
when using filename completion, often a '/' will get appended to the end
as the file we're completing is a directory, so that much be stripped.
And once having done that, it makes sense to allow for an abritrary
number of '/'s at the end too.  Oh well.

The style of these files is a bit painful too, I had to go back and
change my tab's to spaces to make the diffs look presentable.  Remind me
to reformat them all sometime when I feel vindictive   ;>

I'm not too sure how 'clean' or 'good' these patches are, they're perhaps
a bit rough and I do believe we're also mucking around with the value
stores in argv.  Perhaps another copy into a temporary variable for the
mucking...  But they seem to work fine for all convolutions I can dream
up.  I haven't tested pkg_delete, only pkg_info, but the diffs are the
same, as was the original code, so it looks kosher to me.

Anyway, see diffs below...



-- 
Matthew Fuller     (MF4839)     |    fullermd@over-yonder.net
Unix Systems Administrator      |    fullermd@futuresouth.com
Specializing in FreeBSD         |    http://www.over-yonder.net/

"The only reason I'm burning my candle at both ends, is because I
      haven't figured out how to light the middle yet"



Index: delete/main.c
===================================================================
RCS file: /usr/cvs/src/usr.sbin/pkg_install/delete/main.c,v
retrieving revision 1.14
diff -u -r1.14 main.c
--- main.c	1999/08/28 01:18:01	1.14
+++ main.c	2000/01/12 02:00:25
@@ -41,6 +41,7 @@
 {
     int ch, error;
     char **pkgs, **start;
+    char *pkgs_split;
 
     pkgs = start = argv;
     while ((ch = getopt(argc, argv, Options)) != -1)
@@ -81,9 +82,29 @@
     argv += optind;
 
     /* Get all the remaining package names, if any */
-    /* Get all the remaining package names, if any */
     while (*argv)
-	*pkgs++ = *argv++;
+    {
+        if( (pkgs_split = rindex(*argv, (int) '/')) != NULL )
+        {
+            while( !isalpha(*(pkgs_split+1)) )
+            {
+                *pkgs_split = '\0';
+                pkgs_split = rindex(*argv, (int) '/');
+            }
+            if(pkgs_split != NULL)
+            {
+                pkgs_split++;
+                *pkgs = pkgs_split;
+                pkgs++;
+            }
+        }
+        else
+        {
+            *pkgs = *argv;
+            pkgs++;
+        }
+        argv++;
+    }
 
     /* If no packages, yelp */
     if (pkgs == start)
Index: info/main.c
===================================================================
RCS file: /usr/cvs/src/usr.sbin/pkg_install/info/main.c,v
retrieving revision 1.20
diff -u -r1.20 main.c
--- main.c	2000/01/07 13:25:53	1.20
+++ main.c	2000/01/12 02:00:26
@@ -44,6 +44,7 @@
 {
     int ch;
     char **pkgs, **start;
+    char *pkgs_split;
 
     pkgs = start = argv;
     if (argc == 1) {
@@ -144,7 +145,28 @@
 
     /* Get all the remaining package names, if any */
     while (*argv)
-	*pkgs++ = *argv++;
+    {
+        if( (pkgs_split = rindex(*argv, (int) '/')) != NULL )
+        {
+            while( !isalpha(*(pkgs_split+1)) )
+            {
+                *pkgs_split = '\0';
+                pkgs_split = rindex(*argv, (int) '/');
+            }
+            if(pkgs_split != NULL)
+            {
+                pkgs_split++;
+                *pkgs = pkgs_split;
+                pkgs++;
+            }
+        }
+        else
+        {
+            *pkgs = *argv;
+            pkgs++;
+        }
+        argv++;
+    }
 
     /* If no packages, yelp */
     if (pkgs == start && !AllInstalled && !CheckPkg)


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000111200231.C22816>