Implement gradle spec reader/writer

This commit is contained in:
Petr Mrázek
2014-07-16 02:03:52 +02:00
parent 71575a5022
commit 8a56ab6780
9 changed files with 241 additions and 15 deletions

View File

@ -0,0 +1,83 @@
#pragma once
#include <QString>
#include <QStringList>
#include "logic/DefaultVariable.h"
struct GradleSpecifier
{
GradleSpecifier()
{
m_valid = false;
}
GradleSpecifier(QString value)
{
operator=(value);
}
GradleSpecifier & operator =(const QString & value)
{
/*
org.gradle.test.classifiers : service : 1.0 : jdk15 @ jar
DEBUG 0 "org.gradle.test.classifiers:service:1.0:jdk15@jar"
DEBUG 1 "org.gradle.test.classifiers"
DEBUG 2 "service"
DEBUG 3 "1.0"
DEBUG 4 ":jdk15"
DEBUG 5 "jdk15"
DEBUG 6 "@jar"
DEBUG 7 "jar"
*/
QRegExp matcher("([^:@]+):([^:@]+):([^:@]+)" "(:([^:@]+))?" "(@([^:@]+))?");
m_valid = matcher.exactMatch(value);
auto elements = matcher.capturedTexts();
groupId = elements[1];
artifactId = elements[2];
version = elements[3];
classifier = elements[5];
if(!elements[7].isEmpty())
{
extension = elements[7];
}
return *this;
}
operator QString() const
{
if(!m_valid)
return "INVALID";
QString retval = groupId + ":" + artifactId + ":" + version;
if(!classifier.isEmpty())
{
retval += ":" + classifier;
}
if(extension.isExplicit())
{
retval += "@" + extension;
}
return retval;
}
QString toPath() const
{
if(!m_valid)
return "INVALID";
QString path = groupId;
path.replace('.', '/');
path += '/' + artifactId + '/' + version + '/' + artifactId + '-' + version;
if(!classifier.isEmpty())
{
path += "-" + classifier;
}
path += "." + extension;
return path;
}
bool valid()
{
return m_valid;
}
private:
QString groupId;
QString artifactId;
QString version;
QString classifier;
DefaultVariable<QString> extension = DefaultVariable<QString>("jar");
bool m_valid = false;
};

View File

@ -65,7 +65,10 @@ void OneSixLibrary::finalize()
m_decentname = parts[1];
m_decentversion = minVersion = parts[2];
m_storage_path = relative;
m_download_url = m_base_url + relative;
if(m_base_url.isEmpty())
m_download_url = QString("https://" + URLConstants::LIBRARY_BASE) + relative;
else
m_download_url = m_base_url + relative;
if (m_rules.empty())
{

View File

@ -13,20 +13,20 @@ RawLibraryPtr RawLibrary::fromJson(const QJsonObject &libObj, const QString &fil
}
out->m_name = libObj.value("name").toString();
auto readString = [libObj, filename](const QString & key, QString & variable)
auto readString = [libObj, filename](const QString & key, QString & variable) -> bool
{
if (libObj.contains(key))
if (!libObj.contains(key))
return false;
QJsonValue val = libObj.value(key);
if (!val.isString())
{
QJsonValue val = libObj.value(key);
if (!val.isString())
{
QLOG_WARN() << key << "is not a string in" << filename << "(skipping)";
}
else
{
variable = val.toString();
}
QLOG_WARN() << key << "is not a string in" << filename << "(skipping)";
return false;
}
variable = val.toString();
return true;
};
readString("url", out->m_base_url);

View File

@ -28,10 +28,11 @@ public: /* methods */
public: /* data */
QString m_name;
QString m_base_url = "https://" + URLConstants::LIBRARY_BASE;
QString m_base_url;
/// type hint - modifies how the library is treated
QString m_hint;
/// absolute URL. takes precedence over m_download_path, if defined
/// DEPRECATED: absolute URL. takes precedence over m_download_path, if defined
QString m_absolute_url;
bool applyExcludes = false;