Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions sphinx/commands.rst
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,8 @@ Where options are:

* :code:`--create BOOL` Change project creation status

* :code:`--cross TARGET` Build opam packages for cross-compilation (TARGET=windows|osx)

* :code:`--diff` Print a diff of user-modified files that are being skipped

* :code:`--doc BOOL` Whether dependency is only for doc
Expand Down Expand Up @@ -703,7 +705,7 @@ Update an existing project

This command is used to regenerate the files of a project after updating its description.

With argument **--upgrade**, it can also be used to reformat the toml files, from their skeletons.
When generating the files of a project, drom also reformats the toml files, from their skeletons.

**USAGE**
::
Expand Down Expand Up @@ -745,8 +747,6 @@ Where options are:

* :code:`--unskip FILE` Remove FILE from skip list

* :code:`--upgrade` Force upgrade of the drom.toml file from the skeleton

* :code:`--virtual` Package is virtual, i.e. no code. Equivalent to **--skeleton virtual**.


Expand Down
24 changes: 3 additions & 21 deletions src/drom_lib/commandDep.ml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ let print_dep (name, d) =
let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
~depopt ~update_args =
let p, _inferred_dir = Project.get () in
let upgrade = ref update_args.arg_upgrade in
let update package_kind dep_kind deps setdeps =
match dep with
| None ->
Expand Down Expand Up @@ -63,7 +62,6 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
dep_pin = None ; (* TODO *)
}
in
upgrade := true;
Printf.eprintf "Adding %s %s dependency %S\n%!" package_kind dep_kind
dep;
setdeps ((dep, d) :: deps)
Expand All @@ -74,7 +72,6 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
if remove then begin
let deps = List.filter (fun (name, _) -> name <> dep) deps in
setdeps deps;
upgrade := true;
Printf.eprintf "Removed %s %s dependency %S\n%!" package_kind dep_kind
dep
end else
Expand All @@ -86,7 +83,6 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
match version with
| None -> d
| Some version ->
upgrade := true;
{ d with
depversions = Package.versions_of_string version
}
Expand All @@ -95,7 +91,6 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
match depname with
| None -> d
| Some depname ->
upgrade := true;
{ d with
depname =
( if depname = dep then
Expand All @@ -108,28 +103,21 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
match deptest with
| None -> d
| Some deptest ->
upgrade := true;
{ d with deptest }
in
let d =
match depdoc with
| None -> d
| Some depdoc ->
upgrade := true;
{ d with depdoc }
in
let d =
match depopt with
| None -> d
| Some depopt ->
upgrade := true;
{ d with depopt }
in

if not !upgrade then begin
print_dep (dep, d);
exit 0
end;
Printf.eprintf "Updating %s %s dependency %S\n%!" package_kind
dep_kind dep;
(name, d)
Expand Down Expand Up @@ -167,15 +155,9 @@ let action ~dep ~package ~tool ~add ~remove ~version ~depname ~deptest ~depdoc
p.packages
end;

if !upgrade then (
let share = Share.load ~share_args:update_args.arg_share ~p () in
let update_args = { update_args with
arg_upgrade = !upgrade ;
}
in
Update.update_files share ~twice:false ~git:true p ~update_args;
()
)
let share = Share.load ~share_args:update_args.arg_share ~p () in
Update.update_files share ~twice:false ~git:true p ~update_args;
()

let generate_opam_for_cross ~cross ~update_args () =
let share_args = update_args.arg_share in
Expand Down
1 change: 0 additions & 1 deletion src/drom_lib/commandNew.ml
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,6 @@ let cmd =
let skeleton = ref None in
let dir = ref None in
let update_args, update_specs = Update.args ~set_share:true () in
update_args.arg_upgrade <- true;
EZCMD.sub cmd_name
~args:
( update_specs
Expand Down
128 changes: 59 additions & 69 deletions src/drom_lib/commandPackage.ml
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,11 @@ let rename_package hashes package new_name =

{ package with dir = new_dir; name = new_name }

let upgrade_package package licenses ~upgrade ~kind ~files =
let upgrade_package package licenses ~kind ~files =
( match kind with
| None -> ()
| Some kind ->
package.kind <- kind;
upgrade := true );
package.kind <- kind );

begin
match files with
Expand Down Expand Up @@ -165,43 +164,39 @@ let action ~edit ~package_name ~kind ~dir ?create ~remove ?rename ~update_args ~
p
in
let share = Share.load ~share_args ~p () in
let upgrade =
Hashes.with_ctxt ~git:true (fun hashes ->
Hashes.with_ctxt ~git:true (fun hashes ->
if remove then begin
if create <> None then
Error.raise "--remove and --create are incompatible";

if remove then begin
if create <> None then
Error.raise "--remove and --create are incompatible";

if p.package.name = name then Error.raise "Cannot remove main package";
if List.for_all (fun package -> package.name <> name) p.packages then
Error.raise "No such package to remove";
p.packages <-
List.filter
(fun package ->
if package.name = name then begin
remove_package hashes package;
false
end else
true )
p.packages;
true
end else
let upgrade =
match create with
| Some skeleton ->
if p.package.name = name then Error.raise "Cannot remove main package";
if List.for_all (fun package -> package.name <> name) p.packages then
Error.raise "No such package to remove";
p.packages <-
List.filter
(fun package ->
if package.name = name then begin
remove_package hashes package;
false
end else
true )
p.packages
end else
begin match create with
| Some skeleton ->
if List.exists (fun package -> package.name = name) p.packages
then
Error.raise "A package with this name already exists";
let dir =
match dir with
| None ->
let dir =
if inferred_dir = "" then
"src"
else
inferred_dir
in
dir // name
let dir =
if inferred_dir = "" then
"src"
else
inferred_dir
in
dir // name
| Some dir -> dir
in
let kind =
Expand All @@ -217,52 +212,47 @@ let action ~edit ~package_name ~kind ~dir ?create ~remove ?rename ~update_args ~
match list with
| [] -> package
| content :: super ->
let package = iter_skeleton super in
let content = Subst.package
(Subst.state () share package) content in
Package.of_string ~msg:"package.toml template" content
let package = iter_skeleton super in
let content = Subst.package
(Subst.state () share package) content in
Package.of_string ~msg:"package.toml template" content
in
let skeleton = Skeleton.lookup_package share skeleton in
let package = iter_skeleton skeleton.skeleton_toml in
p.packages <- p.packages @ [ package ];
true
| None -> (
p.packages <- p.packages @ [ package ]
| None -> (
if List.for_all (fun package -> package.name <> name) p.packages
then
Error.raise "No such package to modify";
if dir <> None then
Error.raise "Option --dir is not available for update";
match rename with
| Some new_name ->
if p.package.name = name then
Error.raise "Cannot rename main package";
if
List.exists
(fun package -> package.name = new_name)
p.packages
then
Error.raise
"Cannot rename to an already existing package name";
p.packages <-
List.map
(fun package ->
if package.name = name then
rename_package hashes package new_name
else
package )
p.packages;
true
| None -> edit )
in
let upgrade = ref upgrade in
List.iter
(fun package ->
if package.name = name then
upgrade_package package share ~upgrade ~kind ~files )
p.packages;
!upgrade )
in
let update_args = { update_args with arg_upgrade = upgrade } in
if p.package.name = name then
Error.raise "Cannot rename main package";
if
List.exists
(fun package -> package.name = new_name)
p.packages
then
Error.raise
"Cannot rename to an already existing package name";
p.packages <-
List.map
(fun package ->
if package.name = name then
rename_package hashes package new_name
else
package )
p.packages
| None -> ())
end;
List.iter
(fun package ->
if package.name = name then
upgrade_package package share ~kind ~files )
p.packages
);
let twice = create <> None in
Update.update_files share ~twice ~git:true p ~update_args;
()
Expand Down
32 changes: 5 additions & 27 deletions src/drom_lib/commandProject.ml
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,6 @@ let action ~skeleton ~edit ~update_args =
in
(* Used to check that the project exists. *)
let _sk : skeleton = Skeleton.lookup_project share skeleton in
let update_args =
{ update_args with
arg_upgrade =
( if p.skeleton <> Some skeleton then begin
p.skeleton <- Some skeleton;
true
end else
update_args.arg_upgrade )
}
in
Update.update_files share ~twice:false ~update_args ~git:true p

let cmd =
Expand All @@ -67,42 +57,30 @@ let cmd =
( update_specs
@ [ ( [ "library" ],
Arg.Unit
(fun () ->
skeleton := Some "library";
update_args.arg_upgrade <- true ),
(fun () -> skeleton := Some "library"),
EZCMD.info
"Project contains only a library. Equivalent to $(b,--skeleton \
library)" );
( [ "program" ],
Arg.Unit
(fun () ->
skeleton := Some "program";
update_args.arg_upgrade <- true ),
(fun () -> skeleton := Some "program"),
EZCMD.info
"Project contains a program. Equivalent to $(b,--skeleton \
program). The generated project will be composed of a \
$(i,library) package and a $(i,driver) package calling the \
$(b,Main.main) of the library." );
( [ "virtual" ],
Arg.Unit
(fun () ->
skeleton := Some "virtual";
update_args.arg_upgrade <- true ),
(fun () -> skeleton := Some "virtual"),
EZCMD.info
"Package is virtual, i.e. no code. Equivalent to $(b,--skeleton \
virtual)." );
( [ "skeleton" ],
Arg.String
(fun s ->
skeleton := Some s;
update_args.arg_upgrade <- true ),
(fun s -> skeleton := Some s),
EZCMD.info ~docv:"SKELETON"
"Create project using a predefined skeleton or one specified in \
~/.config/drom/skeletons/" );
( [ "upgrade" ],
Arg.Unit (fun () -> update_args.arg_upgrade <- true),
EZCMD.info "Force upgrade of the drom.toml file from the skeleton"
);
([ "edit" ], Arg.Set edit, EZCMD.info "Edit project description");
] )
~doc:"Update an existing project"
Expand All @@ -113,7 +91,7 @@ let cmd =
"This command is used to regenerate the files of a project after \
updating its description.";
`P
"With argument $(b,--upgrade), it can also be used to reformat \
"When generating the files of a project, drom also reformats \
the toml files, from their skeletons."
]
]
3 changes: 1 addition & 2 deletions src/drom_lib/types.ml
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,7 @@ type share_args = {
}

type update_args =
{ mutable arg_upgrade : bool;
mutable arg_force : bool;
{ mutable arg_force : bool;
mutable arg_diff : bool;
mutable arg_skip : (bool * string) list;
mutable arg_promote_skip : bool;
Expand Down
Loading
Loading