From 54081ccdc6c1d1663370576ffd12e7f618087371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 25 Oct 2022 09:14:40 +0200 Subject: [PATCH] Git import with lfs support (#2133) This adds the possibility to load files managed by lfs to the repository import of git repositories. Co-authored-by: Konstantin Schaper --- .../de/user/repo/assets/import-repository.png | Bin 61333 -> 70945 bytes docs/de/user/repo/index.md | 26 +++- .../en/user/repo/assets/import-repository.png | Bin 56039 -> 66559 bytes docs/en/user/repo/index.md | 26 +++- gradle/changelog/lfs_import.yaml | 2 + .../sonia/scm/notifications/Notification.java | 11 +- .../repository/api/PullCommandBuilder.java | 13 ++ .../scm/repository/api/PullResponse.java | 49 ++++++- .../repository/spi/PullCommandRequest.java | 20 ++- .../scm/repository/spi/GitMirrorCommand.java | 28 +++- .../scm/repository/spi/GitPullCommand.java | 58 ++++++++- .../sonia/scm/repository/spi/LfsLoader.java | 58 +++++---- .../spi/MirrorHttpConnectionProvider.java | 1 - .../spi/PullHttpConnectionProvider.java | 55 ++++++++ .../spi/GitIncomingCommandTest.java | 8 +- .../repository/spi/GitMirrorCommandTest.java | 11 +- .../spi/GitModificationsCommandTest.java | 10 +- scm-ui/ui-types/src/Notifications.ts | 1 + scm-ui/ui-types/src/Repositories.ts | 1 + scm-ui/ui-webapp/public/locales/de/repos.json | 6 +- scm-ui/ui-webapp/public/locales/en/repos.json | 6 +- .../src/containers/Notifications.tsx | 26 +++- .../repos/components/ImportFromUrlForm.tsx | 11 +- .../scm/api/v2/resources/NotificationDto.java | 3 + .../resources/RepositoryImportResource.java | 3 + .../scm/importexport/FromUrlImporter.java | 21 ++- .../ImportNotificationHandler.java | 88 +++++++++++++ .../scm/notifications/StoredNotification.java | 3 + .../main/resources/locales/de/plugins.json | 4 + .../main/resources/locales/en/plugins.json | 4 + .../resources/NotificationResourceTest.java | 4 +- .../scm/importexport/FromUrlImporterTest.java | 123 +++++++++++++----- .../ImportNotificationHandlerTest.java | 110 ++++++++++++++++ 33 files changed, 673 insertions(+), 117 deletions(-) create mode 100644 gradle/changelog/lfs_import.yaml create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PullHttpConnectionProvider.java create mode 100644 scm-webapp/src/main/java/sonia/scm/importexport/ImportNotificationHandler.java create mode 100644 scm-webapp/src/test/java/sonia/scm/importexport/ImportNotificationHandlerTest.java diff --git a/docs/de/user/repo/assets/import-repository.png b/docs/de/user/repo/assets/import-repository.png index 90b02347eafd411cc97e400c260724c367463628..d7f78837aad41fd26844ad2a7635d5a572527151 100644 GIT binary patch literal 70945 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