1616from ms3 import (
1717 Parse ,
1818 compute_path_from_file ,
19+ convert_from_metadata_tsv ,
1920 get_git_repo ,
2021 get_git_version_info ,
2122 make_coloring_reports_and_warnings ,
@@ -164,7 +165,6 @@ def convert_cmd(args):
164165 # '\nTARGET_DIR: ' + target
165166 update_logger = get_logger ("ms3.convert" , level = args .level )
166167 for argument_name , argument , default in (
167- ("-a/--all" , args .all , False ),
168168 ("-e/--exclude" , args .exclude , None ),
169169 ("-f/--folders" , args .folders , None ),
170170 ("--reviewed" , args .reviewed , False ),
@@ -175,22 +175,38 @@ def convert_cmd(args):
175175 update_logger .info (
176176 f"Argument '{ argument_name } ' is currently being ignored."
177177 )
178- out_dir = os . getcwd () if args .out is None else resolve_dir ( args .out )
178+ out_dir = "." if args .out is None else args .out
179179 ms = "auto" if args .musescore is None else args .musescore
180- convert_folder (
181- directory = args .dir ,
182- file_paths = args .files ,
183- target_dir = out_dir ,
184- extensions = args .extensions ,
185- target_extension = args .format ,
186- regex = args .include ,
187- suffix = args .suffix ,
188- recursive = not args .nonrecursive ,
189- ms = ms ,
190- overwrite = args .safe ,
191- parallel = not args .iterative ,
192- logger = update_logger ,
193- )
180+ if args .all :
181+ convert_folder (
182+ directory = args .dir ,
183+ file_paths = args .files ,
184+ target_dir = out_dir ,
185+ extensions = args .extensions ,
186+ target_extension = args .format ,
187+ regex = args .include ,
188+ suffix = args .suffix ,
189+ recursive = not args .nonrecursive ,
190+ ms = ms ,
191+ overwrite = args .safe ,
192+ parallel = not args .iterative ,
193+ logger = update_logger ,
194+ )
195+ else :
196+ convert_from_metadata_tsv (
197+ directory = args .dir ,
198+ file_paths = args .files ,
199+ target_dir = out_dir ,
200+ extensions = args .extensions ,
201+ target_extension = args .format ,
202+ regex = args .include ,
203+ suffix = args .suffix ,
204+ recursive = not args .nonrecursive ,
205+ ms = ms ,
206+ overwrite = args .safe ,
207+ parallel = not args .iterative ,
208+ logger = update_logger ,
209+ )
194210
195211
196212def empty (args , parse_obj : Optional [Parse ] = None ):
@@ -290,12 +306,15 @@ def transform_cmd(args):
290306 if repo is None :
291307 version_info = None
292308 elif repo .is_dirty ():
293- print (
294- "The repository is dirty. Please commit or stash your changes before running ms3 transform. This is "
295- "important because the version information in the JSON descriptor(s) needs to be consistent with the "
296- "repository state."
297- )
298- return
309+ if args .dirty :
310+ version_info = None
311+ else :
312+ print (
313+ "The repository is dirty. Please commit or stash your changes before running ms3 transform. This is "
314+ "important because the version information in the JSON descriptor(s) needs to be consistent with the "
315+ "repository state. To ignore this warning, add the --dirty flag to the command."
316+ )
317+ return
299318 else :
300319 version_info = get_git_version_info (repo = repo )
301320 parse_obj = make_parse_obj (args , parse_tsv = True , facets = params )
@@ -339,18 +358,22 @@ def update_cmd(args, parse_obj: Optional[Parse] = None):
339358 print ("Nothing to do." )
340359
341360
342- def check_and_create (d ):
361+ def check_and_create (d , resolve = True ):
343362 """Turn input into an existing, absolute directory path."""
344363 if not os .path .isdir (d ):
345- d = resolve_dir (os .path .join (os .getcwd (), d ))
346- if not os .path .isdir (d ):
347- if input (d + " does not exist. Create? (y|n)" ) == "y" :
348- os .mkdir (d )
364+ d_resolved = resolve_dir (os .path .join (os .getcwd (), d ))
365+ if not os .path .isdir (d_resolved ):
366+ if input (d_resolved + " does not exist. Create? (y|n)" ) == "y" :
367+ os .mkdir (d_resolved )
349368 else :
350369 raise argparse .ArgumentTypeError (
351370 d + " needs to be an existing directory"
352371 )
353- return resolve_dir (d )
372+ return d_resolved if resolve else d
373+
374+
375+ def check_and_create_unresolved (d ):
376+ return check_and_create (d , resolve = False )
354377
355378
356379def check_dir (d ):
@@ -381,13 +404,11 @@ def precommit_cmd(
381404
382405
383406@overload
384- def review_cmd (args , parse_obj , wrapped_by_precommit : Literal [False ]) -> None :
385- ...
407+ def review_cmd (args , parse_obj , wrapped_by_precommit : Literal [False ]) -> None : ...
386408
387409
388410@overload
389- def review_cmd (args , parse_obj , wrapped_by_precommit : Literal [True ]) -> bool :
390- ...
411+ def review_cmd (args , parse_obj , wrapped_by_precommit : Literal [True ]) -> bool : ...
391412
392413
393414def review_cmd (
@@ -627,8 +648,9 @@ def get_arg_parser():
627648 "-o" ,
628649 "--out" ,
629650 metavar = "OUT_DIR" ,
630- type = check_and_create ,
631- help = "Output directory." ,
651+ type = check_and_create_unresolved ,
652+ help = "Output directory. For conversion, an absolute path will result in a copy of the original sub-folder "
653+ "structure, whereas a relative path will contain all converted files next to each other." ,
632654 )
633655 parse_args .add_argument (
634656 "-n" ,
@@ -1006,7 +1028,7 @@ def get_arg_parser():
10061028 "--format" ,
10071029 default = "mscx" ,
10081030 help = "Output format of converted files. Defaults to mscx. Other options are "
1009- "{png, svg, pdf, mscz, wav, mp3, flac, ogg, xml , mxl, mid}" ,
1031+ "{png, svg, pdf, mscz, wav, mp3, flac, ogg, musicxml , mxl, mid}" ,
10101032 )
10111033 convert_parser .add_argument (
10121034 "--extensions" ,
@@ -1196,6 +1218,11 @@ def get_arg_parser():
11961218 action = "store_true" ,
11971219 help = "Store the transformed files as uncompressed TSVs rather than writing them into a ZIP file." ,
11981220 )
1221+ transform_parser .add_argument (
1222+ "--dirty" ,
1223+ action = "store_true" ,
1224+ help = "Allows to override the 'This repository is dirty' blocker." ,
1225+ )
11991226 transform_parser .set_defaults (func = transform_cmd )
12001227
12011228 update_parser = subparsers .add_parser (
0 commit comments