@@ -769,7 +769,53 @@ class GitRepositoryTests: XCTestCase {
769
769
}
770
770
}
771
771
772
- func testValidDirectoryLocal( ) async throws {
772
+ func testValidDirectoryLocalRelativeOrigin( ) async throws {
773
+ try testWithTemporaryDirectory { tmpDir in
774
+ // Create a repository.
775
+ let packageDir = tmpDir. appending ( " SomePackage " )
776
+ try localFileSystem. createDirectory ( packageDir)
777
+
778
+ // Create a repository manager for it.
779
+ let repoProvider = GitRepositoryProvider ( )
780
+ let repositoryManager = RepositoryManager (
781
+ fileSystem: localFileSystem,
782
+ path: packageDir,
783
+ provider: repoProvider,
784
+ delegate: . none
785
+ )
786
+
787
+ let customRemote = " ../OriginOfSomePackage.git "
788
+
789
+ // Before initializing the directory with a git repo, it is never valid.
790
+ XCTAssertThrowsError ( try repositoryManager. isValidDirectory ( packageDir) )
791
+ XCTAssertThrowsError ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( packageDir. pathString) ) ) )
792
+ XCTAssertThrowsError ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( customRemote) ) ) )
793
+
794
+ initGitRepo ( packageDir)
795
+ // Set the remote.
796
+ try systemQuietly ( [ Git . tool, " -C " , packageDir. pathString, " remote " , " add " , " origin " , customRemote] )
797
+ XCTAssertTrue ( try repositoryManager. isValidDirectory ( packageDir) )
798
+
799
+ let customRemoteWithoutPathExtension = ( customRemote as NSString ) . deletingPathExtension
800
+ XCTAssertTrue ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( customRemote) ) ) )
801
+ // We consider the directory valid even if the remote does not have the same path extension - in this case we expected '.git'.
802
+ XCTAssertTrue ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( customRemoteWithoutPathExtension) ) ) )
803
+ // We consider the directory valid even if the remote does not have the same path extension - in this case we expected '.git'.
804
+ XCTAssertTrue ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( ( customRemote as NSString ) . deletingPathExtension + " / " ) ) ) )
805
+
806
+ // The following ensure that are actually checking the remote's origin.
807
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( path: AbsolutePath ( validating: " / " ) ) ) )
808
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( " / " ) ) ) )
809
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( path: packageDir) ) )
810
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( packageDir. pathString) ) ) )
811
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( path: packageDir. appending ( extension: " git " ) ) ) )
812
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( packageDir. pathString. appending ( " .git " ) ) ) ) )
813
+
814
+ XCTAssertFalse ( try repositoryManager. isValidDirectory ( packageDir, for: RepositorySpecifier ( url: SourceControlURL ( " https://mycustomdomain/some-package.git " ) ) ) )
815
+ }
816
+ }
817
+
818
+ func testValidDirectoryLocalAbsoluteOrigin( ) async throws {
773
819
try testWithTemporaryDirectory { tmpDir in
774
820
// Create a repository.
775
821
let packageDir = tmpDir. appending ( " SomePackage " )
@@ -819,7 +865,7 @@ class GitRepositoryTests: XCTestCase {
819
865
}
820
866
}
821
867
822
- func testValidDirectoryRemote ( ) async throws {
868
+ func testValidDirectoryRemoteOrigin ( ) async throws {
823
869
try testWithTemporaryDirectory { tmpDir in
824
870
// Create a repository.
825
871
let packageDir = tmpDir. appending ( " SomePackage " )
0 commit comments