diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java index 987c46d7..b4518ea6 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java @@ -721,7 +721,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository } List branches = command.call(); for (Ref ref : branches) { - if (ref.getName().endsWith("/" + label)) { + if (ref.getName().equals("refs/heads/" + label) || ref.getName().equals("refs/remotes/origin/" + label)) { return true; } } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java index 336c598d..47a852a9 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepositoryTests.java @@ -228,6 +228,20 @@ public class JGitEnvironmentRepositoryTests { assertThat(this.repository.getUri()).isEqualTo("git://localhost/foo"); } + @Test + public void testBranchEndsWithTag() throws IOException { + String uri = ConfigServerTestUtils.prepareLocalRepo("branch-with-slash-repo"); + this.repository.setUri(uri); + + // exists branch "feature/foo" + Environment environment = this.repository.findOne("bar", "staging", "feature/foo"); + assertVersion(environment); + + // try tag "foo" + environment = this.repository.findOne("bar", "staging", "foo"); + assertThat(environment.getPropertySources().get(0).getSource().get("key")).isEqualTo("value from tag"); + } + @Test public void afterPropertiesSet_CloneOnStartTrue_CloneAndFetchCalled() throws Exception { Git mockGit = mock(Git.class); @@ -740,7 +754,7 @@ public class JGitEnvironmentRepositoryTests { when(checkoutCommand.call()).thenReturn(ref); when(listBranchCommand.call()).thenReturn(Arrays.asList(branch1Ref)); when(fetchCommand.call()).thenReturn(fetchResult); - when(branch1Ref.getName()).thenReturn("origin/master"); + when(branch1Ref.getName()).thenReturn("refs/remotes/origin/master"); when(status.isClean()).thenReturn(true); JGitEnvironmentRepository repo = new JGitEnvironmentRepository(this.environment, @@ -1203,12 +1217,12 @@ public class JGitEnvironmentRepositoryTests { // Mock master branch Ref mockMasterRef = mock(Ref.class); repositoryRefsList.add(mockMasterRef); - when(mockMasterRef.getName()).thenReturn("/master"); + when(mockMasterRef.getName()).thenReturn("refs/remotes/origin/master"); // Mock release branch. Ref mockReleaseRef = mock(Ref.class); repositoryRefsList.add(mockReleaseRef); - when(mockReleaseRef.getName()).thenReturn("/release"); + when(mockReleaseRef.getName()).thenReturn("refs/remotes/origin/release"); // Mock calls on list and checkout commands when(mockListBranchCommand.call()).thenReturn(repositoryRefsList); @@ -1257,7 +1271,7 @@ public class JGitEnvironmentRepositoryTests { // Mock master branch Ref mockMasterRef = mock(Ref.class); repositoryRefsList.add(mockMasterRef); - when(mockMasterRef.getName()).thenReturn("/master"); + when(mockMasterRef.getName()).thenReturn("refs/remotes/origin/master"); // Mock calls on list and checkout commands when(mockListBranchCommand.call()).thenReturn(repositoryRefsList); diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/bar.yml b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/bar.yml new file mode 100644 index 00000000..5c19df95 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/bar.yml @@ -0,0 +1 @@ +key: value from master diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/COMMIT_EDITMSG b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/COMMIT_EDITMSG new file mode 100644 index 00000000..1f7391f9 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/COMMIT_EDITMSG @@ -0,0 +1 @@ +master diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/HEAD b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/config b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/config new file mode 100644 index 00000000..515f4836 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/config @@ -0,0 +1,5 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/description b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/index b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/index new file mode 100644 index 00000000..9490d0bb Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/index differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/HEAD b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/HEAD new file mode 100644 index 00000000..ad8d64c9 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/HEAD @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 7a9804f8901709bdcf794c553805d5bc5188f821 woshikid 1663579538 +0800 commit (initial): tag +7a9804f8901709bdcf794c553805d5bc5188f821 915bd24aaf815120f2755ef4fc66404f5d37b383 woshikid 1663579645 +0800 commit: branch +915bd24aaf815120f2755ef4fc66404f5d37b383 08eb9e67a7225c302e3906a63cb9544e619fc804 woshikid 1663579718 +0800 commit: master diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/feature/foo b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/feature/foo new file mode 100644 index 00000000..cb5b1757 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/feature/foo @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 915bd24aaf815120f2755ef4fc66404f5d37b383 woshikid 1663579678 +0800 branch: Created from master diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/master b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/master new file mode 100644 index 00000000..ad8d64c9 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/master @@ -0,0 +1,3 @@ +0000000000000000000000000000000000000000 7a9804f8901709bdcf794c553805d5bc5188f821 woshikid 1663579538 +0800 commit (initial): tag +7a9804f8901709bdcf794c553805d5bc5188f821 915bd24aaf815120f2755ef4fc66404f5d37b383 woshikid 1663579645 +0800 commit: branch +915bd24aaf815120f2755ef4fc66404f5d37b383 08eb9e67a7225c302e3906a63cb9544e619fc804 woshikid 1663579718 +0800 commit: master diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/08/eb9e67a7225c302e3906a63cb9544e619fc804 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/08/eb9e67a7225c302e3906a63cb9544e619fc804 new file mode 100644 index 00000000..b0e4abb3 Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/08/eb9e67a7225c302e3906a63cb9544e619fc804 differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/0d/706a8f14e7ec2b9abf99c603f3f5467d2d38ff b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/0d/706a8f14e7ec2b9abf99c603f3f5467d2d38ff new file mode 100644 index 00000000..14556877 Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/0d/706a8f14e7ec2b9abf99c603f3f5467d2d38ff differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/54/8298f39d0c5a84a1ada7a2b03ef54aad1fffa2 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/54/8298f39d0c5a84a1ada7a2b03ef54aad1fffa2 new file mode 100644 index 00000000..68285dce Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/54/8298f39d0c5a84a1ada7a2b03ef54aad1fffa2 differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/5c/19df95639519f2286fc6d39182f271ee8c0b6b b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/5c/19df95639519f2286fc6d39182f271ee8c0b6b new file mode 100644 index 00000000..e39ba7f7 Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/5c/19df95639519f2286fc6d39182f271ee8c0b6b differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/6e/067728a52e959f60788121b4046e5b27793e61 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/6e/067728a52e959f60788121b4046e5b27793e61 new file mode 100644 index 00000000..3b5608da Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/6e/067728a52e959f60788121b4046e5b27793e61 differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/7a/9804f8901709bdcf794c553805d5bc5188f821 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/7a/9804f8901709bdcf794c553805d5bc5188f821 new file mode 100644 index 00000000..b9ed165c --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/7a/9804f8901709bdcf794c553805d5bc5188f821 @@ -0,0 +1,2 @@ +xA +0E]JLR(U&ql@x}swj-fv~]2SBG.EVL.lL$m< ֗TƺnUsʭ^FBlfqot3 \ No newline at end of file diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/91/5bd24aaf815120f2755ef4fc66404f5d37b383 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/91/5bd24aaf815120f2755ef4fc66404f5d37b383 new file mode 100644 index 00000000..39479499 Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/91/5bd24aaf815120f2755ef4fc66404f5d37b383 differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/ae/c5d43644133593483b7c243f851606aa2c0128 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/ae/c5d43644133593483b7c243f851606aa2c0128 new file mode 100644 index 00000000..74009400 Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/ae/c5d43644133593483b7c243f851606aa2c0128 differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/fa/c65b3a4678430e2b86e3b28510b37c5a7942a7 b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/fa/c65b3a4678430e2b86e3b28510b37c5a7942a7 new file mode 100644 index 00000000..911f6976 Binary files /dev/null and b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/fa/c65b3a4678430e2b86e3b28510b37c5a7942a7 differ diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/feature/foo b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/feature/foo new file mode 100644 index 00000000..0edf4bff --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/feature/foo @@ -0,0 +1 @@ +915bd24aaf815120f2755ef4fc66404f5d37b383 diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/master b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/master new file mode 100644 index 00000000..490b6d00 --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/master @@ -0,0 +1 @@ +08eb9e67a7225c302e3906a63cb9544e619fc804 diff --git a/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/tags/foo b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/tags/foo new file mode 100644 index 00000000..b5ce360d --- /dev/null +++ b/spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/tags/foo @@ -0,0 +1 @@ +7a9804f8901709bdcf794c553805d5bc5188f821