use of org.locationtech.geogig.api.plumbing.ResolveGeogigDir in project GeoGig by boundlessgeo.
the class HeapGraphDatabase method close.
@Override
public void close() {
if (!isOpen()) {
return;
}
graph = null;
Optional<URL> url = new ResolveGeogigDir(platform).call();
if (url.isPresent()) {
synchronized (graphs) {
URL key = url.get();
Ref ref = graphs.get(key);
if (ref != null && ref.release() <= -1) {
ref.destroy();
graphs.remove(key);
}
}
}
}
use of org.locationtech.geogig.api.plumbing.ResolveGeogigDir in project GeoGig by boundlessgeo.
the class FileRefDatabase method toFile.
/**
* @param refPath
* @return
*/
private File toFile(String refPath) {
Optional<URL> envHome = new ResolveGeogigDir(platform).call();
String[] path = refPath.split("/");
try {
File file = new File(envHome.get().toURI());
for (String subpath : path) {
file = new File(file, subpath);
}
return file;
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
use of org.locationtech.geogig.api.plumbing.ResolveGeogigDir in project GeoGig by boundlessgeo.
the class SQLiteConfigDatabase method local.
Config local() {
if (local == null || !lastWorkingDir.equals(platform.pwd())) {
final Optional<URL> url = new ResolveGeogigDir(platform).call();
if (!url.isPresent()) {
throw new ConfigException(StatusCode.INVALID_LOCATION);
}
URL u = url.get();
File localFile;
try {
localFile = new File(new File(u.toURI()), "config.db");
} catch (URISyntaxException e) {
localFile = new File(u.getPath(), "config.db");
}
lastWorkingDir = platform.pwd();
local = new Config(localFile);
}
return local;
}
use of org.locationtech.geogig.api.plumbing.ResolveGeogigDir in project GeoGig by boundlessgeo.
the class InitOp method callInternal.
private Repository callInternal() {
final Platform platform = platform();
final File workingDirectory = platform.pwd();
final Optional<URL> repoUrl = new ResolveGeogigDir(platform).call();
final boolean repoExisted = repoUrl.isPresent();
final File envHome;
if (repoExisted) {
// we're at either the repo working dir or a subdirectory of it
try {
envHome = new File(repoUrl.get().toURI());
} catch (URISyntaxException e) {
throw Throwables.propagate(e);
}
} else {
envHome = new File(workingDirectory, ".geogig");
if (!envHome.mkdirs()) {
throw new RuntimeException("Unable to create geogig environment at '" + envHome.getAbsolutePath() + "'");
}
}
Map<String, String> effectiveConfigBuilder = Maps.newTreeMap();
addDefaults(defaults, effectiveConfigBuilder);
if (config != null) {
effectiveConfigBuilder.putAll(config);
}
if (filterFile != null) {
try {
final String FILTER_FILE = "filter.ini";
File oldFilterFile = new File(filterFile);
if (!oldFilterFile.exists()) {
throw new FileNotFoundException("No filter file found at " + filterFile + ".");
}
Optional<URL> envHomeURL = new ResolveGeogigDir(platform).call();
Preconditions.checkState(envHomeURL.isPresent(), "Not inside a geogig directory");
final URL url = envHomeURL.get();
if (!"file".equals(url.getProtocol())) {
throw new UnsupportedOperationException("Sparse clone works only against file system repositories. " + "Repository location: " + url.toExternalForm());
}
File repoDir;
try {
repoDir = new File(url.toURI());
} catch (URISyntaxException e) {
throw new IllegalStateException("Unable to access directory " + url.toExternalForm(), e);
}
File newFilterFile = new File(repoDir, FILTER_FILE);
Files.copy(oldFilterFile, newFilterFile);
effectiveConfigBuilder.put("sparse.filter", FILTER_FILE);
} catch (Exception e) {
throw new IllegalStateException("Unable to copy filter file at path " + filterFile + " to the new repository.", e);
}
}
try {
Preconditions.checkState(envHome.toURI().toURL().equals(new ResolveGeogigDir(platform).call().get()));
} catch (MalformedURLException e) {
Throwables.propagate(e);
}
Repository repository;
try {
if (!repoExisted) {
ConfigDatabase configDB = context.configDatabase();
try {
for (Entry<String, String> pair : effectiveConfigBuilder.entrySet()) {
String key = pair.getKey();
String value = pair.getValue();
configDB.put(key, value);
}
repository = repository();
repository.configure();
} catch (RepositoryConnectionException e) {
throw new IllegalStateException("Unable to initialize repository for the first time: " + e.getMessage(), e);
}
} else {
repository = repository();
}
try {
repository.open();
// make sure the repo has the empty tree
ObjectDatabase objectDatabase = repository.objectDatabase();
objectDatabase.put(RevTree.EMPTY);
} catch (RepositoryConnectionException e) {
throw new IllegalStateException("Error opening repository databases: " + e.getMessage(), e);
}
createSampleHooks(envHome);
} catch (ConfigException e) {
throw e;
} catch (RuntimeException e) {
Throwables.propagateIfInstanceOf(e, IllegalStateException.class);
throw new IllegalStateException("Can't access repository at '" + envHome.getAbsolutePath() + "'", e);
}
if (!repoExisted) {
try {
createDefaultRefs();
} catch (IllegalStateException e) {
Throwables.propagate(e);
}
}
return repository;
}
use of org.locationtech.geogig.api.plumbing.ResolveGeogigDir in project GeoGig by boundlessgeo.
the class ReadMergeCommitMessageOp method _call.
@Override
protected String _call() {
URL envHome = new ResolveGeogigDir(platform()).call().get();
try {
File file = new File(envHome.toURI());
file = new File(file, "MERGE_MSG");
if (!file.exists()) {
return "";
}
List<String> lines = Files.readLines(file, Charsets.UTF_8);
return Joiner.on("\n").join(lines);
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
Aggregations