src/application.h
browsing at commit = 9881d02ac31dadb3794f4728eb6cef4afe5721d3
#pragma once
#include <cppcms/application.h>
#include <memory>
#include <string>
class RepoScanner;
class GitRepo;
// Serves the multi-repository git frontend. One instance per worker thread;
// the shared RepoScanner is read-only after construction.
class GitApp : public cppcms::application {
public:
GitApp(cppcms::service &srv, const RepoScanner *scanner);
// Defaults every response to UTF-8 before dispatching; handlers that emit
// other content types (raw files, static assets) override it themselves.
void main(std::string url) override;
private:
void frontpage();
void repos_list();
void repo_home(std::string name);
void tree(std::string name, std::string path);
void raw(std::string name, std::string path);
void blame(std::string name, std::string path);
void log(std::string name);
void object(std::string name, std::string oid);
void tags(std::string name);
void tag(std::string name, std::string tag_name);
void tag_archive(std::string name, std::string tag_name);
void branches(std::string name);
void commit(std::string name, std::string oid);
void commit_patch(std::string name, std::string oid);
void static_file(std::string rel);
// Opens the named repo, or writes a 404 and returns nullptr.
std::unique_ptr<GitRepo> open(const std::string &name);
// Resolves the commit to display from the "id" query parameter (or HEAD).
// Throws GitError on an invalid id.
std::string commit_from_request(const GitRepo &repo);
void show_error(int code, const std::string &message);
const RepoScanner *scanner_;
std::string static_root_;
std::string cache_root_; // where generated tag archives are cached
};