at master 1.5 kB view raw
1{ 2 lib, 3 runCommandLocal, 4 gfal2-util, 5}: 6 7# `url` and `urls` should only be overridden via `<pkg>.override`, but not `<pkg>.overrideAttrs`. 8{ 9 name ? "", 10 pname ? "", 11 version ? "", 12 urls ? [ ], 13 url ? if urls == [ ] then abort "Expect either non-empty `urls` or `url`" else lib.head urls, 14 hash ? lib.fakeHash, 15 recursive ? false, 16 intermediateDestUrls ? [ ], 17 extraGfalCopyFlags ? [ ], 18 allowSubstitutes ? true, 19}: 20 21(runCommandLocal name { } '' 22 for u in "''${urls[@]}"; do 23 gfal-copy "''${gfalCopyFlags[@]}" "$u" "''${intermediateDestUrls[@]}" "$out" 24 ret="$?" 25 (( ret )) && break 26 done 27 if (( ret )); then 28 echo "gfal-copy failed trying to download from any of the urls" >&2 29 exit "$ret" 30 fi 31'').overrideAttrs 32 ( 33 finalAttrs: previousAttrs: 34 { 35 __structuredAttrs = true; 36 inherit allowSubstitutes; 37 nativeBuildInputs = [ gfal2-util ]; 38 outputHashAlgo = null; 39 outputHashMode = if finalAttrs.recursive then "recursive" else "flat"; 40 outputHash = hash; 41 inherit url; 42 urls = if urls == [ ] then lib.singleton url else urls; 43 gfalCopyFlags = extraGfalCopyFlags ++ lib.optional finalAttrs.recursive "--recursive"; 44 inherit recursive intermediateDestUrls; 45 } 46 // ( 47 if (pname != "" && version != "") then 48 { 49 inherit pname version; 50 name = "${finalAttrs.pname}-${finalAttrs.version}"; 51 } 52 else 53 { name = if (name != "") then name else (baseNameOf url); } 54 ) 55 )