From 796d6ee9431c5ce58177fbff839fdd0bd4bedd75 Mon Sep 17 00:00:00 2001 From: Kate Date: Sat, 16 Nov 2024 14:40:23 +0000 Subject: [PATCH 1/4] Add OpamHash.all_kinds --- master_changes.md | 1 + src/client/opamAdminCommand.ml | 6 +++--- src/core/opamHash.ml | 1 + src/core/opamHash.mli | 3 +++ 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/master_changes.md b/master_changes.md index 3f130391b78..07ff193159e 100644 --- a/master_changes.md +++ b/master_changes.md @@ -239,6 +239,7 @@ users) ## opam-core * `OpamConsole`: Replace `black` text style (unused and not very readable) by `gray` [#6358 @kit-ty-kate] * `OpamConsole.pause`: Ensure the function always prints a newline character at the end [#6376 @kit-ty-kate] + * `OpamHash.all_kinds`: was added, which returns the list of all possible values of `OpamHash.kind` [#5960 @kit-ty-kate] * `OpamStd.List.split`: Improve performance [#6210 @kit-ty-kate] * `OpamStd.Sys.{get_terminal_columns,uname,getconf,guess_shell_compat}`: Harden the process calls to account for failures [#6230 @kit-ty-kate - fix #6215] * `OpamStd.Sys.getconf`: was removed, replaced by `get_long_bit` [#6217 @kit-ty-kate] diff --git a/src/client/opamAdminCommand.ml b/src/client/opamAdminCommand.ml index e564dd95d1a..dcda3aadb9e 100644 --- a/src/client/opamAdminCommand.ml +++ b/src/client/opamAdminCommand.ml @@ -455,7 +455,7 @@ let add_hashes_command cli = "Replace the existing hashes rather than adding to them" in let create_hash_tables hash_cache_dir = - let t = Hashtbl.create (List.length hash_kinds) in + let t = Hashtbl.create (List.length OpamHash.all_kinds) in List.iter (fun k1 -> List.iter (fun k2 -> if k1 <> k2 then ( @@ -474,9 +474,9 @@ let add_hashes_command cli = | _ -> failwith ("Bad cache at "^OpamFile.to_string cache_file)); Hashtbl.add t (k1,k2) (cache_file, t_mapping); )) - hash_kinds + OpamHash.all_kinds ) - hash_kinds; + OpamHash.all_kinds; t in let save_hashes hash_tables = diff --git a/src/core/opamHash.ml b/src/core/opamHash.ml index 08183380361..157437f4a9a 100644 --- a/src/core/opamHash.ml +++ b/src/core/opamHash.ml @@ -11,6 +11,7 @@ type kind = [ `MD5 | `SHA256 | `SHA512 ] let default_kind = `MD5 +let all_kinds = [`MD5; `SHA256; `SHA512] type t = kind * string diff --git a/src/core/opamHash.mli b/src/core/opamHash.mli index 405f709f850..92e351988bc 100644 --- a/src/core/opamHash.mli +++ b/src/core/opamHash.mli @@ -15,6 +15,9 @@ type t val kind: t -> kind +(** The list of all the possible values of kind *) +val all_kinds : kind list + (** The value of the hash, as a string of hexadecimal characters *) val contents: t -> string From a681ae838e652741d1b028db4e02e357d01aa11d Mon Sep 17 00:00:00 2001 From: Kate Date: Sat, 16 Nov 2024 14:46:52 +0000 Subject: [PATCH 2/4] Add OpamArg.hash_kinds --- master_changes.md | 1 + src/client/opamAdminCommand.ml | 10 ++-------- src/client/opamArg.ml | 4 ++++ src/client/opamArg.mli | 2 ++ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/master_changes.md b/master_changes.md index 07ff193159e..03fadc05cc2 100644 --- a/master_changes.md +++ b/master_changes.md @@ -218,6 +218,7 @@ users) ## opam-client * `OpamArg.InvalidCLI`: export exception [#6150 @rjbou] * `OpamArg`: export `require_checksums` and `no_checksums`, that are shared with `build_options` [#5563 @rjbou] + * `OpamArg.hash_kinds`: was added [#5960 @kit-ty-kate] * `OpamRepositoryCommand.switch_repos`: expose the function [#5014 @kit-ty-kate] ## opam-repository diff --git a/src/client/opamAdminCommand.ml b/src/client/opamAdminCommand.ml index dcda3aadb9e..69ef07ea9ae 100644 --- a/src/client/opamAdminCommand.ml +++ b/src/client/opamAdminCommand.ml @@ -343,13 +343,10 @@ let update_extrafiles_command cli = field as requested." ] in - let hash_kinds = [`MD5; `SHA256; `SHA512] in let hash_type_arg = OpamArg.mk_opt ~cli OpamArg.(cli_from cli2_2) ["hash"] "HASH_ALGO" "The hash, or hashes to be added" - Arg.(some (enum - (List.map (fun k -> OpamHash.string_of_kind k, k) - hash_kinds))) None + (Arg.some OpamArg.hash_kinds) None in let packages = OpamArg.mk_opt ~cli OpamArg.(cli_from cli2_2) ["p";"packages"] @@ -438,12 +435,9 @@ let add_hashes_command cli = in /download-cache/hash-cache for subsequent runs."; ] in - let hash_kinds = [`MD5; `SHA256; `SHA512] in let hash_types_arg = OpamArg.nonempty_arg_list "HASH_ALGO" "The hash, or hashes to be added" - (Arg.enum - (List.map (fun k -> OpamHash.string_of_kind k, k) - hash_kinds)) + OpamArg.hash_kinds in let packages = OpamArg.mk_opt ~cli OpamArg.(cli_from cli2_1) ["p";"packages"] diff --git a/src/client/opamArg.ml b/src/client/opamArg.ml index 9289fdea990..dfe30a865b6 100644 --- a/src/client/opamArg.ml +++ b/src/client/opamArg.ml @@ -1068,6 +1068,10 @@ let opamlist_columns = in parse, print +let hash_kinds = + Arg.enum + (List.map (fun k -> OpamHash.string_of_kind k, k) OpamHash.all_kinds) + let mk_flag ~cli validity ?(section=Manpage.s_options) flags name = mk_flag ~cli validity ~section flags name diff --git a/src/client/opamArg.mli b/src/client/opamArg.mli index 03dfea6a62b..a60aa341244 100644 --- a/src/client/opamArg.mli +++ b/src/client/opamArg.mli @@ -299,6 +299,8 @@ val warn_selector: (int * [`Enable | `Disable | `EnableError]) list Arg.conv val opamlist_columns: OpamListCommand.output_format list Arg.conv +val hash_kinds : OpamHash.kind Arg.conv + (** {2 Subcommands} *) type 'a subcommand = validity * string * 'a * string list * string From f01f94a034338f41c8c9c871e4ddb590de3b4902 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Thu, 16 May 2024 21:24:35 +0200 Subject: [PATCH 3/4] new subcommand: opam admin migrate-extrafiles This subcommand allows to move all extra-files of an existing opam repository into extra-sources. The files are extracted into a specified local directory, and the opam files are edited in-place. --- doc/man/opam-admin-topics.inc | 11 + master_changes.md | 1 + src/client/opamAdminCommand.ml | 116 ++++++ tests/reftests/admin-migrate-extrafiles.test | 384 +++++++++++++++++++ tests/reftests/dune.inc | 21 + 5 files changed, 533 insertions(+) create mode 100644 tests/reftests/admin-migrate-extrafiles.test diff --git a/doc/man/opam-admin-topics.inc b/doc/man/opam-admin-topics.inc index ffbb4aed863..4123a149bc6 100644 --- a/doc/man/opam-admin-topics.inc +++ b/doc/man/opam-admin-topics.inc @@ -10,6 +10,16 @@ (diff opam-admin-help.err %{dep:opam-admin-help.0}))) (package opam)) +(rule + (with-stdout-to opam-admin-migrate-extrafiles.0 (echo ""))) +(rule + (targets opam-admin-migrate-extrafiles.1 opam-admin-migrate-extrafiles.err) + (deps using-built-opam) + (action (progn (with-stderr-to opam-admin-migrate-extrafiles.err + (with-stdout-to opam-admin-migrate-extrafiles.1 (run %{bin:opam} admin migrate-extrafiles --help=groff))) + (diff opam-admin-migrate-extrafiles.err %{dep:opam-admin-migrate-extrafiles.0}))) + (package opam)) + (rule (with-stdout-to opam-admin-update-extrafiles.0 (echo ""))) (rule @@ -135,6 +145,7 @@ (package opam) (files opam-admin-help.1 + opam-admin-migrate-extrafiles.1 opam-admin-update-extrafiles.1 opam-admin-add-hashes.1 opam-admin-add-constraint.1 diff --git a/master_changes.md b/master_changes.md index 03fadc05cc2..7bc56336a71 100644 --- a/master_changes.md +++ b/master_changes.md @@ -133,6 +133,7 @@ users) * [BUG] Fix `opam admin check` in the presence of the `with-dev-setup` variable [#6331 @kit-ty-kate - fix #6329] * ✘ The `-i`/`--ignore-test-doc` argument has been removed from `opam admin check` [#6335 @kit-ty-kate] * ✘ `opam admin check` now sets `with-test` and `with-doc` to `false` instead of `true` [#6335 @kit-ty-kate] + * ◈ Add `opam admin migrate-extrafiles` which moves all extra-files of an existing opam repository into extra-sources [#5960 @hannesm @rjbou @kit-ty-kate] ## Opam installer diff --git a/src/client/opamAdminCommand.ml b/src/client/opamAdminCommand.ml index 69ef07ea9ae..a7f51b2c04f 100644 --- a/src/client/opamAdminCommand.ml +++ b/src/client/opamAdminCommand.ml @@ -422,6 +422,121 @@ let update_extrafiles_command cli = Term.(const cmd $ global_options cli $ hash_type_arg $ packages) +let migrate_extrafiles_command_doc = + "Move extra-files to extra-source." +let migrate_extrafiles_command cli = + let command = "migrate-extrafiles" in + let doc = migrate_extrafiles_command_doc in + let man = [ + `S Manpage.s_description; + `P "This command scans through package definitions, and migrates all \ + $(i,extra-files) fields to $(i,extra-source) as requested." + ] in + let hash_type_arg = + OpamArg.mk_opt ~cli OpamArg.(cli_from cli2_4) ["hash"] + "HASH_ALGO" "The hash, or hashes to be added" + OpamArg.hash_kinds `SHA256 + in + let packages = + OpamArg.mk_opt ~cli OpamArg.(cli_from cli2_4) ["p";"packages"] + "PACKAGES" "Only add extra files for the given packages" + Arg.(list OpamArg.package) [] + in + let local_dir_arg = + let doc = + Arg.info ~docv:"DIR" + ~doc:"Name of the local directory where to put the extra-files. \ + They will be put into \ + DIR/patches///filenameYY" [] + in + Arg.(required & pos 0 (some OpamArg.dirname) None & doc) + and url_prefix_arg = + let doc = + Arg.info ~docv:"URL" + ~doc:"Prefix of the URL to emit into extra-sources." [] + in + Arg.(required & pos 1 (some OpamArg.url) None & doc) + in + let cmd global_options kind packages local_dir url_prefix () = + OpamArg.apply_global_options cli global_options; + let repo_root = checked_repo_root () in + let pkg_prefixes = packages_with_prefixes repo_root packages in + let compute ?kind file = + OpamHash.compute ?kind (OpamFilename.to_string file) + in + let has_error = + OpamPackage.Map.fold (fun nv prefix has_error -> + let opam_file = OpamRepositoryPath.opam repo_root prefix nv in + let opam = OpamFile.OPAM.read opam_file in + let has_error = + let urlfile = OpamRepositoryPath.url repo_root prefix nv in + if OpamFile.exists urlfile then + (OpamConsole.warning + "Not updating external URL file at %s, \ + consider upgrading your repository with 'opam admin upgrade'" + (OpamFile.to_string urlfile); + true) + else has_error + in + let files_dir = OpamRepositoryPath.files repo_root prefix nv in + if OpamFilename.exists_dir files_dir then + (let files = + OpamFilename.rec_files files_dir + |> List.map (fun file -> + file, + OpamFilename.Base.of_string + (OpamFilename.remove_prefix files_dir file)) + in + match files with + | [] -> has_error + | _ -> + let hashes = + List.map (fun (file, base) -> + let xhash = compute ~kind file in + file, base, xhash) + files + in + let patch_prefix = "patches" in + let extra_sources = + List.map (fun (src, base, hash) -> + let name = OpamPackage.name_to_string nv in + let name_version = OpamPackage.to_string nv in + let dst_dir = OpamFilename.Op.( + local_dir / patch_prefix / name / name_version + ) in + let dst = OpamFilename.create dst_dir base in + (* copy file to dst, remove from files *) + OpamFilename.mkdir dst_dir; + OpamFilename.copy ~src ~dst; + let url = + let file = OpamFilename.Base.to_string base in + OpamFile.URL.create ~checksum:[hash] + OpamUrl.Op.(url_prefix / patch_prefix + / name / name_version/ file) + in + base, url) + hashes + in + OpamFilename.cleandir files_dir; + OpamFilename.rmdir_cleanup files_dir; + let my_extra_sources = OpamFile.OPAM.extra_sources opam in + let opam1 = + OpamFile.OPAM.with_extra_sources + (my_extra_sources @ extra_sources) opam + in + let opam1 = OpamFile.OPAM.with_extra_files_opt None opam1 in + OpamFile.OPAM.write_with_preserved_format opam_file opam1; + has_error) + else + has_error) + pkg_prefixes false + in + if has_error then OpamStd.Sys.exit_because `Sync_error + else OpamStd.Sys.exit_because `Success + in + OpamArg.mk_command ~cli OpamArg.(cli_from cli2_4) command ~doc ~man + Term.(const cmd $ global_options cli $ hash_type_arg $ packages + $ local_dir_arg $ url_prefix_arg) let add_hashes_command_doc = "Add archive hashes to an opam repository." @@ -1287,6 +1402,7 @@ let admin_subcommands cli = add_constraint_command cli; add_hashes_command cli; update_extrafiles_command cli; + migrate_extrafiles_command cli; help; ] diff --git a/tests/reftests/admin-migrate-extrafiles.test b/tests/reftests/admin-migrate-extrafiles.test new file mode 100644 index 00000000000..e81d0665e70 --- /dev/null +++ b/tests/reftests/admin-migrate-extrafiles.test @@ -0,0 +1,384 @@ +N0REP0 +### rm -r REPO +### +FOO +### +BAR +### +opam-version: "2.0" +### +pkgs="lorem ipsum dolor" +for n in $pkgs; do + for v in 1 2; do + pre=packages/$n/$n.$v + mkdir -p $pre + echo 'opam-version: "2.0"' > $pre/opam + done +done + +pre=packages/ipsum/ipsum.1 +echo 'extra-files: [ "foo" ]' >> $pre/opam +mkdir $pre/files +cp foo $pre/files/foo + +pre=packages/dolor/dolor.1 +cat >> $pre/opam << EOF +extra-files: [ "bar" ] +extra-source "baz" { + src: "https://anoth.er/url/baz" + checksum: "md5=0000000000000000000000000000000" +} +EOF +mkdir $pre/files +cp bar $pre/files/bar + +pre=packages/dolor/dolor.2 +echo 'extra-files: [[ "foo" ] [ "bar" ]]' >> $pre/opam +mkdir $pre/files +cp foo $pre/files/foo +cp bar $pre/files/bar +### sh generate.sh +### opam admin list +# Packages matching: available +# Name # Installed # Synopsis +dolor -- +ipsum -- +lorem -- +### opam-cat packages/lorem/lorem.1/opam +opam-version: "2.0" +### opam-cat packages/lorem/lorem.2/opam +opam-version: "2.0" +### opam-cat packages/ipsum/ipsum.1/opam +extra-files: ["foo"] +opam-version: "2.0" +### opam-cat packages/ipsum/ipsum.2/opam +opam-version: "2.0" +### opam-cat packages/dolor/dolor.1/opam +extra-files: ["bar"] +opam-version: "2.0" +extra-source "baz" { +src: "https://anoth.er/url/baz" +checksum: "md5=0000000000000000000000000000000" +} +### opam-cat packages/dolor/dolor.2/opam +extra-files: [["foo"] ["bar"]] +opam-version: "2.0" +### : required arguments +### opam admin migrate-extrafiles +opam admin: required arguments DIR, URL are missing +Usage: opam admin migrate-extrafiles [--hash=HASH_ALGO] [--packages=PACKAGES] [OPTION]… DIR URL +Try 'opam admin migrate-extrafiles --help' or 'opam admin --help' for more information. +# Return code 2 # +### opam admin migrate-extrafiles ./migrated +opam admin: required argument URL is missing +Usage: opam admin migrate-extrafiles [--hash=HASH_ALGO] [--packages=PACKAGES] [OPTION]… DIR URL +Try 'opam admin migrate-extrafiles --help' or 'opam admin --help' for more information. +# Return code 2 # +### #opam admin migrate-extrafiles https://an.url/prefix ./migrated +### : migrate all +### opam admin migrate-extrafiles ./migrated https://an.url/prefix +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### opam-cat packages/lorem/lorem.2/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### opam-cat packages/ipsum/ipsum.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/ipsum/ipsum.1/foo" +checksum: "sha256=HASH" +} +### opam-cat packages/ipsum/ipsum.2/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### opam-cat packages/dolor/dolor.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.1/bar" +checksum: "sha256=HASH" +} +extra-source "baz" { +src: "https://anoth.er/url/baz" +checksum: "md5=0000000000000000000000000000000" +} +### opam-cat packages/dolor/dolor.2/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.2/bar" +checksum: "sha256=HASH" +} +extra-source "foo" { +src: "https://an.url/prefix/patches/dolor/dolor.2/foo" +checksum: "sha256=HASH" +} +### find migrated | sort +migrated +migrated/patches +migrated/patches/dolor +migrated/patches/dolor/dolor.1 +migrated/patches/dolor/dolor.1/bar +migrated/patches/dolor/dolor.2 +migrated/patches/dolor/dolor.2/bar +migrated/patches/dolor/dolor.2/foo +migrated/patches/ipsum +migrated/patches/ipsum/ipsum.1 +migrated/patches/ipsum/ipsum.1/foo +### rm -rf migrated packages +### : select only some packages +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix --packages ipsum,dolor.2 +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### opam-cat packages/lorem/lorem.2/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### opam-cat packages/ipsum/ipsum.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/ipsum/ipsum.1/foo" +checksum: "sha256=HASH" +} +### opam-cat packages/ipsum/ipsum.2/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### opam-cat packages/dolor/dolor.1/opam | '=[0-9a-f]{64}' -> =HASH +extra-files: ["bar"] +opam-version: "2.0" +extra-source "baz" { +src: "https://anoth.er/url/baz" +checksum: "md5=0000000000000000000000000000000" +} +### opam-cat packages/dolor/dolor.2/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.2/bar" +checksum: "sha256=HASH" +} +extra-source "foo" { +src: "https://an.url/prefix/patches/dolor/dolor.2/foo" +checksum: "sha256=HASH" +} +### find migrated | sort +migrated +migrated/patches +migrated/patches/dolor +migrated/patches/dolor/dolor.2 +migrated/patches/dolor/dolor.2/bar +migrated/patches/dolor/dolor.2/foo +migrated/patches/ipsum +migrated/patches/ipsum/ipsum.1 +migrated/patches/ipsum/ipsum.1/foo +### rm -rf migrated packages +### : choose hash +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix --hash sha512 +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +### opam-cat packages/lorem/lorem.2/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +### opam-cat packages/ipsum/ipsum.1/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/ipsum/ipsum.1/foo" +checksum: "sha512=HASH" +} +### opam-cat packages/ipsum/ipsum.2/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +### opam-cat packages/dolor/dolor.1/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.1/bar" +checksum: "sha512=HASH" +} +extra-source "baz" { +src: "https://anoth.er/url/baz" +checksum: "md5=0000000000000000000000000000000" +} +### opam-cat packages/dolor/dolor.2/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.2/bar" +checksum: "sha512=HASH" +} +extra-source "foo" { +src: "https://an.url/prefix/patches/dolor/dolor.2/foo" +checksum: "sha512=HASH" +} +### find migrated | sort +migrated +migrated/patches +migrated/patches/dolor +migrated/patches/dolor/dolor.1 +migrated/patches/dolor/dolor.1/bar +migrated/patches/dolor/dolor.2 +migrated/patches/dolor/dolor.2/bar +migrated/patches/dolor/dolor.2/foo +migrated/patches/ipsum +migrated/patches/ipsum/ipsum.1 +migrated/patches/ipsum/ipsum.1/foo +### rm -rf migrated packages +### : all args +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix --hash sha512 --packages ipsum.1,dolor +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +### opam-cat packages/lorem/lorem.2/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +### opam-cat packages/ipsum/ipsum.1/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/ipsum/ipsum.1/foo" +checksum: "sha512=HASH" +} +### opam-cat packages/ipsum/ipsum.2/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +### opam-cat packages/dolor/dolor.1/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.1/bar" +checksum: "sha512=HASH" +} +extra-source "baz" { +src: "https://anoth.er/url/baz" +checksum: "md5=0000000000000000000000000000000" +} +### opam-cat packages/dolor/dolor.2/opam | '=[0-9a-f]{128}' -> =HASH +opam-version: "2.0" +extra-source "bar" { +src: "https://an.url/prefix/patches/dolor/dolor.2/bar" +checksum: "sha512=HASH" +} +extra-source "foo" { +src: "https://an.url/prefix/patches/dolor/dolor.2/foo" +checksum: "sha512=HASH" +} +### find migrated | sort +migrated +migrated/patches +migrated/patches/dolor +migrated/patches/dolor/dolor.1 +migrated/patches/dolor/dolor.1/bar +migrated/patches/dolor/dolor.2 +migrated/patches/dolor/dolor.2/bar +migrated/patches/dolor/dolor.2/foo +migrated/patches/ipsum +migrated/patches/ipsum/ipsum.1 +migrated/patches/ipsum/ipsum.1/foo +### rm -rf migrated packages +### : several trailing '/' +### +n=lorem +v=1 +pre=packages/$n/$n.$v +mkdir -p $pre +cat > $pre/opam << EOF +opam-version: "2.0" +extra-files: [ "foo" ] +EOF +mkdir -p $pre/files +cp foo $pre/files/foo +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix/ +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/lorem/lorem.1/foo" +checksum: "sha256=HASH" +} +### rm -rf migrated packages +### :--: +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix// +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix//patches/lorem/lorem.1/foo" +checksum: "sha256=HASH" +} +### rm -rf migrated packages +### : wrong checksum +### +n=lorem +v=1 +pre=packages/$n/$n.$v +mkdir -p $pre +cat > $pre/opam << EOF +opam-version: "2.0" +extra-files: [ "foo" "md5=000000000000000000000000000000000000000"] +EOF +mkdir -p $pre/files +cp foo $pre/files/foo +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix/ +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/lorem/lorem.1/foo" +checksum: "sha256=HASH" +} +### rm -rf migrated packages +### : empty files dir +### +n=lorem +v=1 +pre=packages/$n/$n.$v +mkdir -p $pre +cat > $pre/opam << EOF +opam-version: "2.0" +extra-files: [ "foo" ] +EOF +mkdir -p $pre/files +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix/ +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +extra-files: ["foo"] +opam-version: "2.0" +### rm -rf migrated packages +### : extra files not in opam file +### +n=lorem +v=1 +pre=packages/$n/$n.$v +mkdir -p $pre +cat > $pre/opam << EOF +opam-version: "2.0" +EOF +mkdir -p $pre/files +cp foo $pre/files/foo +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix/ +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +extra-source "foo" { +src: "https://an.url/prefix/patches/lorem/lorem.1/foo" +checksum: "sha256=HASH" +} +### rm -rf migrated packages +### : external extrafiles +### +n=lorem +v=1 +pre=packages/$n/$n.$v +mkdir -p $pre +cat > $pre/opam << EOF +opam-version: "2.0" +extra-files: ["https://y.et/another/url"] +EOF +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix/ +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +extra-files: ["https://y.et/another/url"] +opam-version: "2.0" +### rm -rf migrated packages +### : old url file presence +### +n=lorem +v=1 +pre=packages/$n/$n.$v +mkdir -p $pre +echo 'opam-version: "2.0"' > $pre/opam +echo 'extra-files: [ "foo" ]' > $pre/url +mkdir -p $pre/files +### sh generate.sh +### opam admin migrate-extrafiles ./migrated https://an.url/prefix/ +[WARNING] Not updating external URL file at ${BASEDIR}/packages/lorem/lorem.1/url, consider upgrading your repository with 'opam admin upgrade' +# Return code 40 # +### opam-cat packages/lorem/lorem.1/opam | '=[0-9a-f]{64}' -> =HASH +opam-version: "2.0" +### rm -rf migrated packages diff --git a/tests/reftests/dune.inc b/tests/reftests/dune.inc index 479710810d0..22d075fe482 100644 --- a/tests/reftests/dune.inc +++ b/tests/reftests/dune.inc @@ -20,6 +20,27 @@ %{targets} (run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:admin-cache.test} %{read-lines:testing-env})))) +(rule + (alias reftest-admin-migrate-extrafiles) + (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1)))) + (action + (diff admin-migrate-extrafiles.test admin-migrate-extrafiles.out))) + +(alias + (name reftest) + (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1)))) + (deps (alias reftest-admin-migrate-extrafiles))) + +(rule + (targets admin-migrate-extrafiles.out) + (deps root-N0REP0) + (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1)))) + (package opam) + (action + (with-stdout-to + %{targets} + (run ./run.exe %{exe:../../src/client/opamMain.exe.exe} %{dep:admin-migrate-extrafiles.test} %{read-lines:testing-env})))) + (rule (alias reftest-admin) (enabled_if (and (or (<> %{env:TESTALL=1} 0) (= %{env:TESTN0REP0=0} 1)))) From 35361c4799285226e14eafa4e59160616efbaabf Mon Sep 17 00:00:00 2001 From: Kate Date: Sat, 16 Nov 2024 14:30:20 +0000 Subject: [PATCH 4/4] Delete trailing whitespace from generated opam-topics.inc and opam-admin-topics.inc files --- doc/man/dune_man.ml | 2 +- doc/man/opam-admin-topics.inc | 26 ++++++++-------- doc/man/opam-topics.inc | 56 +++++++++++++++++------------------ 3 files changed, 42 insertions(+), 42 deletions(-) diff --git a/doc/man/dune_man.ml b/doc/man/dune_man.ml index ec2ddf30d0f..af091cb8756 100644 --- a/doc/man/dune_man.ml +++ b/doc/man/dune_man.ml @@ -38,5 +38,5 @@ let () = \ (section man)\n\ \ (package opam)\n\ \ (files%s))\n" - (String.concat " " + (String.concat "" (List.map (Printf.sprintf "\n %s-%s.1" target_basename) topics)) diff --git a/doc/man/opam-admin-topics.inc b/doc/man/opam-admin-topics.inc index 4123a149bc6..ea30bce693c 100644 --- a/doc/man/opam-admin-topics.inc +++ b/doc/man/opam-admin-topics.inc @@ -144,17 +144,17 @@ (section man) (package opam) (files - opam-admin-help.1 - opam-admin-migrate-extrafiles.1 - opam-admin-update-extrafiles.1 - opam-admin-add-hashes.1 - opam-admin-add-constraint.1 - opam-admin-filter.1 - opam-admin-list.1 - opam-admin-compare-versions.1 - opam-admin-check.1 - opam-admin-lint.1 - opam-admin-upgrade.1 - opam-admin-cache.1 - opam-admin-make.1 + opam-admin-help.1 + opam-admin-migrate-extrafiles.1 + opam-admin-update-extrafiles.1 + opam-admin-add-hashes.1 + opam-admin-add-constraint.1 + opam-admin-filter.1 + opam-admin-list.1 + opam-admin-compare-versions.1 + opam-admin-check.1 + opam-admin-lint.1 + opam-admin-upgrade.1 + opam-admin-cache.1 + opam-admin-make.1 opam-admin-index.1)) diff --git a/doc/man/opam-topics.inc b/doc/man/opam-topics.inc index f58490e3ef9..3969f6b3acf 100644 --- a/doc/man/opam-topics.inc +++ b/doc/man/opam-topics.inc @@ -294,32 +294,32 @@ (section man) (package opam) (files - opam-help.1 - opam-admin.1 - opam-lock.1 - opam-clean.1 - opam-lint.1 - opam-source.1 - opam-unpin.1 - opam-pin.1 - opam-switch.1 - opam-remote.1 - opam-repository.1 - opam-env.1 - opam-exec.1 - opam-config.1 - opam-option.1 - opam-var.1 - opam-upgrade.1 - opam-update.1 - opam-reinstall.1 - opam-uninstall.1 - opam-remove.1 - opam-install.1 - opam-info.1 - opam-show.1 - opam-why.1 - opam-tree.1 - opam-search.1 - opam-list.1 + opam-help.1 + opam-admin.1 + opam-lock.1 + opam-clean.1 + opam-lint.1 + opam-source.1 + opam-unpin.1 + opam-pin.1 + opam-switch.1 + opam-remote.1 + opam-repository.1 + opam-env.1 + opam-exec.1 + opam-config.1 + opam-option.1 + opam-var.1 + opam-upgrade.1 + opam-update.1 + opam-reinstall.1 + opam-uninstall.1 + opam-remove.1 + opam-install.1 + opam-info.1 + opam-show.1 + opam-why.1 + opam-tree.1 + opam-search.1 + opam-list.1 opam-init.1))