diff --git a/src/main/java/git/lfs/migrate/GitConverter.java b/src/main/java/git/lfs/migrate/GitConverter.java index b36cecd..c2c3927 100644 --- a/src/main/java/git/lfs/migrate/GitConverter.java +++ b/src/main/java/git/lfs/migrate/GitConverter.java @@ -72,6 +72,9 @@ public ObjectId convert(@NotNull ObjectId id) throws IOException { if (revObject instanceof RevBlob) { return copy(id); } + if (revObject instanceof RevTag) { + return convertTag((RevTag) revObject); + } throw new IllegalStateException("Unsupported object type: " + id.getName() + " (" + revObject.getClass().getName() + ")"); } catch (IOException e) { rethrow(e); @@ -94,6 +97,17 @@ private void sneakyThrow(Throwable exception) throws T { new EvilThrower().sneakyThrow(exception); } + @NotNull + private ObjectId convertTag(@NotNull RevTag revObject) throws IOException { + final ObjectId id = convert(revObject.getObject()); + final TagBuilder builder = new TagBuilder(); + builder.setMessage(revObject.getFullMessage()); + builder.setTag(revObject.getTagName()); + builder.setTagger(revObject.getTaggerIdent()); + builder.setObjectId(id, revObject.getObject().getType()); + return inserter.insert(builder); + } + @NotNull private ObjectId convertCommit(@NotNull RevCommit revObject) throws IOException { final CommitBuilder builder = new CommitBuilder(); @@ -152,7 +166,7 @@ private ObjectId convertTree(@NotNull ObjectId id, boolean rootTree) throws IOEx entries.add(new GitTreeEntry(fileMode, blobId, treeParser.getEntryPathString())); treeParser.next(); } - if (needAttributes) { + if (needAttributes && suffixes.length > 0) { entries.add(new GitTreeEntry(FileMode.REGULAR_FILE, createAttributes(null), GIT_ATTRIBUTES)); modified = true; } diff --git a/src/main/java/git/lfs/migrate/Main.java b/src/main/java/git/lfs/migrate/Main.java index 613a4e3..71d4ec4 100644 --- a/src/main/java/git/lfs/migrate/Main.java +++ b/src/main/java/git/lfs/migrate/Main.java @@ -72,8 +72,11 @@ public static void processRepository(@NotNull File srcPath, @NotNull File dstPat } for (Map.Entry ref : srcRepo.getAllRefs().entrySet()) { RefUpdate refUpdate = dstRepo.updateRef(ref.getKey()); - refUpdate.setNewObjectId(converter.convert(ref.getValue().getObjectId())); + final ObjectId oldId = ref.getValue().getObjectId(); + final ObjectId newId = converter.convert(oldId); + refUpdate.setNewObjectId(newId); refUpdate.update(); + log.info(" convert ref: {} -> {} ({})", oldId.getName(), newId.getName(), ref.getKey()); } } finally { dstRepo.close();