diff options
author | Justin Bedo <cu@cua0.org> | 2018-11-01 15:40:47 +1100 |
---|---|---|
committer | Justin Bedo <cu@cua0.org> | 2018-11-01 15:40:47 +1100 |
commit | ec77e9c3a9c2dc7425ee07474f525dd0a3d01fab (patch) | |
tree | 175966e17a018be23b79412a28342954ffdf4824 /tools | |
parent | e7cd661d1c5fb4135e3d436e151294e26aef9127 (diff) |
samtools-sort: don't sort if already sorted
Diffstat (limited to 'tools')
-rw-r--r-- | tools/samtools-sort.nix | 17 |
1 files changed, 13 insertions, 4 deletions
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; } |