2016-09-22 14:49:20 +08:00
# include "vcpkg_Commands.h"
# include "vcpkg_System.h"
# include "vcpkg_Files.h"
2016-11-08 08:06:36 +08:00
# include "Paragraphs.h"
2016-11-08 09:32:27 +08:00
# include "BinaryParagraph.h"
2016-09-22 14:49:20 +08:00
2017-01-13 09:35:33 +08:00
namespace vcpkg : : Commands
2016-09-22 14:49:20 +08:00
{
2016-11-08 06:06:51 +08:00
static std : : vector < BinaryParagraph > read_all_binary_paragraphs ( const vcpkg_paths & paths )
2016-09-22 14:49:20 +08:00
{
2016-11-08 06:06:51 +08:00
std : : vector < BinaryParagraph > output ;
for ( auto it = fs : : directory_iterator ( paths . packages ) ; it ! = fs : : directory_iterator ( ) ; + + it )
2016-09-22 14:49:20 +08:00
{
2016-11-08 05:44:20 +08:00
const fs : : path & path = it - > path ( ) ;
2016-09-22 14:49:20 +08:00
2016-11-08 05:44:20 +08:00
try
2016-09-22 14:49:20 +08:00
{
2016-12-17 11:40:58 +08:00
auto file_contents = Files : : read_contents ( path / " CONTROL " ) ;
2016-11-08 05:44:20 +08:00
if ( auto text = file_contents . get ( ) )
{
2016-11-08 08:06:36 +08:00
auto pghs = Paragraphs : : parse_paragraphs ( * text ) ;
2016-11-08 05:44:20 +08:00
if ( pghs . size ( ) ! = 1 )
continue ;
2016-09-22 14:49:20 +08:00
2016-11-08 06:06:51 +08:00
const BinaryParagraph binary_paragraph = BinaryParagraph ( pghs [ 0 ] ) ;
output . push_back ( binary_paragraph ) ;
2016-11-08 05:44:20 +08:00
}
}
catch ( std : : runtime_error const & )
{
2016-09-22 14:49:20 +08:00
}
}
2016-11-08 06:06:51 +08:00
return output ;
2016-11-08 05:44:20 +08:00
}
void cache_command ( const vcpkg_cmd_arguments & args , const vcpkg_paths & paths )
{
static const std : : string example = Strings : : format (
2017-01-13 09:35:33 +08:00
" The argument should be a substring to search for, or no argument to display all cached libraries. \n %s " , Commands : : Helpers : : create_example_string ( " cache png " ) ) ;
2016-12-13 07:03:36 +08:00
args . check_max_arg_count ( 1 , example ) ;
2016-11-08 05:44:20 +08:00
2016-11-08 06:06:51 +08:00
const std : : vector < BinaryParagraph > binary_paragraphs = read_all_binary_paragraphs ( paths ) ;
if ( binary_paragraphs . empty ( ) )
2016-11-08 05:44:20 +08:00
{
2016-11-08 06:06:51 +08:00
System : : println ( " No packages are cached. " ) ;
2016-11-08 05:44:20 +08:00
exit ( EXIT_SUCCESS ) ;
}
2016-11-08 06:06:51 +08:00
if ( args . command_arguments . size ( ) = = 0 )
{
for ( const BinaryParagraph & binary_paragraph : binary_paragraphs )
{
const std : : string displayname = binary_paragraph . displayname ( ) ;
2016-12-13 07:10:29 +08:00
System : : println ( displayname ) ;
2016-11-08 06:06:51 +08:00
}
}
else
{
// At this point there is 1 argument
for ( const BinaryParagraph & binary_paragraph : binary_paragraphs )
{
const std : : string displayname = binary_paragraph . displayname ( ) ;
if ( Strings : : case_insensitive_ascii_find ( displayname , args . command_arguments [ 0 ] ) = = displayname . end ( ) )
{
continue ;
}
2016-12-13 07:10:29 +08:00
System : : println ( displayname ) ;
2016-11-08 06:06:51 +08:00
}
}
2016-09-22 14:49:20 +08:00
exit ( EXIT_SUCCESS ) ;
}
}