Merge branch '8784-dir-listings'
[arvados.git] / crunch_scripts / collection-merge
1 #!/usr/bin/env python
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: Apache-2.0
5
6 # collection-merge
7 #
8 # Merge two or more collections together.  Can also be used to extract specific
9 # files from a collection to produce a new collection.
10 #
11 # input:
12 # An array of collections or collection/file paths in script_parameter["input"]
13 #
14 # output:
15 # A manifest with the collections merged.  Duplicate file names will
16 # have their contents concatenated in the order that they appear in the input
17 # array.
18
19 import arvados
20 import md5
21 import crunchutil.subst as subst
22 import subprocess
23 import os
24 import hashlib
25
26 p = arvados.current_job()['script_parameters']
27
28 merged = ""
29 src = []
30 for c in p["input"]:
31     c = subst.do_substitution(p, c)
32     i = c.find('/')
33     if i == -1:
34         src.append(c)
35         merged += arvados.CollectionReader(c).manifest_text()
36     else:
37         src.append(c[0:i])
38         cr = arvados.CollectionReader(c[0:i])
39         j = c.rfind('/')
40         stream = c[i+1:j]
41         if stream == "":
42             stream = "."
43         fn = c[(j+1):]
44         for s in cr.all_streams():
45             if s.name() == stream:
46                 if fn in s.files():
47                     merged += s.files()[fn].as_manifest()
48
49 arvados.current_task().set_output(merged)