Skip to content

Commit a486955

Browse files
committed
Split files for download source code
1 parent ed94922 commit a486955

24 files changed

Lines changed: 805 additions & 492 deletions

CMakeLists.txt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ list (APPEND WSJCPP_INCLUDE_DIRS "src/Downloaders")
2020

2121
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_author.cpp")
2222
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_author.h")
23+
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_dependence.h")
24+
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_dependence.cpp")
2325
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_distribution_file.cpp")
2426
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_distribution_file.h")
2527
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_resource_file.cpp")
@@ -29,10 +31,20 @@ list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager_safe_scripting_generate.
2931
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager.cpp")
3032
list (APPEND WSJCPP_SOURCES "src/wsjcpp_package_manager.h")
3133

32-
list (APPEND WSJCPP_SOURCES "./src/Downloaders/wsjcpp_package_downloader_base.h")
33-
list (APPEND WSJCPP_SOURCES "./src/Downloaders/wsjcpp_package_downloader_base.cpp")
34-
list (APPEND WSJCPP_SOURCES "./src/Downloaders/wsjcpp_package_downloader_gitlab.h")
35-
list (APPEND WSJCPP_SOURCES "./src/Downloaders/wsjcpp_package_downloader_gitlab.cpp")
34+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_base.h")
35+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_base.cpp")
36+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_bitbucket.h")
37+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_bitbucket.cpp")
38+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_github.h")
39+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_github.cpp")
40+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_gitlab.h")
41+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_gitlab.cpp")
42+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_http.h")
43+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_http.cpp")
44+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_localfs.h")
45+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloader_localfs.cpp")
46+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloaders.h")
47+
list (APPEND WSJCPP_SOURCES "./src/wsjcpp_package_downloaders.cpp")
3648

3749
list (APPEND WSJCPP_SOURCES "src/ArgumentsProcessors/argument_processor_dependencies.cpp")
3850
list (APPEND WSJCPP_SOURCES "src/ArgumentsProcessors/argument_processor_dependencies.h")

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
[![Build Status](https://api.travis-ci.com/wsjcpp/wsjcpp.svg?branch=master)](https://travis-ci.com/wsjcpp/wsjcpp) [![Docker Pulls](https://img.shields.io/docker/pulls/sea5kg/wsjcpp.svg)](https://hub.docker.com/r/sea5kg/wsjcpp/) [![Github Stars](https://img.shields.io/github/stars/wsjcpp/wsjcpp.svg?label=github%20%E2%98%85)](https://github.com/wsjcpp/wsjcpp) [![Github Stars](https://img.shields.io/github/contributors/wsjcpp/wsjcpp.svg)](https://github.com/wsjcpp/wsjcpp) [![Github Forks](https://img.shields.io/github/forks/wsjcpp/wsjcpp.svg?label=github%20forks)](https://github.com/wsjcpp/wsjcpp/network/members)
44

5-
Yet one... C++ Source Package Manager
5+
Yet another... C++ Source Package Manager
66

77
Official site: [http://wsjcpp.org/](http://wsjcpp.org/)
88

src/Downloaders/wsjcpp_package_downloader_base.cpp

Lines changed: 0 additions & 12 deletions
This file was deleted.

src/Downloaders/wsjcpp_package_downloader_base.h

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
2+
#include "wsjcpp_package_downloader_base.h"
3+
#include <wsjcpp_core.h>
4+
#include <curl/curl.h>
5+
6+
// ---------------------------------------------------------------------
7+
// WsjcppPackageDownloaderBase
8+
9+
WsjcppPackageDownloaderBase::WsjcppPackageDownloaderBase(const std::string &sName) {
10+
TAG = "WsjcppPackageDownloaderBase";
11+
m_sName = sName;
12+
}
13+
14+
// ---------------------------------------------------------------------
15+
16+
std::string WsjcppPackageDownloaderBase::prepareCacheSubFolderName(const std::string &sPackage) {
17+
std::string ret = sPackage;
18+
std::string illegalChars = "\\/:?\"<>|.-";
19+
std::string::iterator it;
20+
for (it = ret.begin(); it < ret.end() ; ++it) {
21+
if (illegalChars.find(*it) != std::string::npos) {
22+
*it = '_';
23+
}
24+
}
25+
return ret;
26+
}
27+
28+
// ---------------------------------------------------------------------
29+
30+
size_t CurlWrite_CallbackFunc_DataToFile(void *ptr, size_t size, size_t nmemb, FILE *stream) {
31+
size_t written = fwrite(ptr, size, nmemb, stream);
32+
return written;
33+
}
34+
35+
bool WsjcppPackageDownloaderBase::downloadFileOverHttps(const std::string &sUrl, const std::string &sPath) {
36+
std::string TAG = "downloadFileOverHttps";
37+
WsjcppLog::info(TAG, "sUrl: '" + sUrl + "'");
38+
WsjcppLog::info(TAG, "sPath: '" + sPath + "'");
39+
std::string sUserAgent = "wsjcpp/" + std::string(WSJCPP_APP_VERSION);
40+
CURL *curl;
41+
FILE *fp = fopen(sPath.c_str(),"wb");
42+
if (fp == NULL) {
43+
WsjcppLog::err(TAG, "Could not open file for write '" + sPath + "'");
44+
return false;
45+
}
46+
47+
CURLcode res;
48+
curl = curl_easy_init();
49+
if (curl) {
50+
// curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L); //only for https
51+
// curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L); //only for https
52+
curl_easy_setopt(curl, CURLOPT_URL, sUrl.c_str());
53+
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, CurlWrite_CallbackFunc_DataToFile);
54+
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
55+
56+
curl_easy_setopt(curl, CURLOPT_USERAGENT, sUserAgent.c_str());
57+
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
58+
curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L);
59+
// curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
60+
res = curl_easy_perform(curl);
61+
if (res != CURLE_OK) {
62+
WsjcppLog::err(TAG, "Curl failed, reason " + std::string(curl_easy_strerror(res)));
63+
// TODO remove file
64+
curl_easy_cleanup(curl);
65+
return false;
66+
} else {
67+
long response_code;
68+
curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
69+
if (response_code != 200) {
70+
WsjcppLog::info(TAG, "end " + std::to_string(response_code));
71+
// TODO remove file
72+
curl_easy_cleanup(curl);
73+
return false;
74+
}
75+
}
76+
77+
// always cleanup
78+
curl_easy_cleanup(curl);
79+
fclose(fp);
80+
}
81+
return true;
82+
}
83+
84+
// ---------------------------------------------------------------------
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#ifndef WSJCPP_PACKAGE_DOWNLOADER_BASE_H
2+
#define WSJCPP_PACKAGE_DOWNLOADER_BASE_H
3+
4+
#include <string>
5+
#include <wsjcpp_package_manager_dependence.h>
6+
7+
class WsjcppPackageDownloaderBase {
8+
public:
9+
WsjcppPackageDownloaderBase(const std::string &sName);
10+
virtual bool canDownload(const std::string &sPackage) = 0;
11+
virtual bool downloadToCache(
12+
const std::string &sPackage,
13+
const std::string &sCacheDir,
14+
WsjcppPackageManagerDependence &dep,
15+
std::string &sError
16+
) = 0;
17+
static std::string prepareCacheSubFolderName(const std::string &sPackage);
18+
static bool downloadFileOverHttps(const std::string &sUrl, const std::string &sPath);
19+
20+
protected:
21+
std::string TAG;
22+
23+
24+
private:
25+
std::string m_sName;
26+
};
27+
28+
#endif // WSJCPP_PACKAGE_DOWNLOADER_BASE_H
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#include "wsjcpp_package_downloader_bitbucket.h"
2+
#include <wsjcpp_core.h>
3+
#include <wsjcpp_package_manager.h>
4+
#include <sstream>
5+
6+
// ---------------------------------------------------------------------
7+
// WsjcppPackageDownloaderBitbucket
8+
9+
WsjcppPackageDownloaderBitbucket::WsjcppPackageDownloaderBitbucket()
10+
: WsjcppPackageDownloaderBase("localfs") {
11+
TAG = "WsjcppPackageDownloaderBitbucket";
12+
m_sBitbucketPrefix = "https://bitbucket.com/";
13+
}
14+
15+
// ---------------------------------------------------------------------
16+
17+
bool WsjcppPackageDownloaderBitbucket::canDownload(const std::string &sPackage) {
18+
return sPackage.compare(0, m_sBitbucketPrefix.size(), m_sBitbucketPrefix) == 0;
19+
}
20+
21+
// ---------------------------------------------------------------------
22+
23+
bool WsjcppPackageDownloaderBitbucket::downloadToCache(
24+
const std::string &sPackage,
25+
const std::string &sCacheDir,
26+
WsjcppPackageManagerDependence &dep,
27+
std::string &sError
28+
) {
29+
sError = "Not implemented";
30+
return false;
31+
}
32+
33+
// ---------------------------------------------------------------------
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef WSJCPP_PACKAGE_DOWNLOADER_BITBUCKET_H
2+
#define WSJCPP_PACKAGE_DOWNLOADER_BITBUCKET_H
3+
4+
#include <string>
5+
#include "wsjcpp_package_downloader_base.h"
6+
7+
class WsjcppPackageDownloaderBitbucket : public WsjcppPackageDownloaderBase {
8+
public:
9+
WsjcppPackageDownloaderBitbucket();
10+
virtual bool canDownload(const std::string &sPackage) override;
11+
virtual bool downloadToCache(
12+
const std::string &sPackage,
13+
const std::string &sCacheDir,
14+
WsjcppPackageManagerDependence &dep,
15+
std::string &sError
16+
) override;
17+
18+
private:
19+
std::string TAG;
20+
std::string m_sName;
21+
std::string m_sBitbucketPrefix;
22+
};
23+
24+
#endif // WSJCPP_PACKAGE_DOWNLOADER_BITBUCKET_H
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
2+
#include "wsjcpp_package_downloader_github.h"
3+
#include <wsjcpp_core.h>
4+
#include <wsjcpp_package_manager.h>
5+
#include <sstream>
6+
7+
// ---------------------------------------------------------------------
8+
// WsjcppPackageDownloaderGithub
9+
10+
WsjcppPackageDownloaderGithub::WsjcppPackageDownloaderGithub()
11+
: WsjcppPackageDownloaderBase("github") {
12+
TAG = "WsjcppPackageDownloaderGithub";
13+
m_sGithubPrefix = "https://github.com/";
14+
}
15+
16+
// ---------------------------------------------------------------------
17+
18+
bool WsjcppPackageDownloaderGithub::canDownload(const std::string &sPackage) {
19+
return sPackage.compare(0, m_sGithubPrefix.size(), m_sGithubPrefix) == 0;
20+
}
21+
22+
// ---------------------------------------------------------------------
23+
24+
bool WsjcppPackageDownloaderGithub::downloadToCache(
25+
const std::string &sPackage,
26+
const std::string &sCacheDir,
27+
WsjcppPackageManagerDependence &dep,
28+
std::string &sError
29+
) {
30+
std::cout << "Download package from https://github.com/ ..." << std::endl;
31+
32+
std::string sPackageGithubPath = sPackage.substr(m_sGithubPrefix.size());
33+
// std::cout << "sPackageGithubPath: " << sPackageGithubPath << std::endl;
34+
std::istringstream f(sPackageGithubPath);
35+
std::string packageName = "";
36+
std::string s;
37+
if (getline(f, s, ':')) {
38+
packageName = s;
39+
}
40+
std::string packageVersion = sPackageGithubPath.substr(packageName.size()+1);
41+
std::string sWsjcppBaseUrl = "https://raw.githubusercontent.com/" + packageName + "/" + packageVersion + "/";
42+
43+
std::string sWsjcppUrl = sWsjcppBaseUrl + "/wsjcpp.yml";
44+
45+
std::string sDownloadedWsjCppYml = sCacheDir + "/wsjcpp.hold.yml";
46+
47+
if (!WsjcppPackageDownloaderBase::downloadFileOverHttps(sWsjcppBaseUrl + "/wsjcpp.yml", sDownloadedWsjCppYml)) {
48+
WsjcppLog::err(TAG, "Could not download " + sWsjcppBaseUrl);
49+
// TODO remove from cache
50+
return false;
51+
}
52+
53+
WsjcppPackageManager pkg(sCacheDir, sCacheDir, true);
54+
if (!pkg.load()) {
55+
WsjcppLog::err(TAG, "Could not load " + sCacheDir);
56+
return false;
57+
}
58+
59+
// sources
60+
std::vector<WsjcppPackageManagerDistributionFile> vSources = pkg.getListOfDistributionFiles();
61+
for (int i = 0; i < vSources.size(); i++) {
62+
WsjcppPackageManagerDistributionFile src = vSources[i];
63+
std::string sDownloadedWsjCppSourceFrom = sWsjcppBaseUrl + "/" + src.getSourceFile();
64+
std::string sDownloadedWsjCppSourceTo = sCacheDir + "/" + src.getTargetFile();
65+
66+
WsjcppLog::info(TAG, "\n\t" + sDownloadedWsjCppSourceFrom + " \n\t-> \n\t" + sDownloadedWsjCppSourceTo + "\n\t[sha1:" + src.getSha1() + "]");
67+
if (!WsjcppPackageDownloaderBase::downloadFileOverHttps(sDownloadedWsjCppSourceFrom, sDownloadedWsjCppSourceTo)) {
68+
WsjcppLog::err(TAG, "Could not download " + sDownloadedWsjCppSourceFrom);
69+
// TODO remove from cache
70+
return false;
71+
}
72+
// std::string sContent = "";
73+
// if (!WsjcppCore::readTextFile(sDownloadedWsjCppSourceTo, sContent)) {
74+
// WsjcppLog::err(TAG, "Could not read file " + sDownloadedWsjCppSourceTo);
75+
// return false;
76+
// }
77+
// calculate sha1
78+
// std::string sSha1 = WsjcppHashes::sha1_calc_hex(sContent);
79+
// if (sSha1 != src.getSha1()) {
80+
// WsjcppLog::warn(TAG, "Expected sha1 '" + sSha1 + "', but got '" + src.getSha1() + "'");
81+
// }
82+
}
83+
84+
std::string sInstallationDir = "./src.wsjcpp/" + WsjcppPackageDownloaderBase::prepareCacheSubFolderName(pkg.getName());
85+
86+
// WsjcppPackageManagerDependence dep;
87+
dep.setName(pkg.getName());
88+
dep.setVersion(pkg.getVersion());
89+
dep.setUrl(sPackage);
90+
dep.setInstallationDir(sInstallationDir);
91+
dep.setOrigin("https://github.com/");
92+
return true;
93+
}
94+
95+
// ---------------------------------------------------------------------
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef WSJCPP_PACKAGE_DOWNLOADER_GITHUB_H
2+
#define WSJCPP_PACKAGE_DOWNLOADER_GITHUB_H
3+
4+
#include <string>
5+
#include "wsjcpp_package_downloader_base.h"
6+
7+
class WsjcppPackageDownloaderGithub : public WsjcppPackageDownloaderBase {
8+
public:
9+
WsjcppPackageDownloaderGithub();
10+
virtual bool canDownload(const std::string &sPackage) override;
11+
virtual bool downloadToCache(
12+
const std::string &sPackage,
13+
const std::string &sCacheDir,
14+
WsjcppPackageManagerDependence &dep,
15+
std::string &sError
16+
) override;
17+
18+
private:
19+
std::string TAG;
20+
std::string m_sName;
21+
std::string m_sGithubPrefix;
22+
};
23+
24+
#endif // WSJCPP_PACKAGE_DOWNLOADER_GITHUB_H

0 commit comments

Comments
 (0)