startgit

Static page generator for git repositories
git clone git://git.dimitrijedobrota.com/startgit.git
Log | Files | Refs | README | LICENSE | HACKING | CONTRIBUTING | CODE_OF_CONDUCT | BUILDING |

commit80d5e3b1a3bde33e5c9ced4778267bf8a362e56c
parent8cb2a0807d6e5e2e8be60c5ccdbd794ed4c3e444
authorDimitrije Dobrota <mail@dimitrijedobrota.com>
dateFri, 24 Jan 2025 20:23:58 +0100

Special file list can be set from command line

Diffstat:
MCMakeLists.txt|+-
Msource/arguments.hpp|+++++++++
Msource/branch.cpp|++++++++----------
Msource/file.cpp|+-
Msource/file.hpp|+-
Msource/main.cpp|++++++++++++

6 files changed, 32 insertions(+), 13 deletions(-)


diff --git a/CMakeLists.txt b/CMakeLists.txt

@@ -4,7 +4,7 @@ include(cmake/prelude.cmake)

project(
startgit
VERSION 0.1.32
VERSION 0.1.33
DESCRIPTION "Static page generator for git repositories"
HOMEPAGE_URL "https://git.dimitrijedobrota.com/stargit.git"
LANGUAGES CXX

diff --git a/source/arguments.hpp b/source/arguments.hpp

@@ -2,6 +2,7 @@

#include <filesystem>
#include <string>
#include <unordered_set>
#include <vector>
namespace startgit

@@ -16,6 +17,14 @@ struct arguments_t

std::string author = "Dimitrije Dobrota";
std::string title = "Collection of git repositories";
std::string description = "Publicly available personal projects";
std::unordered_set<std::filesystem::path> special = {
"BUILDING.md",
"CODE_OF_CONDUCT.md",
"CONTRIBUTING.md",
"HACKING.md",
"LICENSE.md",
"README.md",
};
bool force = false;
};

diff --git a/source/branch.cpp b/source/branch.cpp

@@ -1,11 +1,11 @@

#include <algorithm>
#include <functional>
#include <unordered_set>
#include "branch.hpp"
#include <git2wrap/revwalk.hpp>
#include "arguments.hpp"
#include "repository.hpp"
namespace startgit

@@ -46,18 +46,16 @@ branch::branch(git2wrap::branch brnch, repository& repo)

continue;
}
static const std::unordered_set<std::filesystem::path> special {
"README.md",
"LICENSE.md",
"BUILDING.md",
"HACKING.md",
};
m_files.emplace_back(entry, full_path);
if (!path.empty() || !special.contains(entry.get_name())) {
if (!path.empty()) {
continue;
}
m_special.emplace_back(entry, full_path);
auto itr = args.special.find(entry.get_name());
if (itr != args.special.end()) {
m_special.emplace_back(entry, *itr);
}
}
};

diff --git a/source/file.cpp b/source/file.cpp

@@ -10,7 +10,7 @@

namespace startgit
{
file::file(const git2wrap::tree_entry& entry, std::string path)
file::file(const git2wrap::tree_entry& entry, std::filesystem::path path)
: m_filemode(filemode(entry.get_filemode()))
, m_path(std::move(path))
, m_blob(

diff --git a/source/file.hpp b/source/file.hpp

@@ -12,7 +12,7 @@ namespace startgit

class file
{
public:
file(const git2wrap::tree_entry& entry, std::string path);
file(const git2wrap::tree_entry& entry, std::filesystem::path path);
std::string get_filemode() const { return m_filemode; }
std::filesystem::path get_path() const { return m_path; }

diff --git a/source/main.cpp b/source/main.cpp

@@ -748,6 +748,17 @@ int parse_opt(int key, const char* arg, poafloc::Parser* parser)

case 'f':
l_args->force = true;
break;
case 's': {
std::stringstream sstream(arg);
std::string crnt;
l_args->special.clear();
while (std::getline(sstream, crnt, ',')) {
l_args->special.emplace(crnt);
}
break;
}
case poafloc::ARG:
try {
l_args->repos.emplace_back(std::filesystem::canonical(arg));

@@ -767,6 +778,7 @@ static const poafloc::option_t options[] = {

{0, 0, 0, 0, "Output mode", 1},
{"output", 'o', "DIR", 0, "Output directory"},
{"force", 'f', 0, 0, "Force write even if file exists"},
{"special", 's', "NAME", 0, "Comma separated files to be rendered to html"},
{0, 0, 0, 0, "General information", 2},
{"base", 'b', "URL", 0, "Absolute destination URL"},
{"resource", 'r', "URL", 0, "URL that houses styles and scripts"},