Subject: bug#19830: cannot use snippets with zip source

From: Ricardo Wurmus <[email-masked]>
Date: Tue, 10 Feb 2015 17:27:43 +0100

Snippets cannot be used when the source archive is not supported by tar.

For example, when building HISAT with snippets (instead of patching in a
build phase), guix determines the decompression type to be "xz" and then
fails as follows:

~~~~~~~
The following derivations will be built:
   /gnu/store/jra0psbhjkcf66rdmj5bshivf32nyf73-hisat-0.1.4.drv
   /gnu/store/1hpkf8yl4hcifzalnwh2hj6qwi8jid3w-hisat-0.1.4-beta-source.tar.xz.drv
   /gnu/store/pri51516agpcm9k6asgbdmspxnim3l7q-hisat-0.1.4.drv
@ build-started /gnu/store/1hpkf8yl4hcifzalnwh2hj6qwi8jid3w-hisat-0.1.4-beta-source.tar.xz.drv - x86_64-linux /var/log/guix/drvs/1h//pkf8yl4hcifzalnwh2hj6qwi8jid3w-hisat-0.1.4-beta-source.tar.xz.drv.bz2
/gnu/store/c4km8376y174q7gxqahf4hc1i1xaqkqh-tar-1.28/bin/tar: This does not look like a tar archive
/gnu/store/c4km8376y174q7gxqahf4hc1i1xaqkqh-tar-1.28/bin/tar: Skipping to next header
/gnu/store/c4km8376y174q7gxqahf4hc1i1xaqkqh-tar-1.28/bin/tar: Exiting with failure status due to previous errors
builder for `/gnu/store/1hpkf8yl4hcifzalnwh2hj6qwi8jid3w-hisat-0.1.4-beta-source.tar.xz.drv' failed with exit code 1
@ build-failed /gnu/store/1hpkf8yl4hcifzalnwh2hj6qwi8jid3w-hisat-0.1.4-beta-source.tar.xz.drv - 1 builder for `/gnu/store/1hpkf8yl4hcifzalnwh2hj6qwi8jid3w-hisat-0.1.4-beta-source.tar.xz.drv' failed with exit code 1
cannot build derivation `/gnu/store/pri51516agpcm9k6asgbdmspxnim3l7q-hisat-0.1.4.drv': 1 dependencies couldn't be built
cannot build derivation `/gnu/store/jra0psbhjkcf66rdmj5bshivf32nyf73-hisat-0.1.4.drv': 1 dependencies couldn't be built
killing process 2524
guix build: error: build failed: build of `/gnu/store/jra0psbhjkcf66rdmj5bshivf32nyf73-hisat-0.1.4.drv' failed
~~~~~~~

That's due to the definiton of `decompression-type' in
`patch-and-repack' in the file guix/packages.scm:

~~~~~~
(define decompression-type
    (cond ((string-suffix? "gz" source-file-name)  "gzip")
          ((string-suffix? "bz2" source-file-name) "bzip2")
          ((string-suffix? "lz" source-file-name)  "lzip")
          (else "xz")))
~~~~~~