From bd508c2dcca047e4eb5fb3c12a7947d6e12c5670 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Mon, 28 Jan 2013 17:01:09 +0400 Subject: [PATCH] Fixed parsing VCS requirements with '/' in revision (PY-8623) --- .../src/com/jetbrains/python/packaging/PyRequirement.java | 6 ++++-- python/testSrc/com/jetbrains/python/PyRequirementTest.java | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) 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); }