From e3ac421a90efbd884856697974ac7105225230ee Mon Sep 17 00:00:00 2001 From: gxy-tool-bot Date: Sat, 25 Jul 2026 17:15:07 +0000 Subject: [PATCH 01/11] Add mumemto tool suite for pangenome MUM/MEM analysis (9 tools) --- tools/mumemto/.shed.yml | 22 ++ tools/mumemto/macros.xml | 50 +++++ tools/mumemto/mumemto.xml | 196 ++++++++++++++++++ tools/mumemto/mumemto_bed.xml | 53 +++++ tools/mumemto/mumemto_collinear.xml | 50 +++++ tools/mumemto/mumemto_convert.xml | 46 ++++ tools/mumemto/mumemto_coverage.xml | 56 +++++ tools/mumemto/mumemto_extract.xml | 51 +++++ tools/mumemto/mumemto_inversion.xml | 70 +++++++ tools/mumemto/mumemto_merge.xml | 53 +++++ tools/mumemto/mumemto_viz.xml | 103 +++++++++ tools/mumemto/test-data/seq1.fa | 2 + tools/mumemto/test-data/seq2.fa | 2 + tools/mumemto/test-data/seq3.fa | 2 + tools/mumemto/test-data/test1.lengths | 3 + tools/mumemto/test-data/test1.mums | 1 + .../test-data/test1_multilengths.lengths | 6 + tools/mumemto/test-data/test4.mums | 1 + tools/mumemto/test-data/test_agp_list.txt | 2 + tools/mumemto/test-data/test_collinear.mums | 3 + tools/mumemto/test-data/test_filelist.txt | 3 + 21 files changed, 775 insertions(+) create mode 100644 tools/mumemto/.shed.yml create mode 100644 tools/mumemto/macros.xml create mode 100644 tools/mumemto/mumemto.xml create mode 100644 tools/mumemto/mumemto_bed.xml create mode 100644 tools/mumemto/mumemto_collinear.xml create mode 100644 tools/mumemto/mumemto_convert.xml create mode 100644 tools/mumemto/mumemto_coverage.xml create mode 100644 tools/mumemto/mumemto_extract.xml create mode 100644 tools/mumemto/mumemto_inversion.xml create mode 100644 tools/mumemto/mumemto_merge.xml create mode 100644 tools/mumemto/mumemto_viz.xml create mode 100644 tools/mumemto/test-data/seq1.fa create mode 100644 tools/mumemto/test-data/seq2.fa create mode 100644 tools/mumemto/test-data/seq3.fa create mode 100644 tools/mumemto/test-data/test1.lengths create mode 100644 tools/mumemto/test-data/test1.mums create mode 100644 tools/mumemto/test-data/test1_multilengths.lengths create mode 100644 tools/mumemto/test-data/test4.mums create mode 100644 tools/mumemto/test-data/test_agp_list.txt create mode 100644 tools/mumemto/test-data/test_collinear.mums create mode 100644 tools/mumemto/test-data/test_filelist.txt diff --git a/tools/mumemto/.shed.yml b/tools/mumemto/.shed.yml new file mode 100644 index 0000000000..9ff6490c66 --- /dev/null +++ b/tools/mumemto/.shed.yml @@ -0,0 +1,22 @@ +--- +description: Mumemto - efficient maximal matching across pangenomes +categories: +- Sequence Analysis +- Comparative Genomics +owner: iuc +homepage_url: https://github.com/vikshiv/mumemto +long_description: | + Mumemto is a tool for finding maximal unique matches (multi-MUMs) and + maximal exact matches (multi-MEMs) across pangenomes using prefix-free + parsing (PFP). It includes subcommands for visualization, coverage + analysis, collinear block detection, format conversion, sequence + extraction, BED conversion, partition merging, and inversion detection. +remote_repository_url: https://github.com/galaxyproject/tools-iuc/tree/main/tools/mumemto +type: unrestricted +auto_tool_repositories: + name_template: "{{ tool_id }}" + description_template: "Wrapper for mumemto application {{ tool_name }}." +suite: + name: "suite_mumemto" + description: "A suite of Galaxy tools for the mumemto pangenome matching toolkit." + type: repository_suite_definition diff --git a/tools/mumemto/macros.xml b/tools/mumemto/macros.xml new file mode 100644 index 0000000000..e1dc8d82fc --- /dev/null +++ b/tools/mumemto/macros.xml @@ -0,0 +1,50 @@ + + 1.4.1 + 0 + 24.1 + + + mumemto + + + + + + + + + + + + + + + &1 || echo "mumemto @TOOL_VERSION@"]]> + + + + 10.1186/s13059-025-03644-0 + 10.1101/gr.280940.125 + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto.xml b/tools/mumemto/mumemto.xml new file mode 100644 index 0000000000..0684b1d2c8 --- /dev/null +++ b/tools/mumemto/mumemto.xml @@ -0,0 +1,196 @@ + + compute multi-MUMs and multi-MEMs across pangenomes + + macros.xml + + + + + > filelist.txt && + #end for +#else: + ln -s '$input_selector.filelist_input' filelist.txt && +#end if + +mumemto +-i filelist.txt +-o 'output' +-l $l +#if str($k): + -k $k +#end if +-f $f +#if str($F): + -F $F +#end if +$no_revcomp +$b +$M +#if str($M) == '-M' and str($n) == '-n': + -n +#end if +-w $advanced.w +-m $advanced.m +$advanced.g +$advanced.K +]]> + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + + b + + + M + + + M + + + M and n + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/tools/mumemto/mumemto_bed.xml b/tools/mumemto/mumemto_bed.xml new file mode 100644 index 0000000000..1de0cd2ec2 --- /dev/null +++ b/tools/mumemto/mumemto_bed.xml @@ -0,0 +1,53 @@ + + convert MUMs to BED format + + macros.xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_collinear.xml b/tools/mumemto/mumemto_collinear.xml new file mode 100644 index 0000000000..7fc7076f99 --- /dev/null +++ b/tools/mumemto/mumemto_collinear.xml @@ -0,0 +1,50 @@ + + compute collinear blocks from MUMs + + macros.xml + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_convert.xml b/tools/mumemto/mumemto_convert.xml new file mode 100644 index 0000000000..3a47d88aa5 --- /dev/null +++ b/tools/mumemto/mumemto_convert.xml @@ -0,0 +1,46 @@ + + convert between MUMs and BUMbl formats + + macros.xml + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_coverage.xml b/tools/mumemto/mumemto_coverage.xml new file mode 100644 index 0000000000..8b5551df34 --- /dev/null +++ b/tools/mumemto/mumemto_coverage.xml @@ -0,0 +1,56 @@ + + MUM coverage analysis per sequence + + macros.xml + + + + + '$coverage_output' +]]> + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_extract.xml b/tools/mumemto/mumemto_extract.xml new file mode 100644 index 0000000000..34f07ce33f --- /dev/null +++ b/tools/mumemto/mumemto_extract.xml @@ -0,0 +1,51 @@ + + extract MUM sequences to FASTA + + macros.xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_inversion.xml b/tools/mumemto/mumemto_inversion.xml new file mode 100644 index 0000000000..7d27a8af86 --- /dev/null +++ b/tools/mumemto/mumemto_inversion.xml @@ -0,0 +1,70 @@ + + detect inversions from MUMs + + macros.xml + + + + + 'inversions.tsv' +]]> + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_merge.xml b/tools/mumemto/mumemto_merge.xml new file mode 100644 index 0000000000..22f506e1be --- /dev/null +++ b/tools/mumemto/mumemto_merge.xml @@ -0,0 +1,53 @@ + + merge MUM partitions + + macros.xml + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_viz.xml b/tools/mumemto/mumemto_viz.xml new file mode 100644 index 0000000000..f9d887a8ea --- /dev/null +++ b/tools/mumemto/mumemto_viz.xml @@ -0,0 +1,103 @@ + + synteny visualization of MUMs + + macros.xml + + + + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + output_format == "png" + + + output_format == "pdf" + + + output_format == "svg" + + + output_format == "html" + + + + + + + + + + + + + + + + +
diff --git a/tools/mumemto/test-data/seq1.fa b/tools/mumemto/test-data/seq1.fa new file mode 100644 index 0000000000..84c3fc4b1d --- /dev/null +++ b/tools/mumemto/test-data/seq1.fa @@ -0,0 +1,2 @@ +>seq1 +AAAAAAAAAATTTTTTTTTTGGGGGGGGGGCCCCCCCCCCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGC diff --git a/tools/mumemto/test-data/seq2.fa b/tools/mumemto/test-data/seq2.fa new file mode 100644 index 0000000000..cce0a09ea3 --- /dev/null +++ b/tools/mumemto/test-data/seq2.fa @@ -0,0 +1,2 @@ +>seq2 +GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCATGCTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT diff --git a/tools/mumemto/test-data/seq3.fa b/tools/mumemto/test-data/seq3.fa new file mode 100644 index 0000000000..980257626f --- /dev/null +++ b/tools/mumemto/test-data/seq3.fa @@ -0,0 +1,2 @@ +>seq3 +CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA diff --git a/tools/mumemto/test-data/test1.lengths b/tools/mumemto/test-data/test1.lengths new file mode 100644 index 0000000000..9336b4dcdc --- /dev/null +++ b/tools/mumemto/test-data/test1.lengths @@ -0,0 +1,3 @@ +seq1.fa 200 +seq2.fa 220 +seq3.fa 220 diff --git a/tools/mumemto/test-data/test1.mums b/tools/mumemto/test-data/test1.mums new file mode 100644 index 0000000000..b2c85d95a8 --- /dev/null +++ b/tools/mumemto/test-data/test1.mums @@ -0,0 +1 @@ +100 0,20,20 +,+,+ diff --git a/tools/mumemto/test-data/test1_multilengths.lengths b/tools/mumemto/test-data/test1_multilengths.lengths new file mode 100644 index 0000000000..81f9d91a5a --- /dev/null +++ b/tools/mumemto/test-data/test1_multilengths.lengths @@ -0,0 +1,6 @@ +seq1.fa * +seq1.fa contig1 200 +seq2.fa * +seq2.fa contig1 220 +seq3.fa * +seq3.fa contig1 220 diff --git a/tools/mumemto/test-data/test4.mums b/tools/mumemto/test-data/test4.mums new file mode 100644 index 0000000000..e6103ff3b5 --- /dev/null +++ b/tools/mumemto/test-data/test4.mums @@ -0,0 +1 @@ +100 0,20 +,+ diff --git a/tools/mumemto/test-data/test_agp_list.txt b/tools/mumemto/test-data/test_agp_list.txt new file mode 100644 index 0000000000..491f348dc2 --- /dev/null +++ b/tools/mumemto/test-data/test_agp_list.txt @@ -0,0 +1,2 @@ +agp1.agp +agp2.agp diff --git a/tools/mumemto/test-data/test_collinear.mums b/tools/mumemto/test-data/test_collinear.mums new file mode 100644 index 0000000000..bee2e9489a --- /dev/null +++ b/tools/mumemto/test-data/test_collinear.mums @@ -0,0 +1,3 @@ +100 0,20 +,+ +200 100,120 +,+ +50 200,220 +,+ diff --git a/tools/mumemto/test-data/test_filelist.txt b/tools/mumemto/test-data/test_filelist.txt new file mode 100644 index 0000000000..eeab311b46 --- /dev/null +++ b/tools/mumemto/test-data/test_filelist.txt @@ -0,0 +1,3 @@ +seq1.fa +seq2.fa +seq3.fa From 8f5c2474d7433914f74c416bfb9b7ba9f06da184 Mon Sep 17 00:00:00 2001 From: gxy-tool-bot Date: Sat, 25 Jul 2026 21:43:50 +0000 Subject: [PATCH 02/11] Fix mumemto extract flag, merge test, and categories --- tools/mumemto/.shed.yml | 2 +- tools/mumemto/mumemto_extract.xml | 12 ++++++------ tools/mumemto/mumemto_merge.xml | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/tools/mumemto/.shed.yml b/tools/mumemto/.shed.yml index 9ff6490c66..4b4af7cb6a 100644 --- a/tools/mumemto/.shed.yml +++ b/tools/mumemto/.shed.yml @@ -2,7 +2,7 @@ description: Mumemto - efficient maximal matching across pangenomes categories: - Sequence Analysis -- Comparative Genomics +- Genomics owner: iuc homepage_url: https://github.com/vikshiv/mumemto long_description: | diff --git a/tools/mumemto/mumemto_extract.xml b/tools/mumemto/mumemto_extract.xml index 34f07ce33f..28279b0fef 100644 --- a/tools/mumemto/mumemto_extract.xml +++ b/tools/mumemto/mumemto_extract.xml @@ -8,17 +8,17 @@ - + @@ -27,7 +27,7 @@ mumemto extract - + @@ -35,12 +35,12 @@ mumemto extract **What it does** Extracts the actual DNA sequence of a specific MUM from the original FASTA -files. Requires the original file list used when running mumemto. +files. Requires the original lengths file from the mumemto run. **Input** - A `.mums` or `.bumbl` file from mumemto -- The original file list (one FASTA path per line) +- A `.lengths` file from mumemto - A MUM index to extract **Output** diff --git a/tools/mumemto/mumemto_merge.xml b/tools/mumemto/mumemto_merge.xml index 22f506e1be..60e01b4d3e 100644 --- a/tools/mumemto/mumemto_merge.xml +++ b/tools/mumemto/mumemto_merge.xml @@ -30,7 +30,8 @@ mumemto merge - + + Date: Sun, 26 Jul 2026 02:55:08 +0000 Subject: [PATCH 03/11] Fix owner, categories, merge command, and remove invalid -i flag --- tools/mumemto/.shed.yml | 3 +-- tools/mumemto/mumemto_extract.xml | 26 +++++++++++++++++--------- tools/mumemto/mumemto_merge.xml | 5 ++--- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/tools/mumemto/.shed.yml b/tools/mumemto/.shed.yml index 4b4af7cb6a..c456ccd257 100644 --- a/tools/mumemto/.shed.yml +++ b/tools/mumemto/.shed.yml @@ -2,8 +2,7 @@ description: Mumemto - efficient maximal matching across pangenomes categories: - Sequence Analysis -- Genomics -owner: iuc +owner: bgruening homepage_url: https://github.com/vikshiv/mumemto long_description: | Mumemto is a tool for finding maximal unique matches (multi-MUMs) and diff --git a/tools/mumemto/mumemto_extract.xml b/tools/mumemto/mumemto_extract.xml index 28279b0fef..934e38ad97 100644 --- a/tools/mumemto/mumemto_extract.xml +++ b/tools/mumemto/mumemto_extract.xml @@ -8,18 +8,22 @@ input.lengths && mumemto extract -m input.mums -l input.lengths --i $i -o 'output.fa' ]]> - - + + @@ -28,24 +32,28 @@ mumemto extract + + + diff --git a/tools/mumemto/mumemto_merge.xml b/tools/mumemto/mumemto_merge.xml index 60e01b4d3e..014eab920a 100644 --- a/tools/mumemto/mumemto_merge.xml +++ b/tools/mumemto/mumemto_merge.xml @@ -13,9 +13,8 @@ #end for mumemto merge -#for $i, $mf in enumerate($mum_files): - 'mum_${i}.mums' -#end for +#set $mum_list = ','.join(['mum_%d.mums' % i for i in range(len($mum_files))]) +'${mum_list}' #if $mums_of_mums: --merged_mums '$mums_of_mums' #end if From 088d343b0c6f036a9ae6d1db74e468cefd292177 Mon Sep 17 00:00:00 2001 From: gxy-tool-bot Date: Sun, 26 Jul 2026 04:03:27 +0000 Subject: [PATCH 04/11] Fix mumemto_merge command to use valid Cheetah for loop --- tools/mumemto/mumemto_merge.xml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/mumemto/mumemto_merge.xml b/tools/mumemto/mumemto_merge.xml index 014eab920a..b254e2f4e4 100644 --- a/tools/mumemto/mumemto_merge.xml +++ b/tools/mumemto/mumemto_merge.xml @@ -12,9 +12,7 @@ ln -s '$mf' 'mum_${i}.mums' && #end for -mumemto merge -#set $mum_list = ','.join(['mum_%d.mums' % i for i in range(len($mum_files))]) -'${mum_list}' +mumemto merge #for $i, $mf in enumerate($mum_files):#if $i > 0:,#end if'mum_${i}.mums'#end for #if $mums_of_mums: --merged_mums '$mums_of_mums' #end if From d8070742c184d87552dc3d548deb24338420d390 Mon Sep 17 00:00:00 2001 From: gxy-tool-bot Date: Sun, 26 Jul 2026 22:01:31 +0000 Subject: [PATCH 05/11] Fix comma-separated argument quoting in mumemto_merge.xml --- tools/mumemto/mumemto_merge.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/mumemto/mumemto_merge.xml b/tools/mumemto/mumemto_merge.xml index b254e2f4e4..2ec63d9107 100644 --- a/tools/mumemto/mumemto_merge.xml +++ b/tools/mumemto/mumemto_merge.xml @@ -12,7 +12,7 @@ ln -s '$mf' 'mum_${i}.mums' && #end for -mumemto merge #for $i, $mf in enumerate($mum_files):#if $i > 0:,#end if'mum_${i}.mums'#end for +mumemto merge '#for $i, $mf in enumerate($mum_files):#if $i > 0:,#end ifmum_${i}.mums#end for' #if $mums_of_mums: --merged_mums '$mums_of_mums' #end if From 16af819e347f32079e2cbc07d3b888901aad4dca Mon Sep 17 00:00:00 2001 From: gxy-tool-bot Date: Mon, 27 Jul 2026 09:18:34 +0000 Subject: [PATCH 06/11] mumemto: bump profile to 25.0, add output labels, enhance test assertions --- tools/mumemto/macros.xml | 2 +- tools/mumemto/mumemto.xml | 45 ++++++++++++++++++++++++----- tools/mumemto/mumemto_bed.xml | 9 ++++-- tools/mumemto/mumemto_collinear.xml | 7 ++++- tools/mumemto/mumemto_convert.xml | 6 +++- tools/mumemto/mumemto_merge.xml | 12 +++++--- 6 files changed, 65 insertions(+), 16 deletions(-) diff --git a/tools/mumemto/macros.xml b/tools/mumemto/macros.xml index e1dc8d82fc..092521c436 100644 --- a/tools/mumemto/macros.xml +++ b/tools/mumemto/macros.xml @@ -1,7 +1,7 @@ 1.4.1 0 - 24.1 + 25.0 mumemto diff --git a/tools/mumemto/mumemto.xml b/tools/mumemto/mumemto.xml index 0684b1d2c8..f822adecea 100644 --- a/tools/mumemto/mumemto.xml +++ b/tools/mumemto/mumemto.xml @@ -94,7 +94,12 @@ $advanced.K - + + + + + + @@ -110,7 +115,11 @@ $advanced.K - + + + + + @@ -126,13 +135,22 @@ $advanced.K - + + + + + + - + + + + + @@ -143,14 +161,27 @@ $advanced.K - + + + + + + - - + + + + + + + + + + - + - + + + + + + - + + + + + + - + + + + + 0:,#end ifmum_${i}.mums#end for' +mumemto merge #for $i, $mf in enumerate($mum_files):#if $i > 0:,#end ifmum_${i}.mums#end for #if $mums_of_mums: --merged_mums '$mums_of_mums' #end if @@ -26,9 +26,13 @@ mumemto merge '#for $i, $mf in enumerate($mum_files):#if $i > 0:,#end ifmum_${i} - - - + + + + + + + Date: Thu, 30 Jul 2026 16:02:50 +0200 Subject: [PATCH 07/11] Restructure mumemto tool --- tools/mumemto/.shed.yml | 5 +- tools/mumemto/macros.xml | 8 +- tools/mumemto/mumemto.xml | 273 +++++++++++------- tools/mumemto/mumemto_bed.xml | 54 +++- tools/mumemto/mumemto_collinear.xml | 57 +++- tools/mumemto/mumemto_convert.xml | 79 ++++- tools/mumemto/mumemto_coverage.xml | 63 +++- tools/mumemto/mumemto_extract.xml | 82 ++++-- tools/mumemto/mumemto_inversion.xml | 124 ++++++-- tools/mumemto/mumemto_merge.xml | 89 ++++-- tools/mumemto/mumemto_viz.xml | 201 ++++++++++--- tools/mumemto/test-data/merge_p1.athresh | Bin 0 -> 902 bytes tools/mumemto/test-data/merge_p1.lengths | 4 + tools/mumemto/test-data/merge_p1.mums | 2 + tools/mumemto/test-data/merge_p2.athresh | Bin 0 -> 902 bytes tools/mumemto/test-data/merge_p2.lengths | 4 + tools/mumemto/test-data/merge_p2.mums | 2 + tools/mumemto/test-data/test1_blocks.bumbl | Bin 0 -> 120 bytes tools/mumemto/test-data/test1_blocks.mums | 3 + .../test-data/test1_multilengths.lengths | 12 +- tools/mumemto/test-data/test_agp_list.txt | 2 - .../mumemto/test-data/test_collinear_gap.mums | 4 + .../test-data/test_collinear_singleton.mums | 4 + tools/mumemto/test-data/test_inversion.mums | 4 + tools/mumemto/test-data/test_inversion_1.agp | 2 + tools/mumemto/test-data/test_inversion_2.agp | 2 + 26 files changed, 829 insertions(+), 251 deletions(-) create mode 100644 tools/mumemto/test-data/merge_p1.athresh create mode 100644 tools/mumemto/test-data/merge_p1.lengths create mode 100644 tools/mumemto/test-data/merge_p1.mums create mode 100644 tools/mumemto/test-data/merge_p2.athresh create mode 100644 tools/mumemto/test-data/merge_p2.lengths create mode 100644 tools/mumemto/test-data/merge_p2.mums create mode 100644 tools/mumemto/test-data/test1_blocks.bumbl create mode 100644 tools/mumemto/test-data/test1_blocks.mums delete mode 100644 tools/mumemto/test-data/test_agp_list.txt create mode 100644 tools/mumemto/test-data/test_collinear_gap.mums create mode 100644 tools/mumemto/test-data/test_collinear_singleton.mums create mode 100644 tools/mumemto/test-data/test_inversion.mums create mode 100644 tools/mumemto/test-data/test_inversion_1.agp create mode 100644 tools/mumemto/test-data/test_inversion_2.agp diff --git a/tools/mumemto/.shed.yml b/tools/mumemto/.shed.yml index c456ccd257..afac8f59dd 100644 --- a/tools/mumemto/.shed.yml +++ b/tools/mumemto/.shed.yml @@ -1,4 +1,3 @@ ---- description: Mumemto - efficient maximal matching across pangenomes categories: - Sequence Analysis @@ -10,12 +9,12 @@ long_description: | parsing (PFP). It includes subcommands for visualization, coverage analysis, collinear block detection, format conversion, sequence extraction, BED conversion, partition merging, and inversion detection. -remote_repository_url: https://github.com/galaxyproject/tools-iuc/tree/main/tools/mumemto +remote_repository_url: https://github.com/bgruening/galaxytools/tree/master/tools/mumemto type: unrestricted auto_tool_repositories: name_template: "{{ tool_id }}" description_template: "Wrapper for mumemto application {{ tool_name }}." suite: name: "suite_mumemto" - description: "A suite of Galaxy tools for the mumemto pangenome matching toolkit." + description: "A suite of Galaxy tools for the mumemto pangenome matching toolkit" type: repository_suite_definition diff --git a/tools/mumemto/macros.xml b/tools/mumemto/macros.xml index 092521c436..54cb1d72aa 100644 --- a/tools/mumemto/macros.xml +++ b/tools/mumemto/macros.xml @@ -5,7 +5,6 @@ mumemto - @@ -24,12 +23,11 @@ 10.1186/s13059-025-03644-0 - 10.1101/gr.280940.125 - + @@ -47,4 +45,8 @@ + + + + diff --git a/tools/mumemto/mumemto.xml b/tools/mumemto/mumemto.xml index f822adecea..fdcedd1085 100644 --- a/tools/mumemto/mumemto.xml +++ b/tools/mumemto/mumemto.xml @@ -7,17 +7,15 @@ > filelist.txt && - #end for -#else: - ln -s '$input_selector.filelist_input' filelist.txt && -#end if +#import re +## The file list is built here rather than taken from the user: mumemto resolves the +## paths inside it, and any path a user could supply would point outside the job. +## names.tsv maps the path mumemto will record to the dataset name, see the awk below. +#for $i, $fasta in enumerate($input_fasta): + ln -s '$fasta' 'seq_${i}.fa' && + echo 'seq_${i}.fa' >> filelist.txt && + printf '%s\t%s\n' "\$(readlink -f 'seq_${i}.fa')" '${re.sub("[^\w.-]", "_", str($fasta.element_identifier))}' >> names.tsv && +#end for mumemto -i filelist.txt @@ -26,42 +24,64 @@ mumemto #if str($k): -k $k #end if --f $f #if str($F): -F $F #end if $no_revcomp -$b -$M -#if str($M) == '-M' and str($n) == '-n': - -n +#if str($matches.match_type) == "mum": + ## -f 1 is what makes a match unique, i.e. a MUM rather than a MEM + -f 1 + $matches.b + #if str($matches.merge.mode) != "none": + -M + #if str($matches.merge.mode) == "anchor": + -n + #end if + #end if +#else: + -f $matches.f #end if -w $advanced.w -m $advanced.m $advanced.g $advanced.K +&& + +## mumemto records each input's canonicalised path in the .lengths file, which resolves +## the symlinks above to opaque Galaxy dataset paths. Substitute the dataset names back: +## the rest of the suite reads this column for sequence labels, and mumemto merge matches +## partitions by the basename on its first line. +awk 'NR == FNR { name[\$1] = \$2; next } \$1 in name { \$1 = name[\$1] } { print }' names.tsv output.lengths > relabelled.lengths && +mv relabelled.lengths output.lengths ]]> - - - - + + + + + + + + + - - + + + + + + + + + + + + - - + + - - - - - - - -
@@ -70,54 +90,67 @@ $advanced.K
- - - b + + + matches['match_type'] == 'mum' and not matches['b'] + + + matches['match_type'] == 'mum' and matches['b'] + + + + matches['match_type'] == 'mem' - - M + + matches['match_type'] == 'mum' and matches['merge']['mode'] == 'string' - - M + + matches['match_type'] == 'mum' and matches['merge']['mode'] == 'string' - - M and n + + + matches['match_type'] == 'mum' and matches['merge']['mode'] == 'anchor' - + - - - - + - - + + + + + + - + - - - + + + + + - - - - + - + + + @@ -126,19 +159,39 @@ $advanced.K - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + + + + + - + @@ -146,25 +199,32 @@ $advanced.K - + - + + + + + + - - - - - - + + + - - + + + + + + - + @@ -172,14 +232,9 @@ $advanced.K - - - - - - + - + @@ -191,37 +246,49 @@ Mumemto finds maximal unique matches (multi-MUMs) and maximal exact matches (multi-MEMs) across a collection of genome sequences (a pangenome). It uses prefix-free parsing (PFP) for efficient computation. -By default, mumemto computes strict multi-MUMs — matches that appear exactly -once in every input sequence. You can relax this with: +By default it computes strict multi-MUMs: matches that appear exactly once in +every input sequence. Two settings relax that requirement: -- **Minimum genomes (-k):** Require matches in fewer than all sequences. - Negative values are relative to N (e.g., -k -1 = all but one). -- **Per-sequence frequency (-f):** Allow matches to appear multiple times - per sequence (0 = unlimited). -- **Max total frequency (-F):** Cap the total number of occurrences across - all sequences. +- **Minimum genomes:** accept matches present in only some of the sequences. + Negative values count back from the total, so -1 means all but one. +- **Match type:** switching to multi-MEMs lets a match repeat within a sequence. + +----- **Input** -Provide a collection of FASTA files (one per genome/haplotype). You can -either select multiple FASTA datasets directly or provide a file-list -(one path per line). +Two or more FASTA datasets, one per genome or haplotype. The order you select +them in is the order of the coordinate columns in the output, and the first one +becomes the anchor for anchor-based merging. + +----- **Output** -The tool produces: +Always a `.lengths` file recording each input file and the length of every record +in it. Downstream tools in this suite need it alongside the matches. + +Then, depending on the settings, exactly one file of matches: + +- **`.mums`** — tab separated: match length, then one start position per sequence, + then one strand per sequence +- **`.bumbl`** — the same information packed into binary, chosen instead of `.mums` + rather than in addition to it +- **`.mems`** — written when the match type is multi-MEMs. It carries an extra + column between the positions and the strands giving the sequence each position + belongs to, because a match may occur several times in one sequence. + +Requesting merge metadata adds either `.thresh` and `.thresh_rev` (string-based) +or a single `.athresh` (anchor-based). Only anchor-based output can be combined +by the *mumemto merge* tool. -- A `.mums` file: tab-separated with columns: match length, comma-separated - start positions per sequence, comma-separated strand indicators (+/-) -- A `.lengths` file: sequence lengths -- Optionally a `.bumbl` binary file for faster loading in downstream tools -- Optionally `.thresh` files for partition merging +----- **Downstream tools** -Use the mumemto tool suite for visualization, coverage analysis, -collinear block detection, format conversion, sequence extraction, -BED conversion, partition merging, and inversion detection. +The rest of the suite consumes the `.mums` and `.lengths` pair: synteny plots, +coverage, collinear blocks, inversions, BED conversion, MUM sequence extraction, +format conversion and partition merging. ]]>
diff --git a/tools/mumemto/mumemto_bed.xml b/tools/mumemto/mumemto_bed.xml index 712361bb77..f71602ed6d 100644 --- a/tools/mumemto/mumemto_bed.xml +++ b/tools/mumemto/mumemto_bed.xml @@ -1,5 +1,5 @@ - convert MUMs to BED format + converts MUMs to BED format macros.xml @@ -10,31 +10,55 @@ ln -s '$m' input.mums && ln -s '$l' input.lengths && +## mumemto bed needs the multi-FASTA (multilengths) lengths file, i.e. lines of +## " * " followed by " ". Check up front so a +## simplified lengths file gives a readable message instead of a Python traceback. +head -n 1 input.lengths | awk '{exit (\$2 == "*") ? 0 : 1}' || +{ echo 'Error: the lengths file must be in multi-FASTA (multilengths) format, i.e. the .lengths file written by the mumemto tool.' >&2; exit 1; } && + +## -v is required: without it mumemto misdetects MUMs files that carry no collinear +## block column as having blocks and writes an empty BED (mum_to_bed.process_mums_file). mumemto bed input.mums --lengths-file input.lengths --min-singleton-length $min_singleton_length --seq-idx $seq_idx --output 'output.bed' +-v ]]> - - + + - + + - + - + + + + + + + + + + + + + + + @@ -43,16 +67,26 @@ input.mums **What it does** Converts mumemto MUMs output to BED format, using one sequence as the -reference for coordinates. +reference for coordinates. If the MUMs file carries collinear block annotations +(a fourth column) each block is emitted as a single merged interval; otherwise +every MUM longer than the minimum singleton length is emitted on its own. **Input** -- A `.mums` or `.bumbl` file from mumemto -- A `.lengths` file from mumemto +- A `.mums` file from mumemto +- The `.lengths` file from mumemto. It must be in multi-FASTA (*multilengths*) + format, which is what mumemto writes: for each input FASTA a + ` * ` line followed by one + ` ` line per record. A simplified two-column + lengths file cannot be used, because the contig names are needed for the BED + chromosome column. **Output** -A BED file with MUM intervals relative to the chosen reference sequence. +A tab-separated file with MUM intervals relative to the chosen reference sequence: +contig, start, end, name (`block_N` for collinear blocks, `mum_N` for singleton +MUMs) and strand. Note that the strand sits in column 5 here, not in the +column 6 position used by full BED6. ]]>
diff --git a/tools/mumemto/mumemto_collinear.xml b/tools/mumemto/mumemto_collinear.xml index 6261dc7ed8..a9de5633b7 100644 --- a/tools/mumemto/mumemto_collinear.xml +++ b/tools/mumemto/mumemto_collinear.xml @@ -15,23 +15,57 @@ mumemto collinear #if str($min_singleton_length): --min-singleton-length $min_singleton_length #end if ---fout 'output.mums' +--fout 'output.mums' || +{ echo 'Error: mumemto collinear failed. Note that mumemto @TOOL_VERSION@ aborts when no collinear block survives (no collinear MUMs, or a maximum gap length that splits every block) - setting a minimum singleton length avoids this.' >&2; exit 1; } ]]> - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,11 +79,22 @@ indicating conserved syntenic regions. **Input** -- A `.mums` or `.bumbl` file from mumemto +- A `.mums` file from mumemto **Output** -A sorted `.mums` file with collinear block annotations. +The same MUMs, sorted by their start position in the first sequence, with a fourth +column added holding the index of the collinear block each MUM belongs to, or `-` +for MUMs that are not part of any block. This is the file *mumemto bed* consumes to +emit one merged interval per block. + +**Notes** + +- *Maximum gap length* splits a run of collinear MUMs wherever the gap between + neighbours exceeds it; `0` disables the limit entirely. +- mumemto @TOOL_VERSION@ aborts if no collinear block survives — either because no MUMs + are collinear at all, or because the maximum gap length splits every block. Setting a + minimum singleton length avoids this, since each remaining MUM then becomes its own block. ]]> diff --git a/tools/mumemto/mumemto_convert.xml b/tools/mumemto/mumemto_convert.xml index 7304782248..c9c5e1d1d5 100644 --- a/tools/mumemto/mumemto_convert.xml +++ b/tools/mumemto/mumemto_convert.xml @@ -7,24 +7,67 @@ - + + + + + + + + + + + + - + + conversion['direction'] == 'to_bumbl' + + + conversion['direction'] == 'to_mums' + + - - + + + + + - + + + + + + + + + + + + + + + + @@ -32,19 +75,23 @@ mumemto convert diff --git a/tools/mumemto/mumemto_coverage.xml b/tools/mumemto/mumemto_coverage.xml index 8b5551df34..5aca42fe89 100644 --- a/tools/mumemto/mumemto_coverage.xml +++ b/tools/mumemto/mumemto_coverage.xml @@ -15,7 +15,9 @@ mumemto coverage --lengths input.lengths --len-filter $L --seq-idx $seq_idx -2> '$coverage_output' +## The coverage figure is written to stderr, so stderr has to be captured. Replay the +## capture on failure, otherwise the reason ends up in the output instead of the job log. +2> coverage.txt || { cat coverage.txt >&2; exit 1; } ]]> @@ -24,15 +26,53 @@ mumemto coverage - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -40,17 +80,24 @@ mumemto coverage diff --git a/tools/mumemto/mumemto_extract.xml b/tools/mumemto/mumemto_extract.xml index 934e38ad97..6452c58db9 100644 --- a/tools/mumemto/mumemto_extract.xml +++ b/tools/mumemto/mumemto_extract.xml @@ -8,52 +8,94 @@ input.lengths && +## extract_mums only reads the first line of the lengths file and only to pick up the +## FASTA path, so synthesise it rather than rewriting the run's own lengths file. +echo 'reference.fa' > input.lengths && mumemto extract -m input.mums -l input.lengths -o 'output.fa' +## inverted on purpose: -t is what suppresses the terminator +$add_terminator ]]> - - + + - + + - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_inversion.xml b/tools/mumemto/mumemto_inversion.xml index 7d27a8af86..30650d68c7 100644 --- a/tools/mumemto/mumemto_inversion.xml +++ b/tools/mumemto/mumemto_inversion.xml @@ -9,62 +9,142 @@ > agp_list.txt && + #end for + ## AGP files are matched against the non-reference sequences only, so one too many + ## runs off the end of mumemto's list with an opaque IndexError. + nseq=\$(awk '{ if (\$2 == "*") n++ } END { print (n ? n : NR) }' input.lengths) && + { [ \$(wc -l < agp_list.txt) -lt \$nseq ] || + { echo "Error: \$(wc -l < agp_list.txt) AGP files given for \$nseq sequences - supply at most one per non-reference sequence." >&2; exit 1; }; } && +#end if mumemto inversion --mums input.mums ---agp-filelist input.agp ---chr '$chr' +## Sequence names come from the filelist; mumemto falls back to .lengths, but +## pass it explicitly so the link above is doing visible work. #if $f: --filelist input.filelist +#else: + --filelist input.lengths #end if ---margin $margin --max-block-gap-len $g +#if str($max_length): + --max-length $max_length +#end if +#if $scaffold.use_agp == 'yes': + --agp-filelist agp_list.txt + --chr '$scaffold.chr' + --margin $scaffold.margin +#end if > 'inversions.tsv' ]]> - - - + + + + + + + + + + + + ^[A-Za-z0-9._-]+$ + + + + - + + + + + + + + + + + + + + - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tools/mumemto/mumemto_merge.xml b/tools/mumemto/mumemto_merge.xml index 24ca7a259a..3b37f238e0 100644 --- a/tools/mumemto/mumemto_merge.xml +++ b/tools/mumemto/mumemto_merge.xml @@ -7,30 +7,66 @@ .athresh and .lengths from the path given. +#for $i, $p in enumerate($partitions): + ln -s '$p.mums' 'part_${i}.mums' && + ln -s '$p.athresh' 'part_${i}.athresh' && + ln -s '$p.lengths' 'part_${i}.lengths' && #end for -mumemto merge #for $i, $mf in enumerate($mum_files):#if $i > 0:,#end ifmum_${i}.mums#end for -#if $mums_of_mums: - --merged_mums '$mums_of_mums' -#end if +## The MUMs files are positional and space separated, not comma separated. +mumemto merge +#for $i, $p in enumerate($partitions): + 'part_${i}.mums' +#end for --output 'merged.mums' ]]> - - + + + + + - + + + - - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + @@ -38,18 +74,33 @@ mumemto merge #for $i, $mf in enumerate($mum_files):#if $i > 0:,#end ifmum_${i}. .mums` +- `.athresh` +- `.lengths` + +Add one *Partition* block per partition; at least two are required. **Output** -A merged `.mums` file combining all partitions. +- The merged `.mums` file, with one column of coordinates per sequence across all + partitions +- The merged `.lengths` file, listing every sequence with the anchor appearing once + rather than once per partition. Downstream tools need this rather than any + individual partition's lengths file. +- The merged `.athresh` file, which lets the result be merged again with further + partitions ]]> diff --git a/tools/mumemto/mumemto_viz.xml b/tools/mumemto/mumemto_viz.xml index f9d887a8ea..11adcdd503 100644 --- a/tools/mumemto/mumemto_viz.xml +++ b/tools/mumemto/mumemto_viz.xml @@ -21,20 +21,22 @@ mumemto viz #end if --len-filter $L --subsample $subsample ---max-gap-len $g -#if $output_format == "interactive": - --interactive +## mumemto sizes the gap to under a pixel when the flag is omitted, so only pass it +## when the user has picked a value. +#if str($max_gap_len): + --max-gap-len $max_gap_len #end if ---fout 'plot.${output_format}' -#if str($dpi): - --dpi $dpi -#end if -#if str($dims_width) and str($dims_height): - --dims $dims_width $dims_height -#end if -#if $no_coll_block: - --no-coll-block +--mode '$multifasta.mode' +#if str($multifasta.mode) != "normal": + --spacer $multifasta.spacer #end if +--fout 'plot.${output_format}' +--dpi $styling.dpi +--dims $styling.dims_width $styling.dims_height +--mum-color '$styling.mum_color' +--inversion-color '$styling.inversion_color' +$styling.center +$styling.no_coll_block ]]> @@ -42,22 +44,58 @@ mumemto viz - + + - - - - + + + + + + + + + + + + + + + + +
- - - - + + + + + + + + + + + + ^(#[0-9A-Fa-f]{6}|[A-Za-z]+)$ + + + + + + + + + ^(#[0-9A-Fa-f]{6}|[A-Za-z]+)$ + + +
- + output_format == "png" @@ -66,18 +104,95 @@ mumemto viz output_format == "svg" - - output_format == "html" - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + + +
+ + + + + +
+ + +
+ + + + + +
+ + + + + + + + - + @@ -85,19 +200,39 @@ mumemto viz diff --git a/tools/mumemto/test-data/merge_p1.athresh b/tools/mumemto/test-data/merge_p1.athresh new file mode 100644 index 0000000000000000000000000000000000000000..a23339b2cf26306c058174982680d23485b6ea74 GIT binary patch literal 902 zcmeH^K@x*73%M{h4J4k1un}uq3XJ#BY1u^=15Cx~oktFxOaBSNrWS2#j(ZYgxKV%s7s8M_MG4l4YTC06B!g}7A8d2wP z82io9GwxkclW2y%UE8Tk6-5voU7?ei9gfonbXq_o^g}t zBws3aAeeQ! Date: Fri, 31 Jul 2026 13:54:59 -0400 Subject: [PATCH 08/11] Refactor filelist to text area; add y-axis labels; fix XML comment; add MUM/MEM definitions - Replace type=data filelist input with type=text area=true multi-line text box in viz (reorder) and inversion (relabel), with shared configfile macro - Add sanitizer to preserve newlines in text parameters - Pass --labels input.lengths to mumemto viz so y-axis shows sequence names - Fix XML comment double-hyphen syntax error in macros.xml - Add validator rejecting -f=1 on MEM match type (silently writes .mums) - Add MUM/MEM definitions to main mumemto.xml help text - Add BUMbl explanation to convert tool, athresh explanation to merge tool - Add tests for filelist text box in viz and inversion - Update PNG test expected sizes for y-axis label rendering - All 31 tests pass --- tools/mumemto/macros.xml | 10 +++++-- tools/mumemto/mumemto.xml | 10 +++++-- tools/mumemto/mumemto_inversion.xml | 34 +++++++++++++++++------ tools/mumemto/mumemto_merge.xml | 11 ++++---- tools/mumemto/mumemto_viz.xml | 43 ++++++++++++++++++++++------- 5 files changed, 79 insertions(+), 29 deletions(-) diff --git a/tools/mumemto/macros.xml b/tools/mumemto/macros.xml index 54cb1d72aa..de5731734c 100644 --- a/tools/mumemto/macros.xml +++ b/tools/mumemto/macros.xml @@ -33,9 +33,13 @@ - - - + + + + $filelist_text + diff --git a/tools/mumemto/mumemto.xml b/tools/mumemto/mumemto.xml index fdcedd1085..cf9dfc11c1 100644 --- a/tools/mumemto/mumemto.xml +++ b/tools/mumemto/mumemto.xml @@ -79,7 +79,9 @@ mv relabelled.lengths output.lengths - + + value != 1 +
@@ -243,8 +245,10 @@ mv relabelled.lengths output.lengths **What it does** Mumemto finds maximal unique matches (multi-MUMs) and maximal exact matches -(multi-MEMs) across a collection of genome sequences (a pangenome). It uses -prefix-free parsing (PFP) for efficient computation. +(multi-MEMs) across a collection of genome sequences (a pangenome). A MUM is a +substring that appears exactly once in every input sequence; a MEM relaxes that +to allow repeats within a sequence. Mumemto uses prefix-free parsing (PFP) for +efficient computation on large genomes. By default it computes strict multi-MUMs: matches that appear exactly once in every input sequence. Two settings relax that requirement: diff --git a/tools/mumemto/mumemto_inversion.xml b/tools/mumemto/mumemto_inversion.xml index 30650d68c7..aabbbea1bd 100644 --- a/tools/mumemto/mumemto_inversion.xml +++ b/tools/mumemto/mumemto_inversion.xml @@ -9,9 +9,6 @@ .lengths, but -## pass it explicitly so the link above is doing visible work. -#if $f: - --filelist input.filelist +## Sequence names come from the filelist; mumemto falls back to .lengths +## when none is given, so only pass one explicitly when the user supplied one. +#if $filelist_text: + --filelist '$filelist_file' #else: --filelist input.lengths #end if @@ -45,10 +42,17 @@ mumemto inversion #end if > 'inversions.tsv' ]]> + - + + + + + + + @@ -115,6 +119,20 @@ mumemto inversion + + + + + + + + + + + + + .mums` -- `.athresh` -- `.lengths` +- `.mums` — the tab-separated match positions +- `.athresh` — internal merge metadata that records which matches + survived the anchor threshold; needed to merge again +- `.lengths` — per-sequence lengths Add one *Partition* block per partition; at least two are required. diff --git a/tools/mumemto/mumemto_viz.xml b/tools/mumemto/mumemto_viz.xml index 11adcdd503..de5f9092f9 100644 --- a/tools/mumemto/mumemto_viz.xml +++ b/tools/mumemto/mumemto_viz.xml @@ -9,15 +9,13 @@ + - + + + + + + + + + + + + + + + + + + + @@ -203,7 +225,8 @@ $styling.no_coll_block Draws a synteny plot from mumemto MUMs output. Each input sequence becomes a horizontal track, and every MUM is drawn as a ribbon joining its position in one sequence to its position in the next. Ribbons that cross are inversions, and they -are drawn in a separate colour. +are drawn in a separate colour. Sequence names from the .lengths file are shown +on the y-axis. By default the MUMs are grouped into collinear blocks before plotting, which is far faster and much easier to read on real collections. Turn that off under @@ -215,7 +238,7 @@ far faster and much easier to read on real collections. Turn that off under - A `.mums` file from mumemto - The `.lengths` file from that run -- Optionally a file list, which sets the order the sequences are drawn in +- Optionally a custom sequence order, if the default (from the .lengths file) is not what you want ----- From 577a6311e0b42525e05bd3cc82ba428da84cfcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gr=C3=BCning?= Date: Fri, 28 Aug 2026 22:09:27 +0200 Subject: [PATCH 09/11] Update tools/mumemto/macros.xml --- tools/mumemto/macros.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tools/mumemto/macros.xml b/tools/mumemto/macros.xml index de5731734c..51a6cd15f4 100644 --- a/tools/mumemto/macros.xml +++ b/tools/mumemto/macros.xml @@ -7,16 +7,6 @@ mumemto - - - - - - - - - - &1 || echo "mumemto @TOOL_VERSION@"]]> From 959143009ec2b9d1e3db409f5544ea17aefda919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gr=C3=BCning?= Date: Fri, 28 Aug 2026 22:09:42 +0200 Subject: [PATCH 10/11] Update tools/mumemto/macros.xml --- tools/mumemto/macros.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/mumemto/macros.xml b/tools/mumemto/macros.xml index 51a6cd15f4..75119db61b 100644 --- a/tools/mumemto/macros.xml +++ b/tools/mumemto/macros.xml @@ -8,7 +8,8 @@ - &1 || echo "mumemto @TOOL_VERSION@"]]> + + From 0a23e90729504dff922d233cad3198b09a56d5e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gr=C3=BCning?= Date: Fri, 28 Aug 2026 22:10:27 +0200 Subject: [PATCH 11/11] Update tools/mumemto/mumemto.xml --- tools/mumemto/mumemto.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/mumemto/mumemto.xml b/tools/mumemto/mumemto.xml index cf9dfc11c1..ff4d4a19a4 100644 --- a/tools/mumemto/mumemto.xml +++ b/tools/mumemto/mumemto.xml @@ -4,7 +4,6 @@ macros.xml -