Github plugin: Do not hard code https as the URI scheme for GITHUB_PLUGIN.

Use whatever comes from the lib_path in the fp-lib-table, thus opening up the same plugin for alternative generic servers.
This commit is contained in:
Dick Hollenbeck 2015-04-22 14:02:18 +02:00 committed by jean-pierre charras
parent 94479d87c1
commit e637493e04
1 changed files with 53 additions and 22 deletions

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com> * Copyright (C) 2015 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors. * Copyright (C) 2015 KiCad Developers, see CHANGELOG.TXT for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -469,27 +469,58 @@ bool GITHUB_PLUGIN::repoURL_zipURL( const wxString& aRepoURL, string* aZipURL )
if( repo.HasServer() && repo.HasPath() ) if( repo.HasServer() && repo.HasPath() )
{ {
// goal: "https://github.com/liftoff-sr/pretty_footprints/archive/master.zip" // scheme might be "http" or if truly github.com then "https".
wxString zip_url( wxT( "https://" ) ); wxString zip_url( repo.GetScheme() + "://" );
#if 0 // Github issues a redirect for this "master.zip". i.e. if( repo.GetServer() == "github.com" )
{
#if 0 // A proper code path would be this one, but it is not the fastest.
zip_url += repo.GetServer();
zip_url += repo.GetPath(); // path comes with a leading '/'
zip_url += '/';
zip_url += "archive/master.zip";
#else
// Github issues a redirect for the "master.zip". i.e.
// "https://github.com/liftoff-sr/pretty_footprints/archive/master.zip" // "https://github.com/liftoff-sr/pretty_footprints/archive/master.zip"
// would be redirected to: // would be redirected to:
// "https://codeload.github.com/liftoff-sr/pretty_footprints/zip/master" // "https://codeload.github.com/liftoff-sr/pretty_footprints/zip/master"
// The alternate code path below uses the redirected URL on first attempt // In order to bypass this redirect, saving time, we use the
// to save one HTTP GET hit. avhttp does the redirect behind the scenes normally. // redirected URL on first attempt to save one HTTP GET hit.
// avhttp would do the redirect behind the scenes normally, but that would
// be slower than doing this bypass.
zip_url += "codeload.github.com";
zip_url += repo.GetPath(); // path comes with a leading '/'
zip_url += '/';
zip_url += "zip/master";
#endif
}
else
{
// This is the generic code path for any server which can serve
// up zip files which is not github.com. The schemes tested include:
// http and https, I don't know what the avhttp library supports beyond that.
// zip_url goal: "<scheme>://<server>[:<port>]/<path>"
// Remember that <scheme>, <server>, <port> if present, and <path> all came
// from the lib_path in the fp-lib-table row.
zip_url += repo.GetServer(); zip_url += repo.GetServer();
zip_url += repo.GetPath();
zip_url += wxT( '/' ); if( repo.HasPort() )
zip_url += wxT( "archive/master.zip" ); {
#else zip_url += ':';
zip_url += wxT( "codeload.github.com" ); zip_url += repo.GetPort();
zip_url += repo.GetPath(); }
zip_url += wxT( '/' );
zip_url += wxT( "zip/master" ); zip_url += repo.GetPath(); // path comes with a leading '/'
#endif
// Do not modify the path, we cannot anticipate the needs of all
// servers which are serving up zip files directly. URL modifications
// are more generally done in the server, rather than contaminating
// this code path with the needs of one particular inflexible server.
}
*aZipURL = zip_url.utf8_str(); *aZipURL = zip_url.utf8_str();
return true; return true;
@ -533,7 +564,7 @@ void GITHUB_PLUGIN::remote_get_zip( const wxString& aRepoURL ) throw( IO_ERROR )
catch( boost::system::system_error& e ) catch( boost::system::system_error& e )
{ {
// https "GET" has faild, report this to API caller. // https "GET" has faild, report this to API caller.
static const char errorcmd[] = "https GET command failed"; // Do not translate this message static const char errorcmd[] = "http GET command failed"; // Do not translate this message
UTF8 fmt( _( "%s\nCannot get/download Zip archive: '%s'\nfor library path: '%s'.\nReason: '%s'" ) ); UTF8 fmt( _( "%s\nCannot get/download Zip archive: '%s'\nfor library path: '%s'.\nReason: '%s'" ) );
@ -552,7 +583,7 @@ void GITHUB_PLUGIN::remote_get_zip( const wxString& aRepoURL ) throw( IO_ERROR )
// This GITHUB_GETLIBLIST method should not be here, but in github_getliblist.cpp ! // This GITHUB_GETLIBLIST method should not be here, but in github_getliblist.cpp !
// However it is here just because we need to include <avhttp.hpp> to compile it. // However it is here just because we need to include <avhttp.hpp> to compile it.
// and if we include avhttp in 2 .cpp files, the link fails becuse it detects duplicate // and when we include avhttp in two .cpp files, the link fails because it detects duplicate
// avhttp functions. // avhttp functions.
// So until it is fixed, this code is here. // So until it is fixed, this code is here.
bool GITHUB_GETLIBLIST::remote_get_json( std::string* aFullURLCommand, wxString* aMsgError ) bool GITHUB_GETLIBLIST::remote_get_json( std::string* aFullURLCommand, wxString* aMsgError )