@@ -1912,6 +1912,60 @@ def update_plugins(plugin_name: str):
19121912 return update_results
19131913
19141914
1915+ def extract_metadata (plugin_name : str ) -> dict :
1916+ metadata_file = Path (RECKLESS_CONFIG .reckless_dir ) / plugin_name / '.metadata'
1917+ if not metadata_file .exists ():
1918+ return None
1919+
1920+ with open (metadata_file , 'r' ) as md :
1921+ lines = md .readlines ()
1922+ metadata_headers = ['installation date' ,
1923+ 'installation time' ,
1924+ 'original source' ,
1925+ 'requested commit' ,
1926+ 'installed commit'
1927+ ]
1928+ metadata = {}
1929+ current_key = None
1930+
1931+ for line in lines :
1932+ if line .strip () in metadata_headers :
1933+ current_key = line .strip ()
1934+ continue
1935+
1936+ if current_key :
1937+ metadata .update ({current_key : line .strip ()})
1938+ current_key = None
1939+
1940+ return metadata
1941+
1942+
1943+ def listinstalled ():
1944+ """list all plugins currently managed by reckless"""
1945+ dir_contents = os .listdir (RECKLESS_CONFIG .reckless_dir )
1946+ plugins = {}
1947+ for plugin in dir_contents :
1948+ if (Path (RECKLESS_CONFIG .reckless_dir ) / plugin ).is_dir ():
1949+ # skip hidden dirs such as reckless' .remote_sources
1950+ if plugin [0 ] == '.' :
1951+ continue
1952+ plugins .update ({plugin : None })
1953+ longest = {'name' : 0 ,
1954+ 'inst' : 0 }
1955+ # Format output in a simple table
1956+ name_len = 0
1957+ inst_len = 0
1958+ for plugin in plugins .keys ():
1959+ md = extract_metadata (plugin )
1960+ name_len = max (name_len , len (plugin ) + 1 )
1961+ inst_len = max (inst_len , len (md ['installed commit' ]) + 1 )
1962+ for plugin in plugins .keys ():
1963+ md = extract_metadata (plugin )
1964+ log .info (f"{ plugin :<{name_len }} { md ['installed commit' ]:<{inst_len }} { md ['installation date' ]:<11} enabled" )
1965+ plugins [plugin ] = md
1966+ return plugins
1967+
1968+
19151969def report_version () -> str :
19161970 """return reckless version"""
19171971 log .info (__VERSION__ )
@@ -2011,6 +2065,9 @@ if __name__ == '__main__':
20112065 update .add_argument ('targets' , type = str , nargs = '*' )
20122066 update .set_defaults (func = update_plugins )
20132067
2068+ list_cmd = cmd1 .add_parser ('list' , help = 'list reckless-installed plugins' )
2069+ list_cmd .set_defaults (func = listinstalled )
2070+
20142071 help_cmd = cmd1 .add_parser ('help' , help = 'for contextual help, use '
20152072 '"reckless <cmd> -h"' )
20162073 help_cmd .add_argument ('targets' , type = str , nargs = '*' )
@@ -2021,7 +2078,7 @@ if __name__ == '__main__':
20212078
20222079 all_parsers = [parser , install_cmd , uninstall_cmd , search_cmd , enable_cmd ,
20232080 disable_cmd , list_parse , source_add , source_rem , help_cmd ,
2024- update ]
2081+ update , list_cmd ]
20252082 for p in all_parsers :
20262083 # This default depends on the .lightning directory
20272084 p .add_argument ('-d' , '--reckless-dir' , action = StoreIdempotent ,
0 commit comments