diff --git a/python/openapi/src/com/jetbrains/python/packaging/PyRequirement.java b/python/openapi/src/com/jetbrains/python/packaging/PyRequirement.java index b2549a6a75dc..488b101ad994 100644 --- a/python/openapi/src/com/jetbrains/python/packaging/PyRequirement.java +++ b/python/openapi/src/com/jetbrains/python/packaging/PyRequirement.java @@ -25,7 +25,7 @@ public class PyRequirement { private static final Pattern VERSION_SPEC = Pattern.compile("\\s*(<=?|>=?|==|!=)\\s*((\\w|[-.])+)"); private static final Pattern EDITABLE_EGG = Pattern.compile("\\s*(-e)?\\s*([^#]*)(#egg=(.*))?"); private static final Pattern RECURSIVE_REQUIREMENT = Pattern.compile("\\s*-r\\s+(.*)"); - private static final Pattern VCS_PATH = Pattern.compile(".*/([^@/]+)/?(@.*)?"); + private static final Pattern VCS_PATH = Pattern.compile(".*/([^/]+)/?"); public enum Relation { LT("<"), @@ -408,8 +408,10 @@ public class PyRequirement { try { final URI uri = new URI(url); if (uri.getScheme() != null) { - final String path = uri.getPath(); + String path = uri.getPath(); if (path != null) { + final String[] split = path.split("@", 2); + path = split[0]; final Matcher vcsPathMatcher = VCS_PATH.matcher(path); if (!vcsPathMatcher.matches()) { return null; diff --git a/python/testSrc/com/jetbrains/python/PyRequirementTest.java b/python/testSrc/com/jetbrains/python/PyRequirementTest.java index ab2a99a89511..108e61557b7a 100644 --- a/python/testSrc/com/jetbrains/python/PyRequirementTest.java +++ b/python/testSrc/com/jetbrains/python/PyRequirementTest.java @@ -79,6 +79,12 @@ public class PyRequirementTest extends PyTestCase { PyRequirement.fromString("hg+ssh://hg@bitbucket.org/jespern/django-piston/")); } + // PY-8623 + public void testGitRevisionWithSlash() { + assertEquals(new PyRequirement("django", null, "git+git://github.com/django/django.git@stable/1.5.x", false), + PyRequirement.fromString("git+git://github.com/django/django.git@stable/1.5.x")); + } + private static List list(T... xs) { return Arrays.asList(xs); }