diff --git a/src/rebar_config.erl b/src/rebar_config.erl index e869567a..ac7cacd4 100644 --- a/src/rebar_config.erl +++ b/src/rebar_config.erl @@ -31,6 +31,7 @@ ,consult_app_file/1 ,consult_file/1 ,consult_lock_file/1 + ,maybe_write_lock_file/3 ,write_lock_file/2 ,verify_config_format/1 ,format_error/1 @@ -110,6 +111,21 @@ warn_vsn_once() -> "upgrade Rebar3.", []) end. +%% Only call `write_lock_file/2' if the locks have changed. +maybe_write_lock_file(LockFile, Locks, OldLocks) when Locks =/= OldLocks -> + write_lock_file(LockFile, Locks); +maybe_write_lock_file(LockFile, Locks, Locks) -> + %% rewrite if the configured format would have changed + Terms = consult_file_(LockFile), + case Terms of + [] -> + ok; + [{?CONFIG_VERSION, FileLocks}|_] when is_list(FileLocks) -> + ok; + _ -> + write_lock_file(LockFile, Locks) + end. + %% @doc Converts the internal format for locks into the multi-version %% compatible one used within rebar3 lock files. %% @end diff --git a/src/rebar_prv_lock.erl b/src/rebar_prv_lock.erl index 570c03f4..03cf36ca 100644 --- a/src/rebar_prv_lock.erl +++ b/src/rebar_prv_lock.erl @@ -35,7 +35,7 @@ do(State) -> OldLocks = rebar_state:get(State, {locks, default}, []), Locks = lists:keysort(1, build_locks(State)), Dir = rebar_state:dir(State), - rebar_config:write_lock_file(filename:join(Dir, ?LOCK_FILE), Locks), + rebar_config:maybe_write_lock_file(filename:join(Dir, ?LOCK_FILE), Locks, OldLocks), State1 = rebar_state:set(State, {locks, default}, Locks), OldLockNames = [element(1,L) || L <- OldLocks],