From owner-freebsd-bugs@FreeBSD.ORG Tue Jun 8 20:30:12 2010 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 211AC1065670 for ; Tue, 8 Jun 2010 20:30:12 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (unknown [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id D46F18FC24 for ; Tue, 8 Jun 2010 20:30:11 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id o58KUBMN072603 for ; Tue, 8 Jun 2010 20:30:11 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id o58KUB53072600; Tue, 8 Jun 2010 20:30:11 GMT (envelope-from gnats) Resent-Date: Tue, 8 Jun 2010 20:30:11 GMT Resent-Message-Id: <201006082030.o58KUB53072600@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Bapt Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 68A9A106566C for ; Tue, 8 Jun 2010 20:27:21 +0000 (UTC) (envelope-from baptiste.daroussin@gmail.com) Received: from mail-ww0-f54.google.com (mail-ww0-f54.google.com [74.125.82.54]) by mx1.freebsd.org (Postfix) with ESMTP id EF6EC8FC1C for ; Tue, 8 Jun 2010 20:27:20 +0000 (UTC) Received: by wwb22 with SMTP id 22so5020626wwb.13 for ; Tue, 08 Jun 2010 13:27:19 -0700 (PDT) Received: by 10.227.151.136 with SMTP id c8mr256234wbw.127.1276028839051; Tue, 08 Jun 2010 13:27:19 -0700 (PDT) Received: from azathoth.lan ([82.245.249.89]) by mx.google.com with ESMTPS id b17sm6725886wbd.19.2010.06.08.13.27.17 (version=TLSv1/SSLv3 cipher=RC4-MD5); Tue, 08 Jun 2010 13:27:18 -0700 (PDT) Received: from root (uid 0) (envelope-from baptiste.daroussin@gmail.com) id cf123 by azathoth.lan (DragonFly Mail Agent) Tue, 08 Jun 2010 22:27:12 +0200 Message-Id: Date: Tue, 08 Jun 2010 22:27:12 +0200 From: Bapt To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: bin/147700: [patch] support xz format for packages X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: Bapt List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 08 Jun 2010 20:30:12 -0000 >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: