>Number:         147700
>Category:       bin
>Synopsis:       [patch] support xz format for packages
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Jun 08 20:30:11 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Bapt
>Release:        FreeBSD 8.1-PRERELEASE amd64
>Organization:
>Environment:
System: FreeBSD azathoth.lan 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #5 r208894M: 
Tue Jun 8 11:03:27 CEST 2010 [email protected]:/usr/obj/usr/src/sys/AZATHOTH 
amd64


        
>Description:
        Now that xz and liblzma is in base here comes a patch to support xz 
archives in pkg_install (still default to bzip2) it uses --use-compress-program 
as the version of libarchive on stable still doesn't support -J and I don't 
have current to test.

        to create txz package juste pkg_create -J -b your-packages

>How-To-Repeat:
        
>Fix:

        

--- pkg_install-xz.patch begins here ---
Index: create/main.c
===================================================================
--- create/main.c       (révision 208906)
+++ create/main.c       (copie de travail)
@@ -48,7 +48,7 @@
 
 static void usage(void);
 
-static char opts[] = "EGYNnORhjvxyzf:p:P:C:c:d:i:I:k:K:r:t:X:D:m:s:S:o:b:";
+static char opts[] = "EJGYNnORhjvxyzf:p:P:C:c:d:i:I:k:K:r:t:X:D:m:s:S:o:b:";
 static struct option longopts[] = {
        { "backup",     required_argument,      NULL,           'b' },
        { "extended",   no_argument,            NULL,           'E' },
@@ -188,6 +188,10 @@
            Zipper = GZIP;
            break;
 
+       case 'J':
+           Zipper = XZ;
+           break;
+
        case 'b':
            InstalledPkg = optarg;
            while ((tmp = strrchr(optarg, (int)'/')) != NULL) {
@@ -252,7 +256,7 @@
 usage(void)
 {
     fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
-"usage: pkg_create [-YNOhjnvyz] [-C conflicts] [-P pkgs] [-p prefix]",
+"usage: pkg_create [-YNOJhjnvyz] [-C conflicts] [-P pkgs] [-p prefix]",
 "                  [-i iscript] [-I piscript] [-k dscript] [-K pdscript]",
 "                  [-r rscript] [-s srcdir] [-S basedir]",
 "                  [-t template] [-X excludefile]",
Index: create/create.h
===================================================================
--- create/create.h     (révision 208906)
+++ create/create.h     (copie de travail)
@@ -48,7 +48,7 @@
 extern int     Recursive;
 extern int     Regenerate;
 
-enum zipper {NONE, GZIP, BZIP, BZIP2 };
+enum zipper {NONE, GZIP, BZIP, BZIP2, XZ };
 extern enum zipper     Zipper;
 
 void           add_cksum(Package *, PackingList, const char *);
Index: create/perform.c
===================================================================
--- create/perform.c    (révision 208906)
+++ create/perform.c    (copie de travail)
@@ -63,6 +63,10 @@
            Zipper = BZIP2;
            pkg[len - 4] = '\0';
        }
+       else if (!strcmp(&pkg[len - 4], ".txz")) {
+               Zipper = XZ;
+               pkg[len - 4] = '\0';
+       }
        else if (!strcmp(&pkg[len - 4], ".tgz")) {
            Zipper = GZIP;
            pkg[len - 4] = '\0';
@@ -72,7 +76,10 @@
            pkg[len - 4] = '\0';
        }
     }
-    if (Zipper == BZIP2) {
+       if (Zipper == XZ ) {
+               suf = "txz";
+               setenv("XZ", "-9", 0);
+       } else if (Zipper == BZIP2) {
        suf = "tbz";
        setenv("BZIP2", "--best", 0);
     } else if (Zipper == GZIP) {
@@ -371,7 +378,11 @@
     args[nargs++] = "-f";
     args[nargs++] = tball;
     if (strchr(suff, 'z')) {   /* Compress/gzip/bzip2? */
-       if (Zipper == BZIP2) {
+
+       if (Zipper == XZ) {
+               args[nargs++] = "--use-compress-program=xz";
+               cname = "xz'd";
+       } else if (Zipper == BZIP2) {
            args[nargs++] = "-j";
            cname = "bzip'd ";
        }
Index: lib/file.c
===================================================================
--- lib/file.c  (révision 208906)
+++ lib/file.c  (copie de travail)
@@ -137,7 +137,7 @@
 {
     static char tmp[FILENAME_MAX];
     char *cp;
-    const char *suffixes[] = {".tbz", ".tgz", ".tar", NULL};
+    const char *suffixes[] = {".txz", ".tbz", ".tgz", ".tar", NULL};
     int i;
 
     if (fexists(fname) && isfile(fname)) {
@@ -329,29 +329,7 @@
 int
 unpack(const char *pkg, const char *flist)
 {
-    const char *comp, *cp;
-    char suff[80];
-
-    comp = "";
-    /*
-     * Figure out by a crude heuristic whether this or not this is probably
-     * compressed and whichever compression utility was used (gzip or bzip2).
-     */
-    if (strcmp(pkg, "-")) {
-       cp = strrchr(pkg, '.');
-       if (cp) {
-           strcpy(suff, cp + 1);
-           if (strchr(suff, 'z') || strchr(suff, 'Z')) {
-               if (strchr(suff, 'b'))
-                   comp = "-j";
-               else
-                   comp = "-z";
-           }
-       }
-    }
-    else
-       comp = "-j";
-    if (vsystem("/usr/bin/tar -xp %s -f '%s' %s", comp, pkg, flist ? flist : 
"")) {
+    if (vsystem("/usr/bin/tar -xp -f '%s' %s", pkg, flist ? flist : "")) {
        warnx("tar extract of %s failed!", pkg);
        return 1;
     }
--- pkg_install-xz.patch ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to