From 5e162cb8f1c595891daede3d8dd1a1bbbc98ee8c Mon Sep 17 00:00:00 2001 From: woshikid Date: Wed, 21 Sep 2022 22:39:10 +0800 Subject: [PATCH] Exact match of branch names in JGitEnvironmentRepository - Fixes gh-2133 (#2147) --- .../JGitEnvironmentRepository.java | 2 +- .../JGitEnvironmentRepositoryTests.java | 22 ++++++++++++++---- .../resources/branch-with-slash-repo/bar.yml | 1 + .../branch-with-slash-repo/git/COMMIT_EDITMSG | 1 + .../resources/branch-with-slash-repo/git/HEAD | 1 + .../branch-with-slash-repo/git/config | 5 ++++ .../branch-with-slash-repo/git/description | 1 + .../branch-with-slash-repo/git/index | Bin 0 -> 137 bytes .../branch-with-slash-repo/git/logs/HEAD | 3 +++ .../git/logs/refs/heads/feature/foo | 1 + .../git/logs/refs/heads/master | 3 +++ .../08/eb9e67a7225c302e3906a63cb9544e619fc804 | Bin 0 -> 153 bytes .../0d/706a8f14e7ec2b9abf99c603f3f5467d2d38ff | Bin 0 -> 51 bytes .../54/8298f39d0c5a84a1ada7a2b03ef54aad1fffa2 | Bin 0 -> 36 bytes .../5c/19df95639519f2286fc6d39182f271ee8c0b6b | Bin 0 -> 39 bytes .../6e/067728a52e959f60788121b4046e5b27793e61 | Bin 0 -> 39 bytes .../7a/9804f8901709bdcf794c553805d5bc5188f821 | 2 ++ .../91/5bd24aaf815120f2755ef4fc66404f5d37b383 | Bin 0 -> 152 bytes .../ae/c5d43644133593483b7c243f851606aa2c0128 | Bin 0 -> 52 bytes .../fa/c65b3a4678430e2b86e3b28510b37c5a7942a7 | Bin 0 -> 52 bytes .../git/refs/heads/feature/foo | 1 + .../git/refs/heads/master | 1 + .../branch-with-slash-repo/git/refs/tags/foo | 1 + 23 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/bar.yml create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/COMMIT_EDITMSG create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/HEAD create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/config create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/description create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/index create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/HEAD create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/feature/foo create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/logs/refs/heads/master create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/08/eb9e67a7225c302e3906a63cb9544e619fc804 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/0d/706a8f14e7ec2b9abf99c603f3f5467d2d38ff create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/54/8298f39d0c5a84a1ada7a2b03ef54aad1fffa2 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/5c/19df95639519f2286fc6d39182f271ee8c0b6b create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/6e/067728a52e959f60788121b4046e5b27793e61 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/7a/9804f8901709bdcf794c553805d5bc5188f821 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/91/5bd24aaf815120f2755ef4fc66404f5d37b383 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/ae/c5d43644133593483b7c243f851606aa2c0128 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/objects/fa/c65b3a4678430e2b86e3b28510b37c5a7942a7 create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/feature/foo create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/heads/master create mode 100644 spring-cloud-config-server/src/test/resources/branch-with-slash-repo/git/refs/tags/foo 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 0000000000000000000000000000000000000000..9490d0bb7121377a4d69206a9b43f417fd64f95a GIT binary patch literal 137 zcmZ?q402{*U|<4b#$*jMW5W-QZ@_eemjhUw(cmisL*o(#2IdzK%pe{kd4Fp1RLM^o z`Nu9#Z2DCAu7^9Dfjud)NUt(C2dF6|$ki1{NirBJ7;vpSdd18|*mSaob&ZOBs~FoV d9Y&2m^Lg%W@YfBz%UE+V{Qb!*_nr5i1ppHsEHnTB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b0e4abb3b862509e2e8ac3ebd65809268c145df2 GIT binary patch literal 153 zcmV;K0A~Mq0hNwh3c@fD0R7G>@-LKZb~i~u#H(!cutj5}jd*=?1^U+*wa^ytlhyamiq=1W$maqf{XPk(Q25eAo+4HOG8F)#SL`nb#Yl`*ExloDDk)gr~ z{el6NeEQmU{cXp(J+`DTFR6JNbh}sCo>Oe~s=+yAKYIxJY=SXr*s<61-=V5ec literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..145568772cab86c78996e0d5512de5b2e7d78195 GIT binary patch literal 51 zcmb2m5Ggm$UKC2HL literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..3b5608da0d1772966f4c39439d5bba2b7fd81e08 GIT binary patch literal 39 vcmb*?ttcp{JbG_aYGqDy zuT??`;0amT8fw-lQsNl12g8P)^`YoukXgKFuiKP?B7$X%paR5HGKXlha|Xc`m$Flc zj9Ll$%ysPYJKk%1v?4DX^|~B%yLW2OC69iU%6sEN^w!BUAb>dRu{Z1Ap-4Mzc@;lc GY(l!oc}R@_ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..74009400e68bd3d83d5a81de109cbf5dbf242bbe GIT binary patch literal 52 zcmV-40L%Y)0V^p=O;s>9WiT`_Ff%bxNJ=cytIW+|h>^TMHF>J!Cyo4LmnSxTDty<& Koecmo!VtgeiWIZ} literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..911f6976df3e7302dab391f66c989fa258943abb GIT binary patch literal 52 zcmV-40L%Y)0V^p=O;s>9WiT`_Ff%bxNJ=cytIW+|2x*$}c`i>>%fhwG7j3Zn>a|w> K{~`c5WD!>O^cBni literal 0 HcmV?d00001 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