2016-09-22 14:54:23 +08:00
# include "vcpkg_Commands.h"
# include "vcpkg.h"
# include "vcpkg_System.h"
2016-11-08 09:37:08 +08:00
# include "vcpkglib_helpers.h"
2016-09-22 14:54:23 +08:00
2017-01-13 14:03:57 +08:00
namespace vcpkg : : Commands : : List
2016-09-22 14:54:23 +08:00
{
2016-11-08 06:39:52 +08:00
static void do_print ( const StatusParagraph & pgh )
{
System : : println ( " %-27s %-16s %s " ,
pgh . package . displayname ( ) ,
pgh . package . version ,
2016-11-08 09:37:08 +08:00
details : : shorten_description ( pgh . package . description ) ) ;
2016-11-08 06:39:52 +08:00
}
2017-01-13 14:03:57 +08:00
void perform_and_exit ( const vcpkg_cmd_arguments & args , const vcpkg_paths & paths )
2016-09-22 14:54:23 +08:00
{
2016-11-08 06:39:52 +08:00
static const std : : string example = Strings : : format (
2017-01-13 14:03:57 +08:00
" The argument should be a substring to search for, or no argument to display all installed libraries. \n %s " , Commands : : Help : : create_example_string ( " list png " ) ) ;
2016-12-13 07:03:36 +08:00
args . check_max_arg_count ( 1 , example ) ;
2016-09-22 14:54:23 +08:00
2016-11-08 06:39:52 +08:00
const StatusParagraphs status_paragraphs = database_load_check ( paths ) ;
std : : vector < StatusParagraph > installed_packages ;
for ( auto & & pgh : status_paragraphs )
2016-09-22 14:54:23 +08:00
{
if ( pgh - > state = = install_state_t : : not_installed & & pgh - > want = = want_t : : purge )
continue ;
2016-11-08 06:39:52 +08:00
installed_packages . push_back ( * pgh ) ;
}
if ( installed_packages . empty ( ) )
{
System : : println ( " No packages are installed. Did you mean `search`? " ) ;
exit ( EXIT_SUCCESS ) ;
2016-09-22 14:54:23 +08:00
}
2016-11-08 06:39:52 +08:00
std : : sort ( installed_packages . begin ( ) , installed_packages . end ( ) ,
[ ] ( const StatusParagraph & lhs , const StatusParagraph & rhs ) - > bool
{
return lhs . package . displayname ( ) < rhs . package . displayname ( ) ;
} ) ;
if ( args . command_arguments . size ( ) = = 0 )
2016-09-22 14:54:23 +08:00
{
2016-11-08 06:39:52 +08:00
for ( const StatusParagraph & status_paragraph : installed_packages )
{
do_print ( status_paragraph ) ;
}
2016-09-22 14:54:23 +08:00
}
2016-11-08 06:39:52 +08:00
else
2016-09-22 14:54:23 +08:00
{
2016-11-08 06:39:52 +08:00
// At this point there is 1 argument
for ( const StatusParagraph & status_paragraph : installed_packages )
{
const std : : string displayname = status_paragraph . package . displayname ( ) ;
if ( Strings : : case_insensitive_ascii_find ( displayname , args . command_arguments [ 0 ] ) = = displayname . end ( ) )
{
continue ;
}
do_print ( status_paragraph ) ;
}
2016-09-22 14:54:23 +08:00
}
2016-11-08 06:39:52 +08:00
2016-09-22 14:54:23 +08:00
exit ( EXIT_SUCCESS ) ;
}
}