use of org.locationtech.geogig.api.RevTag in project GeoGig by boundlessgeo.
the class LocalRemoteRepo method walkHead.
protected void walkHead(final ObjectId newHeadId, final boolean fetch, final ProgressListener progress) {
Repository from = localRepository;
Repository to = remoteGeoGig.getRepository();
if (fetch) {
Repository tmp = to;
to = from;
from = tmp;
}
final ObjectDatabase fromDb = from.objectDatabase();
final ObjectDatabase toDb = to.objectDatabase();
final RevObject object = fromDb.get(newHeadId);
RevCommit commit = null;
RevTag tag = null;
if (object.getType().equals(TYPE.COMMIT)) {
commit = (RevCommit) object;
} else if (object.getType().equals(TYPE.TAG)) {
tag = (RevTag) object;
commit = fromDb.getCommit(tag.getCommitId());
}
if (commit != null) {
final RevTree newTree = fromDb.getTree(commit.getTreeId());
List<ObjectId> parentIds = new ArrayList<>(commit.getParentIds());
if (parentIds.isEmpty()) {
parentIds.add(ObjectId.NULL);
}
RevTree oldTree = RevTree.EMPTY;
// the diff against each parent is not working. For some reason some buckets that are
// equal between the two ends of the comparison never get transferred (at some point
// they shouldn't be equal and so the Consumer notified of it/them). Yet with the target
// databse exists check for each tree the performance is good enough.
// for (ObjectId parentId : parentIds) {
// if (!parentId.isNull()) {
// RevCommit parent = fromDb.getCommit(parentId);
// oldTree = fromDb.getTree(parent.getTreeId());
// }
copyNewObjects(oldTree, newTree, fromDb, toDb, progress);
// }
Preconditions.checkState(toDb.exists(newTree.getId()));
toDb.put(commit);
}
if (tag != null) {
toDb.put(tag);
}
}
Aggregations