From 7f35218bc0a2dc0272e571611c49117571f6db78 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 19 Feb 2021 12:27:33 +0100 Subject: [PATCH] Rename repo folder on clone Take the name from the clone url --- lib/repository.dart | 5 ++--- lib/setup/clone.dart | 11 +++++++++++ lib/setup/screens.dart | 20 +++++++++++++++++++- pubspec.lock | 2 +- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/lib/repository.dart b/lib/repository.dart index 737f67a9..3f8a293b 100644 --- a/lib/repository.dart +++ b/lib/repository.dart @@ -419,14 +419,13 @@ class GitJournalRepo with ChangeNotifier { Future completeGitHostSetup( String repoFolderName, String remoteName) async { - var repoPath = p.join(gitBaseDirectory, repoFolderName); - Log.i("completeGitHostSetup repoPath: $repoPath"); + repoPath = p.join(gitBaseDirectory, repoFolderName); + Log.i("repoPath: $repoPath"); _gitRepo = GitNoteRepository(gitDirPath: repoPath, settings: settings); await _addFileInRepo(repo: this, settings: settings); - this.repoPath = repoPath; _notesCache.clear(); remoteGitRepoConfigured = true; notesFolder.reset(repoPath); diff --git a/lib/setup/clone.dart b/lib/setup/clone.dart index b4578323..afc47315 100644 --- a/lib/setup/clone.dart +++ b/lib/setup/clone.dart @@ -92,6 +92,9 @@ Future cloneRemote({ ); } } + + // Just to be on the safer side, incase dart-git fucks up something + await repo.checkout("."); } Future _remoteDefaultBranch({ @@ -124,6 +127,14 @@ Future _remoteDefaultBranch({ return remoteBranch.target.branchName(); } +String folderNameFromCloneUrl(String cloneUrl) { + var name = p.basename(cloneUrl); + if (name.endsWith('.git')) { + name = name.substring(0, name.length - 4); + } + return name; +} + // Test Cases - // * New Repo, No Local Changes // * New Repo, Existing Changes diff --git a/lib/setup/screens.dart b/lib/setup/screens.dart index b3a96e8b..e388654c 100644 --- a/lib/setup/screens.dart +++ b/lib/setup/screens.dart @@ -566,7 +566,25 @@ class GitHostSetupScreenState extends State { Event.GitHostSetupComplete, parameters: _buildOnboardingAnalytics(), ); - await widget.onCompletedFunction(widget.repoFolderName, widget.remoteName); + + var folderName = folderNameFromCloneUrl(_gitCloneUrl); + if (folderName != widget.repoFolderName) { + var newRepoPath = p.join(basePath, folderName); + var i = 0; + while (Directory(newRepoPath).existsSync()) { + i++; + newRepoPath = p.join(basePath, folderName + "_$i"); + } + folderName = p.basename(newRepoPath); + + var repoPath = p.join(basePath, widget.repoFolderName); + Log.i("Renaming $repoPath --> $newRepoPath"); + await Directory(repoPath).rename(newRepoPath); + settings.folderName = p.basename(newRepoPath); + } + + Log.i("calling onComplete $folderName ${widget.remoteName}"); + await widget.onCompletedFunction(folderName, widget.remoteName); Navigator.pop(context); } diff --git a/pubspec.lock b/pubspec.lock index 079ebc9e..6f9d118c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -188,7 +188,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: "98bffd6e738a5687ed29dd5e7a9c9b6004152510" + resolved-ref: c245e8984e27bc72178d73dedcceec5cbd5bdd9e url: "https://github.com/GitJournal/dart-git.git" source: git version: "0.0.2"