40 private final StorageSerializer<T> serializer;
41 private final StorageDeserializer<T> deserializer;
42
43 private Hash hash;
44 private RepositoryStorage<T> repositoryStorage;
45 private Set<T> current;
46
47 HostedRepositoryStorage(HostedRepository repository, Path localStorage, String ref, String fileName, String authorName, String authorEmail, String message, StorageSerializer<T> serializer, StorageDeserializer<T> deserializer) {
48 this.hostedRepository = repository;
49 this.ref = ref;
50 this.fileName = fileName;
51 this.authorEmail = authorEmail;
52 this.authorName = authorName;
53 this.message = message;
54 this.serializer = serializer;
55 this.deserializer = deserializer;
56
57 try {
58 Repository localRepository;
59 try {
60 localRepository = Repository.materialize(localStorage, repository.url(), ref);
61 } catch (IOException e) {
62 // The remote ref may not yet exist
63 localRepository = Repository.init(localStorage, repository.repositoryType());
64 var storage = Files.writeString(localStorage.resolve(fileName), "");
65 localRepository.add(storage);
66 localRepository.commit(message, authorName, authorEmail);
67 }
68 this.localRepository = localRepository;
69 hash = localRepository.head();
70 repositoryStorage = new RepositoryStorage<>(localRepository, fileName, authorName, authorEmail, message, serializer, deserializer);
71 current = current();
72 } catch (IOException e) {
73 throw new UncheckedIOException(e);
74 }
75 }
76
77 @Override
78 public Set<T> current() {
79 return repositoryStorage.current();
80 }
|
40 private final StorageSerializer<T> serializer;
41 private final StorageDeserializer<T> deserializer;
42
43 private Hash hash;
44 private RepositoryStorage<T> repositoryStorage;
45 private Set<T> current;
46
47 HostedRepositoryStorage(HostedRepository repository, Path localStorage, String ref, String fileName, String authorName, String authorEmail, String message, StorageSerializer<T> serializer, StorageDeserializer<T> deserializer) {
48 this.hostedRepository = repository;
49 this.ref = ref;
50 this.fileName = fileName;
51 this.authorEmail = authorEmail;
52 this.authorName = authorName;
53 this.message = message;
54 this.serializer = serializer;
55 this.deserializer = deserializer;
56
57 try {
58 Repository localRepository;
59 try {
60 localRepository = Repository.materialize(localStorage, repository.url(), "+" + ref + ":storage");
61 } catch (IOException e) {
62 // The remote ref may not yet exist
63 localRepository = Repository.init(localStorage, repository.repositoryType());
64 var storage = Files.writeString(localStorage.resolve(fileName), "");
65 localRepository.add(storage);
66 localRepository.commit(message, authorName, authorEmail);
67 }
68 this.localRepository = localRepository;
69 hash = localRepository.head();
70 repositoryStorage = new RepositoryStorage<>(localRepository, fileName, authorName, authorEmail, message, serializer, deserializer);
71 current = current();
72 } catch (IOException e) {
73 throw new UncheckedIOException(e);
74 }
75 }
76
77 @Override
78 public Set<T> current() {
79 return repositoryStorage.current();
80 }
|