summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFred Hebert <mononcqc@ferd.ca>2016-06-09 21:30:42 -0400
committerFred Hebert <mononcqc@ferd.ca>2016-06-09 21:30:42 -0400
commit589eaf13e1de55695cea4f34719c22c4b6467734 (patch)
treeec9744644482f074fa65e2efbe0aaa3bbc80b8f6 /src
parent760ffdc79d19ffff732915b2abaa81ecdbeeef91 (diff)
Hashes in lockfile are diff friendly
This reworks the version and hash printing in the lockfile to minimize diff changes: - the version is on its own line so that the locks are mostly the same aside from the last line - the hashes are each printed on one line with the package name for simpler diffing too.
Diffstat (limited to 'src')
-rw-r--r--src/rebar_config.erl23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/rebar_config.erl b/src/rebar_config.erl
index 031df8b..828c45d 100644
--- a/src/rebar_config.erl
+++ b/src/rebar_config.erl
@@ -82,10 +82,29 @@ write_lock_file(LockFile, Locks) ->
file:write_file(LockFile, io_lib:format("~p.~n", [NewLocks]));
_ ->
file:write_file(LockFile,
- io_lib:format("{~p,~p}.~n~p.~n",
- [?CONFIG_VERSION, NewLocks, Attrs]))
+ io_lib:format("{~p,~n~p}.~n[~n~s~n].~n",
+ [?CONFIG_VERSION, NewLocks,
+ format_attrs(Attrs)]))
end.
+%% Attributes have a special formatting to ensure there's only one per
+%% line in terms of pkg_hash, so we disturb source diffing as little
+%% as possible.
+format_attrs([]) -> [];
+format_attrs([{pkg_hash, Vals}|T]) ->
+ [io_lib:format("{pkg_hash,[~n",[]), format_hashes(Vals), "]}",
+ maybe_comma(T) | format_attrs(T)];
+format_attrs([H|T]) ->
+ [io_lib:format("~p~s", [H, maybe_comma(T)]) | format_attrs(T)].
+
+format_hashes([]) -> [];
+format_hashes([{Pkg,Hash}|T]) ->
+ [" {", io_lib:format("~p",[Pkg]), ", ", io_lib:format("~p", [Hash]), "}",
+ maybe_comma(T) | format_hashes(T)].
+
+maybe_comma([]) -> "";
+maybe_comma([_|_]) -> io_lib:format(",~n", []).
+
read_attrs(_Vsn, Locks, Attrs) ->
%% Beta copy does not know how to expand attributes, but
%% is ready to support it.