@ -9,7 +9,7 @@
- include ( " rebar.hrl " ) .
- define ( PROVIDER , deps ) .
- define ( DEPS , [ app_discovery ] ) .
- define ( DEPS , [ install_deps ] ) .
- spec init ( rebar_state : t ( ) ) - > { ok , rebar_state : t ( ) } .
init ( State ) - >
@ -22,54 +22,127 @@ init(State) ->
{ deps , ? DEPS } ,
{ example , " rebar3 deps " } ,
{ short_desc , " List dependencies " } ,
{ desc , " List dependencies. Those not matching lock files "
" are followed by an asterisk (*). " } ,
{ desc , " List dependencies. Those not matching "
" the config file are followed by "
" an asterisk (*). " } ,
{ opts , [ ] } ] ) ) ,
{ ok , State1 } .
- spec do ( rebar_state : t ( ) ) - > { ok , rebar_state : t ( ) } | { error , string ( ) } .
do ( State ) - >
Profiles = rebar_state : current_profiles ( State ) ,
[ display ( State , Profile , rebar_state : get ( State , { parsed_deps , Profile } , [ ] ) )
| | Profile < - Profiles ] ,
[ display ( State , Profile ) | | Profile < - Profiles ] ,
{ ok , State } .
- spec format_error ( any ( ) ) - > iolist ( ) .
format_error ( Reason ) - >
io_lib : format ( " ~p " , [ Reason ] ) .
display ( State , default , Deps ) - >
display_deps ( State , Deps ) ,
display ( State , Profile = default ) - >
display_profile_deps ( State , Profile ) ,
? CONSOLE ( " " , [ ] ) ;
display ( State , Profile , Deps ) - >
display ( State , Profile ) - >
? CONSOLE ( " -- ~p -- " , [ Profile ] ) ,
display ( State , default , Deps ) .
display_deps ( State , Deps ) - >
lists : foreach ( fun ( Dep ) - > display_dep ( State , Dep ) end , Deps ) .
display_dep ( State , Dep ) - >
DepWithSource = rebar_app_utils : expand_deps_sources ( Dep , State ) ,
Name = rebar_utils : to_binary ( rebar_app_info : name ( DepWithSource ) ) ,
NeedsUpdateSuffix = case rebar_fetch : needs_update ( DepWithSource , State ) of
true - > " * " ;
false - > " "
end ,
IsLockedPrefix = case rebar_app_info : is_lock ( DepWithSource ) of
true - > " locked " ;
_ - > " "
end ,
CommonConsoleArgs = [ Name , NeedsUpdateSuffix , IsLockedPrefix ] ,
Source = rebar_app_info : source ( DepWithSource ) ,
case Source of
{ pkg , _ Name , Vsn , _ Hash , _ RepoConfig } - >
VsnBinary = rebar_utils : to_binary ( Vsn ) ,
? CONSOLE ( " ~ ts ~ ts ( ~ tspackage ~ ts) " , CommonConsoleArgs ++ [ VsnBinary ] ) ;
display_profile_deps ( State , Profile ) ,
? CONSOLE ( " " , [ ] ) .
display_profile_deps ( State , Profile ) - >
DepsDir = rebar_prv_install_deps : profile_dep_dir ( State , Profile ) ,
ProfileDeps = rebar_state : get ( State , { deps , Profile } , [ ] ) ,
% ProfileDeps include those deps from rebar . lock that have been
% removed from rebar . config
ConfiguredDeps = [ parse_dep_without_locks ( DepsDir , Dep , State )
| | Dep < - ProfileDeps ] ,
LockedDepsMap = locked_deps_map ( State , Profile ) ,
[ display_dep ( State , Dep , LockedDepsMap ) | | Dep < - ConfiguredDeps ] .
parse_dep_without_locks ( DepsDir , Dep , State ) - >
ParsedDep = rebar_app_utils : parse_dep ( Dep , root , DepsDir , State , [ ] , 0 ) ,
case Dep of
{ _ Name , Src , Level } when is_tuple ( Src ) , is_integer ( Level ) - >
% This Dep is not in rebar . config but in rebar . lock
rebar_app_info : source ( ParsedDep , undefined ) ;
_ - >
? CONSOLE ( " ~ ts ~ ts ( ~ ts ~ ts source) " , CommonConsoleArgs ++ [ type ( Source ) ] )
rebar_app_utils : expand_deps_sources ( ParsedDep , State )
end .
type ( Source ) when is_tuple ( Source ) - > element ( 1 , Source ) .
locked_deps_map ( State , Profile ) - >
ParsedDeps = rebar_state : get ( State , { parsed_deps , Profile } , [ ] ) ,
lists : foldl ( fun ( Dep , DepsIn ) - >
case rebar_app_info : is_lock ( Dep ) of
true - >
DepName = rebar_app_info : name ( Dep ) ,
DepsIn #{ rebar_utils : to_binary ( DepName ) = > Dep } ;
_ - >
DepsIn
end
end , #{ } , ParsedDeps ) .
display_dep ( State , Dep , LockedDeps ) - >
Name = rebar_utils : to_binary ( rebar_app_info : name ( Dep ) ) ,
NeedsUpdate = rebar_fetch : needs_update ( Dep , State ) ,
Source = rebar_app_info : source ( Dep ) ,
LockedSource = case maps : get ( Name , LockedDeps , undefined ) of
undefined - > undefined ;
LockedDep - > rebar_app_info : source ( LockedDep )
end ,
display_dep_line ( Name , NeedsUpdate , source_text ( LockedSource ) , source_text ( Source ) ) .
% Dep is a checkout
display_dep_line ( Name , _ NeedsUpdate , _ LockedSource , Source = checkout ) - >
? CONSOLE ( " ~ ts* ( ~ ts) " , [ Name , Source ] ) ;
% Dep exists only in lock file
display_dep_line ( Name , _ NeedsUpdate , LockedSource , _ Source = undefined ) - >
? CONSOLE ( " ~ ts* (locked ~ ts <> none) " , [ Name , LockedSource ] ) ;
% Dep not locked , report whether the disk copy matches the Source
display_dep_line ( Name , true , undefined , Source ) - >
? CONSOLE ( " ~ ts* ( ~ ts) " , [ Name , Source ] ) ;
display_dep_line ( Name , _ , undefined , Source ) - >
? CONSOLE ( " ~ ts ( ~ ts) " , [ Name , Source ] ) ;
% Dep locked , install_deps provider should have had updated the disk copy with
% the locked version
display_dep_line ( Name , false , _ LockedSource , Source ) - >
% dep locked and no need to update ( LockedSource and Source might not match
% because of one using { ref , X } and the other { tag , Y } )
? CONSOLE ( " ~ ts (locked ~ ts) " , [ Name , Source ] ) ;
display_dep_line ( Name , _ NeedsUpdate , LockedSource , Source ) - >
% dep locked with mismatching lock and config files
? CONSOLE ( " ~ ts* (locked ~ ts <> ~ ts) " , [ Name , LockedSource , Source ] ) .
source_text ( Source ) when is_list ( Source ) ; is_atom ( Source ) - >
Source ;
source_text ( { pkg , _ Name , Vsn , _ Hash , _ RepoConfig } ) - >
source_text ( { pkg , _ Name , Vsn , _ Hash } ) ;
source_text ( { pkg , _ Name , Vsn , _ Hash } ) - >
[ < < " package " > > , " " , rebar_utils : to_binary ( Vsn ) ] ;
source_text ( Source ) when is_tuple ( Source ) , tuple_size ( Source ) < 3 - >
element ( 1 , Source ) ;
source_text ( Source ) when is_tuple ( Source ) - >
Type = element ( 1 , Source ) ,
case element ( 3 , Source ) of
{ ref , Ref } - >
SmallRef = case rebar_utils : to_binary ( Ref ) of
< < R : 7 / binary , _ / binary > > - > < < R / binary , " ... " > > ;
R - > R
end ,
[ atom_to_binary ( Type , unicode ) , " source " , SmallRef ] ;
{ _ , Vsn } - >
[ atom_to_binary ( Type , unicode ) , " source " , rebar_utils : to_binary ( Vsn ) ] ;
_ - >
[ atom_to_binary ( Type , unicode ) , " source " ]
end .