Compare commits
10 Commits
a6554161b8
...
eec5abdeb2
Author | SHA1 | Date | |
---|---|---|---|
eec5abdeb2 | |||
8c9a66632c | |||
fec22d16f5 | |||
d7c50a1941 | |||
|
aec4d311b6 | ||
|
85cec3444c | ||
|
b305cf56f4 | ||
|
66c8175423 | ||
|
2e1217adf3 | ||
|
54a1d35556 |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
|||||||
*.in
|
|
||||||
*.o
|
*.o
|
||||||
*.so
|
*.so
|
||||||
*/.deps
|
*/.deps
|
||||||
|
@ -46,7 +46,7 @@ include_directories("${CMAKE_CURRENT_BINARY_DIR}/include")
|
|||||||
set(src "${CMAKE_SOURCE_DIR}/src")
|
set(src "${CMAKE_SOURCE_DIR}/src")
|
||||||
|
|
||||||
lava_create_gutlib(
|
lava_create_gutlib(
|
||||||
SUBDIRS bottles config launch
|
SUBDIRS bottles config launch paths
|
||||||
DEPENDS cog)
|
DEPENDS cog)
|
||||||
|
|
||||||
lava_create_executable(TARGET cellar
|
lava_create_executable(TARGET cellar
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
### bottle management tool for WINE connoisseurs
|
### bottle management tool for WINE connoisseurs
|
||||||
*(this software is considered unfinished, use at own risk)*
|
*(this software is considered unfinished, use at own risk)*
|
||||||
|
|
||||||
(notice: https://github.com/lavacano201014/cellar is a mirror. The upstream repository is at [vcs.lavacano.net/cellar.git](http://vcs.lavacano.net/?p=cellar.git), and bugs are officially tracked at [mantis.lavacano.net](http://mantis.lavacano.net))
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
$ mkdir build && cd build
|
$ mkdir build && cd build
|
||||||
|
@ -34,4 +34,4 @@ TODO: Generate this.
|
|||||||
|
|
||||||
## COPYRIGHT
|
## COPYRIGHT
|
||||||
|
|
||||||
Copyright © 2017 Nicholas O'Connor. Provided under the terms of the MIT license: https://opensource.org/licenses/MIT
|
Copyright © 2017-2019 Nicholas O'Connor. Provided under the terms of the MIT license: https://opensource.org/licenses/MIT
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* This file contains string definitions for ANSI color sequences
|
/* This file contains string definitions for ANSI color sequences
|
||||||
* it was written by Nicholas "Lavacano" O'Connor and is available
|
* it was written by Nicole O'Connor and is available to all
|
||||||
* to all under the MIT license.
|
* under the MIT license.
|
||||||
*
|
*
|
||||||
* Usage:
|
* Usage:
|
||||||
* std::cout << ansicol::red_bold << "I am bold red text!" << ansicol::reset << std::endl;
|
* std::cout << ansicol::red_bold << "I am bold red text!" << ansicol::reset << std::endl;
|
||||||
|
5
include/cmake.hpp.in
Executable file
5
include/cmake.hpp.in
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#cmakedefine IS_GIT_REPO "@IS_GIT_REPO@"
|
||||||
|
#cmakedefine GIT_COMMIT_HASH "@GIT_COMMIT_HASH@"
|
||||||
|
#cmakedefine GIT_BRANCH "@GIT_BRANCH@"
|
@ -5,5 +5,6 @@
|
|||||||
namespace cellar {
|
namespace cellar {
|
||||||
namespace paths {
|
namespace paths {
|
||||||
extern std::string translate(std::string in_path, bool lazy = false);
|
extern std::string translate(std::string in_path, bool lazy = false);
|
||||||
|
extern std::string resolve_drive_letter(std::string in_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,8 +30,10 @@ void cellar::bottles::create_bottle(int argc, vector<string> argv) {
|
|||||||
|
|
||||||
cmdparse.parse(argv);
|
cmdparse.parse(argv);
|
||||||
|
|
||||||
|
// sanity check: make sure ~/.local/share/cellar/bottles exists
|
||||||
string homepath = getenv("HOME");
|
string homepath = getenv("HOME");
|
||||||
|
if (!boost::filesystem::exists(homepath + "/.local/share/cellar/bottles")) { boost::filesystem::create_directories(homepath + "/.local/share/cellar/bottles"); }
|
||||||
|
|
||||||
string bottlechoice = bottlearg.getValue();
|
string bottlechoice = bottlearg.getValue();
|
||||||
string fullbottlepath;
|
string fullbottlepath;
|
||||||
if (bottlechoice.substr(0,1) == "/" || bottlechoice.substr(0,1) == ".") { // absolute or relative path
|
if (bottlechoice.substr(0,1) == "/" || bottlechoice.substr(0,1) == ".") { // absolute or relative path
|
||||||
|
@ -93,7 +93,7 @@ int main(int argc, char* argv[]) {
|
|||||||
bottles::active_bottle = bottles::Bottle(env_wineprefix);
|
bottles::active_bottle = bottles::Bottle(env_wineprefix);
|
||||||
} else {
|
} else {
|
||||||
string homepath = getenv("HOME");
|
string homepath = getenv("HOME");
|
||||||
string fullbottlepath = homepath + "/.local/share/cellar/bottles/" + bottlearg.getValue();
|
string fullbottlepath = homepath + "/.wine";
|
||||||
bottles::active_bottle = bottles::Bottle(fullbottlepath);
|
bottles::active_bottle = bottles::Bottle(fullbottlepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,28 +18,31 @@ using namespace cellar;
|
|||||||
string cellar::paths::translate(std::string in_path, bool lazy) {
|
string cellar::paths::translate(std::string in_path, bool lazy) {
|
||||||
bool windows_input;
|
bool windows_input;
|
||||||
|
|
||||||
static regex drive_letter(R"([a-zA-Z]:\\)");
|
static regex drive_letter_rgx(R"([a-zA-Z]:\\)");
|
||||||
|
|
||||||
windows_input = regex_match(in_path.substr(0, 3), drive_letter);
|
windows_input = regex_match(in_path.substr(0, 3), drive_letter_rgx);
|
||||||
|
|
||||||
if (!lazy) {
|
if (!lazy) {
|
||||||
output::warning("non-lazy path translation is not implemented yet");
|
output::warning("non-lazy path translation is not implemented yet");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (windows_input) {
|
if (windows_input) {
|
||||||
// lazy
|
if (lazy) {
|
||||||
if (boost::algorithm::to_lower_copy(in_path.substr(0,1)) != "z") {
|
if (boost::algorithm::to_lower_copy(in_path.substr(0,1)) != "z") {
|
||||||
throw invalid_argument("lazy path translation isn't possible for drive letters other than Z:");
|
throw invalid_argument("lazy path translation isn't possible for drive letters other than Z:");
|
||||||
}
|
}
|
||||||
string out_path = in_path.substr(2, in_path.size() - 2);
|
string out_path = in_path.substr(2, in_path.size() - 2);
|
||||||
|
|
||||||
size_t slashpos = out_path.find("\\");
|
size_t slashpos = out_path.find("\\");
|
||||||
while (slashpos != std::string::npos) {
|
while (slashpos != std::string::npos) {
|
||||||
out_path.replace(slashpos, 1, "/");
|
out_path.replace(slashpos, 1, "/");
|
||||||
slashpos = out_path.find("\\");
|
slashpos = out_path.find("\\");
|
||||||
}
|
}
|
||||||
|
|
||||||
return out_path;
|
return out_path;
|
||||||
|
} else {
|
||||||
|
return paths::resolve_drive_letter(in_path);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// lazy
|
// lazy
|
||||||
string out_path = "Z:";
|
string out_path = "Z:";
|
||||||
|
51
src/paths/drive_letters.cpp
Normal file
51
src/paths/drive_letters.cpp
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#include <exception>
|
||||||
|
#include <regex>
|
||||||
|
#include <string>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
|
#include "bottles.hpp"
|
||||||
|
#include "output.hpp"
|
||||||
|
#include "paths.hpp"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
string cellar::paths::resolve_drive_letter(string in_path) {
|
||||||
|
bool windows_input;
|
||||||
|
static regex drive_letter_rgx(R"([a-zA-Z]:\\)");
|
||||||
|
|
||||||
|
windows_input = regex_match(in_path.substr(0, 3), drive_letter_rgx);
|
||||||
|
|
||||||
|
string out_path = "";
|
||||||
|
|
||||||
|
if (windows_input) {
|
||||||
|
string drive_letter = boost::algorithm::to_lower_copy(in_path.substr(0, 2));
|
||||||
|
|
||||||
|
string link_path = "";
|
||||||
|
link_path.append(bottles::active_bottle.canonical_path);
|
||||||
|
link_path.append("/dosdevices/");
|
||||||
|
link_path.append(drive_letter);
|
||||||
|
|
||||||
|
char stringbuffer[512];
|
||||||
|
ssize_t bufflen = readlink(link_path.c_str(), stringbuffer, sizeof(stringbuffer) - 1);
|
||||||
|
|
||||||
|
if (bufflen != -1) {
|
||||||
|
stringbuffer[bufflen] = '\0';
|
||||||
|
out_path.append(stringbuffer);
|
||||||
|
} else {
|
||||||
|
throw runtime_error("readlink isn't having it");
|
||||||
|
}
|
||||||
|
|
||||||
|
string rest_of_path = in_path.substr(3, in_path.size() - 2);
|
||||||
|
size_t slashpos = rest_of_path.find("\\");
|
||||||
|
while (slashpos != std::string::npos) {
|
||||||
|
rest_of_path.replace(0, 1, "/");
|
||||||
|
slashpos = rest_of_path.find("\\");
|
||||||
|
}
|
||||||
|
|
||||||
|
out_path.append(rest_of_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
return out_path;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user