diff options
author | Fred Hebert <mononcqc@ferd.ca> | 2016-06-09 21:30:42 -0400 |
---|---|---|
committer | Fred Hebert <mononcqc@ferd.ca> | 2016-06-09 21:30:42 -0400 |
commit | 589eaf13e1de55695cea4f34719c22c4b6467734 (patch) | |
tree | ec9744644482f074fa65e2efbe0aaa3bbc80b8f6 /src | |
parent | 760ffdc79d19ffff732915b2abaa81ecdbeeef91 (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.erl | 23 |
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. |