aboutsummaryrefslogtreecommitdiff
path: root/tools/samtools-sort.nix
diff options
context:
space:
mode:
authorJustin Bedo <cu@cua0.org>2018-11-01 15:40:47 +1100
committerJustin Bedo <cu@cua0.org>2018-11-01 15:40:47 +1100
commitec77e9c3a9c2dc7425ee07474f525dd0a3d01fab (patch)
tree175966e17a018be23b79412a28342954ffdf4824 /tools/samtools-sort.nix
parente7cd661d1c5fb4135e3d436e151294e26aef9127 (diff)
samtools-sort: don't sort if already sorted
Diffstat (limited to 'tools/samtools-sort.nix')
-rw-r--r--tools/samtools-sort.nix17
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;
}