From ec77e9c3a9c2dc7425ee07474f525dd0a3d01fab Mon Sep 17 00:00:00 2001 From: Justin Bedo Date: Thu, 1 Nov 2018 15:40:47 +1100 Subject: samtools-sort: don't sort if already sorted --- tools/samtools-sort.nix | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'tools/samtools-sort.nix') diff --git a/tools/samtools-sort.nix b/tools/samtools-sort.nix index ab9d603..5a02dab 100644 --- a/tools/samtools-sort.nix +++ b/tools/samtools-sort.nix @@ -11,7 +11,7 @@ with nixpkgs; with lib; let - inherit (bionix.types) matchFiletype coordSort; + inherit (bionix.types) matchFiletype coordSort matchFileSorting; in assert (matchFiletype "samtools-sort" { bam = _: true; sam = _: true; cram = _: true; } input); @@ -19,11 +19,20 @@ assert (matchFiletype "samtools-sort" { bam = _: true; sam = _: true; cram = _: let outfmtR = if outfmt != null then outfmt input else input.filetype; outFmtFlags = matchFiletype "samtools-sort-outfmt" { bam = _: "-O BAM"; sam = _: "-O SAM"; cram = ref: "-O CRAM -T ${ref}"; } {filetype = outfmtR;}; + alreadySorted = matchFileSorting "samtools-sort" { name = _: nameSort; coord = _: !nameSort; } input; in stdenv.mkDerivation { name = "samtools-sort"; buildInputs = [ samtools ]; - buildCommand = '' - samtools sort -@ $NIX_BUILD_CORES ${optionalString nameSort "-n"} ${outFmtFlags} ${optionalString (flags != null) flags} ${input} > $out - ''; + buildCommand = + if alreadySorted then + "ln -s $out ${input}" + else + '' + samtools sort -@ $NIX_BUILD_CORES \ + ${optionalString nameSort "-n"} \ + ${outFmtFlags} \ + ${optionalString (flags != null) flags} \ + ${input} > $out + ''; passthru.filetype = if nameSort then bionix.types.nameSort outfmtR else coordSort outfmtR; } -- cgit v1.2.3