Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 08 Jun 2010 22:27:12 +0200
From:      Bapt <baptiste.daroussin@gmail.com>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   bin/147700: [patch] support xz format for packages
Message-ID:  <cf123@azathoth.lan>
Resent-Message-ID: <201006082030.o58KUB53072600@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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 root@azathoth.lan:/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:



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