--- Begin Message ---
Package: reprepro
Severity: wishlist
Tag: patch
Hi,
it would be nice if reprepro would support managing lzip compress debian
packages[0].
Eventhough lzip support seems to not be accepted anytime soon in dpkg,
it would make my life easier if reprepro would support it anyway, so it
don't need to carry along the patch all the time seperately.
Let me know if there's anything missing in the attached patch that you
would like me to correct.
Regards,
Daniel
[0] http://bugs.debian.org/556960, http://bugs.debian.org/600094
--
Address: Daniel Baumann, Burgunderstrasse 3, CH-4562 Biberist
Email: [email protected]
Internet: http://people.panthera-systems.net/~daniel-baumann/
diff --git a/Makefile.in b/Makefile.in
index e223162..e83dc1e 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -706,6 +706,10 @@ dist-xz: distdir
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
$(am__remove_distdir)
+dist-lzip: distdir
+ tardir=$(distdir) && $(am__tar) | lzip -c >$(distdir).tar.lz
+ $(am__remove_distdir)
+
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
@@ -736,6 +740,8 @@ distcheck: dist
lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+ *.tar.lz*) \
+ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
@@ -912,7 +918,7 @@ uninstall-am: uninstall-binPROGRAMS
all all-am am--refresh check check-am clean clean-binPROGRAMS \
clean-generic clean-local ctags ctags-recursive dist dist-all \
dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ dist-xz \
- dist-zip distcheck distclean distclean-compile \
+ dist-lzip dist-zip distcheck distclean distclean-compile \
distclean-generic distclean-hdr distclean-tags distcleancheck \
distdir distuninstallcheck dvi dvi-am html html-am info \
info-am install install-am install-binPROGRAMS install-data \
diff --git a/debian/control b/debian/control
index 318fe4e..4a5d75c 100644
--- a/debian/control
+++ b/debian/control
@@ -16,7 +16,7 @@ Package: reprepro
Architecture: any
Depends: ${shlibs:Depends}, ${reprepro:Depends}, ${misc:Depends}
Recommends: apt
-Suggests: gnupg-agent, inoticoming, lzma, xz-utils
+Suggests: gnupg-agent, inoticoming, lzip (>= 1.11-2), lzma, xz-utils
Description: Debian package repository producer
reprepro is a tool to manage a repository of Debian packages
(.deb, .udeb, .dsc, ...). It stores files either being
diff --git a/docs/changestool.1 b/docs/changestool.1
index 1fffc8c..aa3cc6d 100644
--- a/docs/changestool.1
+++ b/docs/changestool.1
@@ -80,6 +80,10 @@ into .diff.lzma, .tar.lzma or .tar.lzma within .debs.
External uncompressor used to uncompress xz files to look
into .diff.xz, .tar.xz or .tar.xz within .debs.
.TP
+.B \-\-lunzip \fIcommand\fP
+External uncompressor used to uncompress lzip files to look
+into .diff.lz, .tar.lz or .tar.lz within .debs.
+.TP
.B \-\-bunzip2 \fIcommand\fP
External uncompressor used to uncompress bz2 when compiled without
libbz2.
diff --git a/docs/reprepro.1 b/docs/reprepro.1
index 1784ea5..022e2bc 100644
--- a/docs/reprepro.1
+++ b/docs/reprepro.1
@@ -374,6 +374,15 @@ xz files will not be possible.
The program has to accept the compressed file as stdin and write
the uncompressed file into stdout.
.TP
+.BI \-\-lunzip " lzip-uncompressor"
+When trying to uncompress or read \fPlzip\fP compressed files, this program
+will be used.
+The default value is \fBlunzip\fP.
+If the program is not found or is \fBNONE\fP (all-uppercase) then uncompressing
+lz files will not be possible.
+The program has to accept the compressed file as stdin and write
+the uncompressed file into stdout.
+.TP
.BI \-\-list\-max " count"
Limits the output of \fBlist\fP, \fBlistmatched\fP and \fBlistfilter\fP to the first \fIcount\fP
results.
diff --git a/docs/reprepro.bash_completion b/docs/reprepro.bash_completion
index 51396da..8c07ca8 100644
--- a/docs/reprepro.bash_completion
+++ b/docs/reprepro.bash_completion
@@ -118,7 +118,7 @@ _reprepro()
--section -S --priority -P --component -C\
--architecture -A --type -T --export --waitforlock \
--spacecheck --safetymargin --dbsafetymargin\
- --gunzip --bunzip2 --unlzma --unxz --gnupghome --list-format --list-skip --list-max'
+ --gunzip --bunzip2 --unlzma --unxz --lunzip --gnupghome --list-format --list-skip --list-max'
i=1
prev=""
@@ -166,7 +166,7 @@ _reprepro()
confdir="${COMP_WORDS[i+1]}"
i=$((i+2))
;;
- -i|--ignore|--unignore|--methoddir|--distdir|--dbdir|--listdir|--section|-S|--priority|-P|--component|-C|--architecture|-A|--type|-T|--export|--waitforlock|--spacecheck|--checkspace|--safetymargin|--dbsafetymargin|--logdir|--gunzip|--bunzip2|--unlzma|--unxz|--gnupghome|--morguedir)
+ -i|--ignore|--unignore|--methoddir|--distdir|--dbdir|--listdir|--section|-S|--priority|-P|--component|-C|--architecture|-A|--type|-T|--export|--waitforlock|--spacecheck|--checkspace|--safetymargin|--dbsafetymargin|--logdir|--gunzip|--bunzip2|--unlzma|--unxz|--lunzip|--gnupghome|--morguedir)
prev="$cur"
i=$((i+2))
@@ -419,7 +419,7 @@ _reprepro()
__uncompress)
# first argument is method
if [[ $i -eq $COMP_CWORD ]] ; then
- COMPREPLY=( $( compgen -W ".gz .bz2 .lzma .xz" -- $cur ) )
+ COMPREPLY=( $( compgen -W ".gz .bz2 .lzma .xz .lz" -- $cur ) )
return 0
fi
if [[ $(( $i + 1 )) -eq $COMP_CWORD ]] ; then
diff --git a/docs/reprepro.zsh_completion b/docs/reprepro.zsh_completion
index 9a11a42..c55c5ab 100644
--- a/docs/reprepro.zsh_completion
+++ b/docs/reprepro.zsh_completion
@@ -328,6 +328,7 @@ _arguments \
'--bunzip2[external Program to extract .bz2 files]:bunzip binary:_files' \
'--unlzma[external Program to extract .lzma files]:unlzma binary:_files' \
'--unxz[external Program to extract .xz files]:unxz binary:_files' \
+ '--lunzip[external Program to extract .lz files]:lunzip binary:_files' \
'--list-format[Format for list output]:listfilter format:' \
'--list-skip[Number of packages to skip in list output]:list skip:' \
'--list-max[Maximum number of packages in list output]:list max:' \
@@ -484,7 +485,7 @@ case "$state" in
;;
(__uncompress)
if [[ "$state" = "first argument" ]] ; then
- uncompressions=(.gz .bz2 .lzma .xz)
+ uncompressions=(.gz .bz2 .lzma .xz .lz)
_wanted -V 'uncompressions' expl 'uncompression' compadd -a uncompressions
elif [[ "$state" = "second argument" ]] ; then
_files
diff --git a/globals.h b/globals.h
index f2eb855..4f0da3e 100644
--- a/globals.h
+++ b/globals.h
@@ -84,6 +84,6 @@ extern struct global_config {
int showdownloadpercent;
} global;
-enum compression { c_none, c_gzip, c_bzip2, c_lzma, c_xz, c_COUNT };
+enum compression { c_none, c_gzip, c_bzip2, c_lzma, c_xz, c_lunzip, c_COUNT };
#endif
diff --git a/main.c b/main.c
index 68f2b57..838f82f 100644
--- a/main.c
+++ b/main.c
@@ -108,6 +108,7 @@ static char /*...@only@*/
*bunzip2 = NULL,
*unlzma = NULL,
*unxz = NULL,
+ *lunzip = NULL,
*gnupghome = NULL;
static int listmax = -1;
static int listskip = 0;
@@ -134,7 +135,7 @@ static off_t reservedotherspace = 1024*1024;
* to change something owned by lower owners. */
enum config_option_owner config_state,
#define O(x) owner_ ## x = CONFIG_OWNER_DEFAULT
-O(fast), O(x_morguedir), O(x_outdir), O(x_basedir), O(x_distdir), O(x_dbdir), O(x_listdir), O(x_confdir), O(x_logdir), O(x_methoddir), O(x_section), O(x_priority), O(x_component), O(x_architecture), O(x_packagetype), O(nothingiserror), O(nolistsdownload), O(keepunusednew), O(keepunreferenced), O(keeptemporaries), O(keepdirectories), O(askforpassphrase), O(skipold), O(export), O(waitforlock), O(spacecheckmode), O(reserveddbspace), O(reservedotherspace), O(guessgpgtty), O(verbosedatabase), O(gunzip), O(bunzip2), O(unlzma), O(unxz), O(gnupghome), O(listformat), O(listmax), O(listskip), O(onlysmalldeletes);
+O(fast), O(x_morguedir), O(x_outdir), O(x_basedir), O(x_distdir), O(x_dbdir), O(x_listdir), O(x_confdir), O(x_logdir), O(x_methoddir), O(x_section), O(x_priority), O(x_component), O(x_architecture), O(x_packagetype), O(nothingiserror), O(nolistsdownload), O(keepunusednew), O(keepunreferenced), O(keeptemporaries), O(keepdirectories), O(askforpassphrase), O(skipold), O(export), O(waitforlock), O(spacecheckmode), O(reserveddbspace), O(reservedotherspace), O(guessgpgtty), O(verbosedatabase), O(gunzip), O(bunzip2), O(unlzma), O(unxz), O(lunzip), O(gnupghome), O(listformat), O(listmax), O(listskip), O(onlysmalldeletes);
#undef O
#define CONFIGSET(variable,value) if(owner_ ## variable <= config_state) { \
@@ -282,6 +283,8 @@ ACTION_N(n, n, n, dumpuncompressors) {
case c_xz:
printf("not supported (install xz-utils or use --unxz to tell where unxz is).\n");
break;
+ case c_lunzip:
+ printf("not supported (install lzip or use --lunzip to tell where lunzip is).\n");
default:
printf("not supported\n");
}
@@ -3211,7 +3214,7 @@ static const struct action {
{"__dumpuncompressors", A_N(dumpuncompressors),
0, 0, "__dumpuncompressors"},
{"__uncompress", A_N(uncompress),
- 3, 3, "__uncompress .gz|.bz2|.lzma|.xz <compressed-filename> <into-filename>"},
+ 3, 3, "__uncompress .gz|.bz2|.lzma|.xz|.lz <compressed-filename> <into-filename>"},
{"__extractsourcesection", A_N(extractsourcesection),
1, 1, "__extractsourcesection <.dsc-file>"},
{"__extractcontrol", A_N(extractcontrol),
@@ -3651,6 +3654,7 @@ LO_GUNZIP,
LO_BUNZIP2,
LO_UNLZMA,
LO_UNXZ,
+LO_LZIP,
LO_GNUPGHOME,
LO_LISTFORMAT,
LO_LISTSKIP,
@@ -3926,6 +3930,9 @@ static void handle_option(int c, const char *argument) {
case LO_UNXZ:
CONFIGDUP(unxz, argument);
break;
+ case LO_LZIP:
+ CONFIGDUP(lunzip, argument);
+ break;
case LO_GNUPGHOME:
CONFIGDUP(gnupghome, argument);
break;
@@ -4183,6 +4190,7 @@ int main(int argc,char *argv[]) {
{"bunzip2", required_argument, &longoption, LO_BUNZIP2},
{"unlzma", required_argument, &longoption, LO_UNLZMA},
{"unxz", required_argument, &longoption, LO_UNXZ},
+ {"lunzip", required_argument, &longoption, LO_LZIP},
{"gnupghome", required_argument, &longoption, LO_GNUPGHOME},
{"list-format", required_argument, &longoption, LO_LISTFORMAT},
{"list-skip", required_argument, &longoption, LO_LISTSKIP},
@@ -4306,11 +4314,14 @@ int main(int argc,char *argv[]) {
unlzma = expand_plus_prefix(unlzma, "unlzma", "boc", true);
if( unxz != NULL && unxz[0] == '+' )
unxz = expand_plus_prefix(unxz, "unxz", "boc", true);
- uncompressions_check(gunzip, bunzip2, unlzma, unxz);
+ if( lunzip != NULL && lunzip[0] == '+' )
+ lunzip = expand_plus_prefix(lunzip, "lunzip", "boc", true);
+ uncompressions_check(gunzip, bunzip2, unlzma, unxz, lunzip);
free(gunzip);
free(bunzip2);
free(unlzma);
free(unxz);
+ free(lunzip);
a = all_actions;
while( a->name != NULL ) {
diff --git a/remoterepository.c b/remoterepository.c
index 5881296..b56d0f6 100644
--- a/remoterepository.c
+++ b/remoterepository.c
@@ -900,7 +900,8 @@ static retvalue queue_next_without_release(struct remote_distribution *rd, struc
{ .diff = false, .force = false, .compression = c_bzip2 },
{ .diff = false, .force = false, .compression = c_none },
{ .diff = false, .force = false, .compression = c_lzma },
- { .diff = false, .force = false, .compression = c_xz }
+ { .diff = false, .force = false, .compression = c_xz },
+ { .diff = false, .force = false, .compression = c_lunzip }
}
};
int e;
diff --git a/tool.c b/tool.c
index b6ab2f2..758fc59 100644
--- a/tool.c
+++ b/tool.c
@@ -2864,12 +2864,13 @@ int main(int argc,char *argv[]) {
static const struct option longopts[] = {
{"help", no_argument, NULL, 'h'},
{"create", no_argument, NULL, 'C'},
- {"create-with-all-fields", no_argument, &longoption, 5},
+ {"create-with-all-fields", no_argument, &longoption, 6},
{"searchpath", required_argument, NULL, 's'},
{"gunzip", required_argument, &longoption, 1},
{"bunzip2", required_argument, &longoption, 2},
{"unlzma", required_argument, &longoption, 3},
{"unxz", required_argument, &longoption, 4},
+ {"lunzip", required_argument, &longoption, 5},
{NULL, 0, NULL, 0},
};
int c;
@@ -2879,7 +2880,7 @@ int main(int argc,char *argv[]) {
bool all_fields = false;
struct strlist searchpath;
struct changes *changesdata IFSTUPIDCC(=NULL);
- char *gunzip = NULL, *bunzip2 = NULL, *unlzma = NULL, *unxz = NULL;
+ char *gunzip = NULL, *bunzip2 = NULL, *unlzma = NULL, *unxz = NULL, *lunzip = NULL;
retvalue r;
strlist_init(&searchpath);
@@ -2901,6 +2902,9 @@ int main(int argc,char *argv[]) {
unxz = strdup(optarg);
break;
case 5:
+ lunzip = strdup(optarg);
+ break;
+ case 6:
create_file = true;
all_fields = true;
break;
@@ -2925,7 +2929,7 @@ int main(int argc,char *argv[]) {
about(false);
}
signature_init(false);
- uncompressions_check(gunzip, bunzip2, unlzma, unxz);
+ uncompressions_check(gunzip, bunzip2, unlzma, unxz, lunzip);
changesfilename = argv[optind];
if( strcmp(changesfilename,"-") != 0 && !endswith(changesfilename,".changes") ) {
diff --git a/uncompression.c b/uncompression.c
index f6699c2..1d12f5a 100644
--- a/uncompression.c
+++ b/uncompression.c
@@ -39,14 +39,14 @@
#include "uncompression.h"
const char * const uncompression_suffix[c_COUNT] = {
- "", ".gz", ".bz2", ".lzma", ".xz" };
+ "", ".gz", ".bz2", ".lzma", ".xz", ".lz" };
/* So help messages can hint what option to try */
const char * const uncompression_option[c_COUNT] = {
- NULL, NULL, "--bunzip2", "--unlzma", "--unxz" };
+ NULL, NULL, "--bunzip2", "--unlzma", "--unxz", "--lunzip" };
/* how those are called in the config file */
const char * const uncompression_config[c_COUNT] = {
- ".", ".gz", ".bz2", ".lzma", ".xz" };
+ ".", ".gz", ".bz2", ".lzma", ".xz", "lz" };
/*...@null@*/ char *extern_uncompressors[c_COUNT] = {
@@ -340,11 +340,12 @@ static void search_binary(/*...@null@*/const char *setting, const char *default_pro
}
/* check for existance of external programs */
-void uncompressions_check(const char *gunzip, const char *bunzip2, const char *unlzma, const char *unxz) {
+void uncompressions_check(const char *gunzip, const char *bunzip2, const char *unlzma, const char *unxz, const char *lunzip) {
search_binary(gunzip, "gunzip", &extern_uncompressors[c_gzip]);
search_binary(bunzip2, "bunzip2", &extern_uncompressors[c_bzip2]);
search_binary(unlzma, "unlzma", &extern_uncompressors[c_lzma]);
search_binary(unxz, "unxz", &extern_uncompressors[c_xz]);
+ search_binary(lunzip, "lunzip", &extern_uncompressors[c_lunzip]);
}
static inline retvalue builtin_uncompress(const char *compressed, const char *destination, enum compression compression) {
diff --git a/uncompression.h b/uncompression.h
index ba8a671..c77c519 100644
--- a/uncompression.h
+++ b/uncompression.h
@@ -55,7 +55,7 @@ retvalue uncompress_fdopen(/*...@out@*/struct compressedfile **, int, off_t, enum c
/**** general initialisation ****/
/* check for existance of external programs */
-void uncompressions_check(const char *gunzip, const char *bunzip2, const char *unlzma, const char *unxz);
+void uncompressions_check(const char *gunzip, const char *bunzip2, const char *unlzma, const char *unxz, const char *lunzip);
#endif
--- End Message ---