commit da51040bde4ad6bfd4c74db1cbf3a528ff06ceb9 Author: Armin Friedl Date: Sun Feb 16 03:20:12 2020 +0100 Init diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..34fe704 --- /dev/null +++ b/.clang-format @@ -0,0 +1 @@ +BasedOnStyle: Chromium \ No newline at end of file diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..09e15bf --- /dev/null +++ b/.drone.yml @@ -0,0 +1,16 @@ +kind: pipeline +type: docker +name: default + +steps: +- name: build + image: arminfriedl/xwim-build + commands: + - meson build + - ninja -C build + - build/src/xwim ../compile-commands.json + +trigger: + event: + exclude: + - tag diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c293aa2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,121 @@ +.clangd/ +build/ +compile_commands.json + +# Created by https://www.gitignore.io/api/vim,c++,emacs,ninja +# Edit at https://www.gitignore.io/?templates=vim,c++,emacs,ninja + +### C++ ### +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +### Ninja ### +.ninja_deps +.ninja_log + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist + +# Auto-generated tag files +tags + +# Persistent undo +[._]*.un~ + +# Coc configuration directory +.vim + +# End of https://www.gitignore.io/api/vim,c++,emacs,ninja diff --git a/meson.build b/meson.build new file mode 100644 index 0000000..4912022 --- /dev/null +++ b/meson.build @@ -0,0 +1,2 @@ +project('xwim', 'cpp', default_options : ['cpp_std=c++17']) +subdir('src') \ No newline at end of file diff --git a/src/archive.cpp b/src/archive.cpp new file mode 100644 index 0000000..fd51974 --- /dev/null +++ b/src/archive.cpp @@ -0,0 +1,26 @@ +#include "archive.hpp" + +#include +#include +#include + +#include "spec.hpp" + +namespace xwim { +Archive::Archive(std::string path) : path{std::filesystem::path(path)} {} +Archive::Archive(std::filesystem::path&& path) : path{path} {} + +ArchiveSpec Archive::check() { + return ArchiveSpec{.is_root_dir = true, + .is_root_dir_filename = true, + .has_subarchive = false}; +} + +void Archive::extract(ExtractSpec extract_spec) { + std::cout << "Make dir:" << extract_spec.make_dir + << "Dirname: " << extract_spec.dirname + << "Archname: " << this->path + << std::endl; +} + +} // namespace xwim diff --git a/src/archive.hpp b/src/archive.hpp new file mode 100644 index 0000000..d5a4012 --- /dev/null +++ b/src/archive.hpp @@ -0,0 +1,25 @@ +#ifndef ARCHIVE_H +#define ARCHIVE_H + +#include +#include + +#include "spec.hpp" + +namespace xwim { + +class Archive { + private: + std::filesystem::path path; + + public: + explicit Archive(std::string path); + explicit Archive(std::filesystem::path&& path); + + ArchiveSpec check(); + void extract(ExtractSpec normalize_spec); +}; + +} // namespace xwim + +#endif diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..2fb4a3e --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,20 @@ +#include +#include +#include + +#include "archive.hpp" +#include "spec.hpp" + +int main(int argc, char** argv) { + std::string filename {argv[1]}; + xwim::Archive archive {filename}; + + xwim::ArchiveSpec asp = archive.check(); + + std::cout << "Has subarch: " << asp.has_subarchive + << "Is root: " << asp.is_root_dir + << "Is root dir filename: " << asp.is_root_dir_filename + << std::endl; + + archive.extract(xwim::ExtractSpec {.make_dir=true, .dirname="Test"}); +} diff --git a/src/meson.build b/src/meson.build new file mode 100644 index 0000000..6df0f9b --- /dev/null +++ b/src/meson.build @@ -0,0 +1,9 @@ +src = ['main.cpp', 'archive.cpp'] +inc = ['archive.hpp', + 'spec.hpp'] + +libs = [dependency('libarchive', required: true), + dependency('fmt', required: true), + dependency('spdlog', required: true)] + +executable('xwim', src, inc, dependencies: libs) diff --git a/src/spec.hpp b/src/spec.hpp new file mode 100644 index 0000000..1fce6d1 --- /dev/null +++ b/src/spec.hpp @@ -0,0 +1,18 @@ +#ifndef SPEC_H +#define SPEC_H + +#include +namespace xwim { + struct ArchiveSpec { + bool is_root_dir; + bool is_root_dir_filename; + bool has_subarchive; + }; + + struct ExtractSpec { + bool make_dir; + std::filesystem::path dirname; + }; +} + +#endif