From c054a68ffdecfdae80c3c573b1232d10dbb66472 Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Tue, 29 Sep 2026 17:18:45 +0300 Subject: [PATCH 01/10] Fix the vulnerable dependencies that block the release Rewrite relative replace paths with go mod edit instead of running the gomod-absolutizer, remove its submodule, and upgrade jackson to 2.21.7. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/test.yml | 1 - .gitmodules | 4 -- build.gradle | 2 +- .../ide/common/go/GoScanWorkspaceCreator.java | 66 +++++++++++++++---- .../jfrog/ide/common/go/GoTreeBuilder.java | 36 +--------- src/main/resources/gomod-absolutizer | 1 - 6 files changed, 56 insertions(+), 54 deletions(-) delete mode 100644 .gitmodules delete mode 160000 src/main/resources/gomod-absolutizer diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9671ea9c..ad008dc6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -29,7 +29,6 @@ jobs: steps: - uses: actions/checkout@v4 with: - submodules: true ref: ${{ github.event.pull_request.head.sha }} - name: Unlabel 'safe to test' diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index bcff49ec..00000000 --- a/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "src/main/resources/gomod-absolutizer"] - path = src/main/resources/gomod-absolutizer - url = https://github.com/jfrog/gomod-absolutizer - branch = main diff --git a/build.gradle b/build.gradle index a538b304..4c3c4794 100644 --- a/build.gradle +++ b/build.gradle @@ -23,7 +23,7 @@ repositories { } def buildInfoVersion = '2.43.9' -def jacksonVersion = '2.18.6' +def jacksonVersion = '2.21.7' dependencies { implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: jacksonVersion diff --git a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java index 63390580..07f686d1 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java +++ b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java @@ -1,5 +1,8 @@ package com.jfrog.ide.common.go; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jfrog.build.api.util.Log; @@ -11,13 +14,15 @@ import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Stream; +import static com.jfrog.ide.common.utils.Utils.createMapper; + /** * This FileVisitor copies all go.mod and *.go files from the input source directory to the input target directory. * For all go.mod files, replaces relative paths to absolute. @@ -27,6 +32,7 @@ * @author yahavi **/ public class GoScanWorkspaceCreator implements FileVisitor { + private static final ObjectMapper jsonReader = createMapper(); private final GoDriver goDriver; private final Path sourceDir; private final Path targetDir; @@ -34,9 +40,9 @@ public class GoScanWorkspaceCreator implements FileVisitor { private final boolean runGoThroughWsl; private static final String[] EXCLUDED_DIRS = new String[]{".git", ".idea", ".vscode"}; - public GoScanWorkspaceCreator(String executablePath, Path sourceDir, Path targetDir, Path goModAbsDir, + public GoScanWorkspaceCreator(String executablePath, Path sourceDir, Path targetDir, Map env, Log logger, boolean runGoThroughWsl) { - this.goDriver = new GoDriver(executablePath, env, goModAbsDir.toFile(), logger, runGoThroughWsl); + this.goDriver = new GoDriver(executablePath, env, targetDir.toFile(), logger, runGoThroughWsl); this.sourceDir = sourceDir; this.targetDir = targetDir; this.logger = logger; @@ -80,17 +86,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO if (fileName.equals("go.mod")) { Path targetGoMod = targetDir.resolve(sourceDir.relativize(file)); Files.copy(file, targetGoMod); - if (runGoThroughWsl) { - String goModPathArg = WslUtils.windowsLocalPathToWslMount(targetGoMod.toAbsolutePath().toString()); - String sourceAbs = sourceDir.toAbsolutePath().toString(); - String wdArg = WslUtils.isWslPath(sourceAbs) - ? WslUtils.toLinuxPath(sourceAbs) - : WslUtils.windowsLocalPathToWslMount(sourceAbs); - List args = new ArrayList<>(Arrays.asList("run", ".", "-goModPath=" + goModPathArg, "-wd=" + wdArg)); - goDriver.runCmd(args, true); - } else { - goDriver.runCmd("run . -goModPath=" + targetGoMod.toAbsolutePath() + " -wd=" + sourceDir.toAbsolutePath(), true); - } + absolutizeReplacePaths(targetGoMod); return FileVisitResult.CONTINUE; } // Files other than go.mod and *.go files are not necessary to build the dependency tree of used Go packages. @@ -101,6 +97,48 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO return FileVisitResult.CONTINUE; } + private void absolutizeReplacePaths(Path goMod) throws IOException { + String goModArg = toGoPath(goMod.toAbsolutePath().toString()); + String goModJson = goDriver.runCmd(List.of("mod", "edit", "-json", goModArg), false).getRes(); + List editArgs = new ArrayList<>(List.of("mod", "edit")); + for (JsonNode replace : jsonReader.readTree(goModJson).path("Replace")) { + JsonNode replacement = replace.get("New"); + String replacementPath = replacement.get("Path").asText(); + if (replacement.has("Version") || isAbsolute(replacementPath)) { + continue; + } + editArgs.add("-replace=" + toModuleQuery(replace.get("Old")) + "=" + resolveFromSourceDir(replacementPath)); + } + if (editArgs.size() == 2) { + return; + } + editArgs.add(goModArg); + goDriver.runCmd(editArgs, true); + } + + private String toGoPath(String localPath) { + if (!runGoThroughWsl) { + return localPath; + } + return WslUtils.isWslPath(localPath) ? WslUtils.toLinuxPath(localPath) : WslUtils.windowsLocalPathToWslMount(localPath); + } + + private boolean isAbsolute(String goPath) { + return runGoThroughWsl ? goPath.startsWith("/") : Paths.get(goPath).isAbsolute(); + } + + private String resolveFromSourceDir(String relativePath) { + if (runGoThroughWsl) { + return FilenameUtils.normalize(toGoPath(sourceDir.toAbsolutePath().toString()) + "/" + relativePath, true); + } + return sourceDir.toAbsolutePath().resolve(relativePath).normalize().toString(); + } + + private static String toModuleQuery(JsonNode module) { + String path = module.get("Path").asText(); + return module.has("Version") ? path + "@" + module.get("Version").asText() : path; + } + @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { if (exc != null) { diff --git a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java index 7bc76e64..affcb700 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java +++ b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java @@ -27,8 +27,6 @@ @SuppressWarnings({"unused"}) public class GoTreeBuilder { - // Required files of the gomod-absolutizer Go program - private static final String[] GO_MOD_ABS_COMPONENTS = new String[]{"go.mod", "go.sum", "main.go", "utils.go"}; private static final Version MIN_GO_VERSION_FOR_BUILD_VCS_FLAG = new Version("1.18"); public static final String GO_VERSION_PATTERN = "^go(\\d*.\\d*.*\\d*)"; private static final String GO_SOURCE_CODE_PREFIX = "github.com/golang/go:"; @@ -124,40 +122,12 @@ static Version parseGoVersion(CommandResults versionRes, Log logger) { */ private Path createGoWorkspace() throws IOException { Path targetDir = Files.createTempDirectory(null); - Path goModAbsDir = null; - try { - goModAbsDir = prepareGoModAbs(); - boolean runGoThroughWsl = WslUtils.isWslPath(projectDir); - GoScanWorkspaceCreator goScanWorkspaceCreator = new GoScanWorkspaceCreator(executablePath, projectDir, targetDir, goModAbsDir, env, logger, runGoThroughWsl); - Files.walkFileTree(projectDir, goScanWorkspaceCreator); - } finally { - if (goModAbsDir != null) { - FileUtils.deleteQuietly(goModAbsDir.toFile()); - } - } + boolean runGoThroughWsl = WslUtils.isWslPath(projectDir); + GoScanWorkspaceCreator goScanWorkspaceCreator = new GoScanWorkspaceCreator(executablePath, projectDir, targetDir, env, logger, runGoThroughWsl); + Files.walkFileTree(projectDir, goScanWorkspaceCreator); return targetDir; } - /** - * Copy gomod-absolutizer Go files to a temp directory. - * The gomod-absolutizer is used to change relative paths in go.mod files to absolute paths. - * - * @throws IOException in case of any I/O error. - */ - private Path prepareGoModAbs() throws IOException { - Path goModAbsDir = Files.createTempDirectory(null); - for (String fileName : GO_MOD_ABS_COMPONENTS) { - try (InputStream is = getClass().getResourceAsStream("/gomod-absolutizer/" + fileName); - OutputStream os = new FileOutputStream(goModAbsDir.resolve(fileName).toFile())) { - if (is == null) { - throw new IOException("Couldn't find resource /gomod-absolutizer/" + fileName); - } - is.transferTo(os); - } - } - return goModAbsDir; - } - private static void populateChildren(DepTree depTree, String[] dependenciesGraph) { Map nodes = depTree.nodes(); for (String entry : dependenciesGraph) { diff --git a/src/main/resources/gomod-absolutizer b/src/main/resources/gomod-absolutizer deleted file mode 160000 index 2bf19fd6..00000000 --- a/src/main/resources/gomod-absolutizer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2bf19fd6b65b1d5d7f3a88673216d836e3583806 From 34f624873a848748d0b754f2557afc69e975b905 Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Tue, 29 Sep 2026 17:34:29 +0300 Subject: [PATCH 02/10] Remove the leftover submodule steps Co-Authored-By: Claude Opus 5.5 --- README.md | 5 ----- release/pipelines.release.yml | 4 ---- release/pipelines.snapshot.yml | 4 ---- 3 files changed, 13 deletions(-) diff --git a/README.md b/README.md index 2c67d60d..d6d38814 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,6 @@ This project includes the common code used by the [JFrog Idea Plugin](https://github.com/jfrog/jfrog-idea-plugin) and the [JFrog Eclipse plugin](https://github.com/jfrog/jfrog-eclipse-plugin). # Building and Testing the Sources -After cloning the project, update submodules: -``` -git submodule init -git submodule update -``` To build the code using the Gradle wrapper in Linux/Unix run: ``` > ./gradlew clean build diff --git a/release/pipelines.release.yml b/release/pipelines.release.yml index f33e1170..32bd5f49 100644 --- a/release/pipelines.release.yml +++ b/release/pipelines.release.yml @@ -27,10 +27,6 @@ pipelines: onExecute: - cd $res_idePluginsJavaReleaseGit_resourcePath - # Fetch submodule files - - git submodule init - - git submodule update - # Set env - export CI=true - export JFROG_BUILD_STATUS=PASS diff --git a/release/pipelines.snapshot.yml b/release/pipelines.snapshot.yml index a322e8ac..1664d95d 100644 --- a/release/pipelines.snapshot.yml +++ b/release/pipelines.snapshot.yml @@ -27,10 +27,6 @@ pipelines: - tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz - export PATH=$PATH:/usr/local/go/bin - go version - # Fetch submodule files - - git submodule init - - git submodule update - # Set env - export CI=true - export JFROG_BUILD_STATUS=PASS From a27b6f131a47d53b6a9bcbbb8c04d4d9aec9d9bb Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Tue, 29 Sep 2026 17:36:19 +0300 Subject: [PATCH 03/10] Remove the JFrog Pipelines release definitions Releases moved to the ecosystem-workflows GitHub Action (XRAY-137561). Co-Authored-By: Claude Opus 5.5 --- release/pipelines.release.yml | 79 ---------------------------- release/pipelines.resources.yml | 20 ------- release/pipelines.snapshot.yml | 68 ------------------------ release/specs/dev-rbc-filespec.json | 8 --- release/specs/prod-rbc-filespec.json | 8 --- 5 files changed, 183 deletions(-) delete mode 100644 release/pipelines.release.yml delete mode 100644 release/pipelines.resources.yml delete mode 100644 release/pipelines.snapshot.yml delete mode 100644 release/specs/dev-rbc-filespec.json delete mode 100644 release/specs/prod-rbc-filespec.json diff --git a/release/pipelines.release.yml b/release/pipelines.release.yml deleted file mode 100644 index 32bd5f49..00000000 --- a/release/pipelines.release.yml +++ /dev/null @@ -1,79 +0,0 @@ -pipelines: - - name: release_ide_plugins_common - configuration: - runtime: - type: image - image: - auto: - language: java - versions: - - "17" - environmentVariables: - readOnly: - NEXT_VERSION: 0.0.0 - NEXT_DEVELOPMENT_VERSION: 0.0.x-SNAPSHOT - BRANCH_NAME: master - - steps: - - name: Release - type: Bash - configuration: - inputResources: - - name: idePluginsJavaReleaseGit - integrations: - - name: il_automation - - name: ecosys_entplus_deployer - execution: - onExecute: - - cd $res_idePluginsJavaReleaseGit_resourcePath - - # Set env - - export CI=true - - export JFROG_BUILD_STATUS=PASS - - export JFROG_CLI_BUILD_NAME=ecosystem-ide-plugins-common-release - - export JFROG_CLI_BUILD_NUMBER=$run_number - - export JFROG_CLI_BUILD_PROJECT=ecosys - - # Configure git - - if [[ $NEXT_VERSION =~ ^1.* ]]; then BRANCH="v1"; else BRANCH=$BRANCH_NAME; fi - - git checkout ${BRANCH} - - git remote set-url origin https://$int_il_automation_token@github.com/jfrog/ide-plugins-common.git - - # Make sure versions provided - - echo "Checking variables" - - test -n "$NEXT_VERSION" -a "$NEXT_VERSION" != "0.0.0" - - test -n "$NEXT_DEVELOPMENT_VERSION" -a "$NEXT_DEVELOPMENT_VERSION" != "0.0.x-SNAPSHOT" - - # Configure JFrog CLI - - curl -fL https://install-cli.jfrog.io | sh - - jf c rm --quiet - - jf c add internal --url=$int_ecosys_entplus_deployer_url --user=$int_ecosys_entplus_deployer_user --password=$int_ecosys_entplus_deployer_apikey - - jf gradlec --use-wrapper --repo-deploy ecosys-oss-release-local --deploy-maven-desc - - # Run audit - #- jf audit --gradle --use-wrapper - - # Update version - - sed -i "s/\(version=\).*\$/\1${NEXT_VERSION}/" gradle.properties - - git commit -am "[artifactory-release] Release version ${NEXT_VERSION} [skipRun]" --allow-empty - - git tag ${NEXT_VERSION} - - # Run build and publish - - > - env -i PATH=$PATH HOME=$HOME - JFROG_CLI_BUILD_NAME=$JFROG_CLI_BUILD_NAME - JFROG_CLI_BUILD_NUMBER=$JFROG_CLI_BUILD_NUMBER - JFROG_CLI_BUILD_PROJECT=$JFROG_CLI_BUILD_PROJECT - jf gradle clean build -x test artifactoryPublish - - jf rt bag && jf rt bce - - jf rt bp - - # Distribute release bundle - - jf ds rbc ecosystem-ide-plugins-common $NEXT_VERSION --spec=./release/specs/prod-rbc-filespec.json --spec-vars="version=$NEXT_VERSION" --sign - - jf ds rbd ecosystem-ide-plugins-common $NEXT_VERSION --site="releases.jfrog.io" --sync - - # Update next development version - - sed -i "s/\(version=\).*\$/\1${NEXT_DEVELOPMENT_VERSION}/" gradle.properties - - git commit -am "[artifactory-release] Next development version [skipRun]" - - git push - - git push --tags diff --git a/release/pipelines.resources.yml b/release/pipelines.resources.yml deleted file mode 100644 index a4cb4f82..00000000 --- a/release/pipelines.resources.yml +++ /dev/null @@ -1,20 +0,0 @@ -resources: - - name: idePluginsJavaSnapshotGit - type: GitRepo - configuration: - path: jfrog/ide-plugins-common - gitProvider: il_automation - buildOn: - pullRequestCreate: true - branches: - include: master - cancelPendingRunsOn: - pullRequestUpdate: true - - - name: idePluginsJavaReleaseGit - type: GitRepo - configuration: - path: jfrog/ide-plugins-common - gitProvider: il_automation - buildOn: - commit: false diff --git a/release/pipelines.snapshot.yml b/release/pipelines.snapshot.yml deleted file mode 100644 index 1664d95d..00000000 --- a/release/pipelines.snapshot.yml +++ /dev/null @@ -1,68 +0,0 @@ -pipelines: - - name: build_ide_plugins_common_snapshot - configuration: - runtime: - type: image - image: - auto: - language: java - versions: - - "17" - - steps: - - name: Snapshot - type: Bash - configuration: - inputResources: - - name: idePluginsJavaSnapshotGit - integrations: - - name: ecosys_entplus_deployer - execution: - onStart: - - restore_cache_files gradle_cache $res_idePluginsJavaSnapshotGit_resourcePath/.gradle - onExecute: - - cd $res_idePluginsJavaSnapshotGit_resourcePath - # Install Go - - curl -OL https://golang.org/dl/go1.17.6.linux-amd64.tar.gz - - tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz - - export PATH=$PATH:/usr/local/go/bin - - go version - # Set env - - export CI=true - - export JFROG_BUILD_STATUS=PASS - - export JFROG_CLI_BUILD_NAME=ecosystem-ide-plugins-common-dev - - export JFROG_CLI_BUILD_NUMBER=$run_number - - export JFROG_CLI_BUILD_PROJECT=ecosys - - # Configure JFrog CLI - - curl -fL https://install-cli.jfrog.io | sh - - jf c rm --quiet - - jf c add internal --url=$int_ecosys_entplus_deployer_url --user=$int_ecosys_entplus_deployer_user --password=$int_ecosys_entplus_deployer_apikey - - jf gradlec --use-wrapper --repo-deploy ecosys-oss-snapshot-local --deploy-maven-desc - - # Run audit - - jf audit - - # Delete former snapshots to make sure the release bundle will not contain the same artifacts - - jf rt del "ecosys-oss-snapshot-local/com/jfrog/ide/ide-plugins-common/*" --quiet - - # Run test, build and publish snapshot - - > - env -i PATH=$PATH HOME=$HOME - JFROG_CLI_BUILD_NAME=$JFROG_CLI_BUILD_NAME - JFROG_CLI_BUILD_NUMBER=$JFROG_CLI_BUILD_NUMBER - JFROG_CLI_BUILD_PROJECT=$JFROG_CLI_BUILD_PROJECT - jf gradle clean build -x test artifactoryPublish - - jf rt bag && jf rt bce - - jf rt bp - - # Distribute release bundle - - jf ds rbc ecosystem-ide-plugins-common-snapshot $run_number --spec=./release/specs/dev-rbc-filespec.json --sign - - jf ds rbd ecosystem-ide-plugins-common-snapshot $run_number --site="releases.jfrog.io" --sync - - onComplete: - # Show tests in the *Tests* tab - - save_tests $res_idePluginsJavaSnapshotGit_resourcePath/build/test-results/test/ - - # Save gradle cache - - add_cache_files $res_idePluginsJavaSnapshotGit_resourcePath/.gradle gradle_cache diff --git a/release/specs/dev-rbc-filespec.json b/release/specs/dev-rbc-filespec.json deleted file mode 100644 index edfe436a..00000000 --- a/release/specs/dev-rbc-filespec.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "files": [ - { - "pattern": "ecosys-oss-snapshot-local/(com/jfrog/ide/ide-plugins-common/*/ide-plugins-common-*)", - "target": "oss-snapshot-local/{1}" - } - ] -} diff --git a/release/specs/prod-rbc-filespec.json b/release/specs/prod-rbc-filespec.json deleted file mode 100644 index 6f202c11..00000000 --- a/release/specs/prod-rbc-filespec.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "files": [ - { - "pattern": "ecosys-oss-release-local/(com/jfrog/ide/ide-plugins-common/${version}/ide-plugins-common-*)", - "target": "oss-release-local/{1}" - } - ] -} From 2ea514852cdcf40471f3aafda742e463a170873f Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Tue, 29 Sep 2026 19:45:44 +0300 Subject: [PATCH 04/10] Quote the go mod edit arguments for the command shell GoDriver runs commands through /bin/sh -c or cmd /c, so replace paths with spaces or shell characters broke the edit or ran as commands. Co-Authored-By: Claude Opus 5.5 --- .../ide/common/go/GoScanWorkspaceCreator.java | 16 +++-- .../ide/common/go/GoTreeBuilderTest.java | 19 ++++++ .../go/projectReplaceWithShellChars/go.mod | 7 ++ .../go/projectReplaceWithShellChars/go.sum | 66 +++++++++++++++++++ .../go/projectReplaceWithShellChars/main.go | 7 ++ .../go/projectReplaceWithSpace/go.mod | 7 ++ .../go/projectReplaceWithSpace/go.sum | 66 +++++++++++++++++++ .../go/projectReplaceWithSpace/main.go | 7 ++ src/test/resources/go/sub project/go.mod | 5 ++ src/test/resources/go/sub project/go.sum | 66 +++++++++++++++++++ src/test/resources/go/sub project/main.go | 15 +++++ src/test/resources/go/sub;&$'project/go.mod | 5 ++ src/test/resources/go/sub;&$'project/go.sum | 66 +++++++++++++++++++ src/test/resources/go/sub;&$'project/main.go | 15 +++++ 14 files changed, 363 insertions(+), 4 deletions(-) create mode 100644 src/test/resources/go/projectReplaceWithShellChars/go.mod create mode 100644 src/test/resources/go/projectReplaceWithShellChars/go.sum create mode 100644 src/test/resources/go/projectReplaceWithShellChars/main.go create mode 100644 src/test/resources/go/projectReplaceWithSpace/go.mod create mode 100644 src/test/resources/go/projectReplaceWithSpace/go.sum create mode 100644 src/test/resources/go/projectReplaceWithSpace/main.go create mode 100644 src/test/resources/go/sub project/go.mod create mode 100644 src/test/resources/go/sub project/go.sum create mode 100644 src/test/resources/go/sub project/main.go create mode 100644 src/test/resources/go/sub;&$'project/go.mod create mode 100644 src/test/resources/go/sub;&$'project/go.sum create mode 100644 src/test/resources/go/sub;&$'project/main.go diff --git a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java index 07f686d1..a7d1ce04 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java +++ b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java @@ -2,8 +2,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jfrog.build.api.util.Log; import org.jfrog.build.extractor.go.GoDriver; @@ -98,7 +98,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO } private void absolutizeReplacePaths(Path goMod) throws IOException { - String goModArg = toGoPath(goMod.toAbsolutePath().toString()); + String goModArg = quoteForShell(toGoPath(goMod.toAbsolutePath().toString())); String goModJson = goDriver.runCmd(List.of("mod", "edit", "-json", goModArg), false).getRes(); List editArgs = new ArrayList<>(List.of("mod", "edit")); for (JsonNode replace : jsonReader.readTree(goModJson).path("Replace")) { @@ -107,7 +107,7 @@ private void absolutizeReplacePaths(Path goMod) throws IOException { if (replacement.has("Version") || isAbsolute(replacementPath)) { continue; } - editArgs.add("-replace=" + toModuleQuery(replace.get("Old")) + "=" + resolveFromSourceDir(replacementPath)); + editArgs.add(quoteForShell("-replace=" + toModuleQuery(replace.get("Old")) + "=" + resolveFromSourceDir(replacementPath))); } if (editArgs.size() == 2) { return; @@ -129,11 +129,19 @@ private boolean isAbsolute(String goPath) { private String resolveFromSourceDir(String relativePath) { if (runGoThroughWsl) { - return FilenameUtils.normalize(toGoPath(sourceDir.toAbsolutePath().toString()) + "/" + relativePath, true); + return toGoPath(sourceDir.toAbsolutePath().toString()) + "/" + relativePath; } return sourceDir.toAbsolutePath().resolve(relativePath).normalize().toString(); } + // GoDriver runs commands through "/bin/sh -c" or "cmd /c", and the replace paths come from the scanned go.mod. + private static String quoteForShell(String arg) { + if (SystemUtils.IS_OS_WINDOWS) { + return "\"" + arg + "\""; + } + return "'" + arg.replace("'", "'\\''") + "'"; + } + private static String toModuleQuery(JsonNode module) { String path = module.get("Path").asText(); return module.has("Version") ? path + "@" + module.get("Version").asText() : path; diff --git a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java index 9ddf55ab..28924469 100644 --- a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java @@ -106,6 +106,25 @@ public void testCreateDependencyTree4() { } } + @Test(dataProvider = "replacePathProjectsProvider") + public void testCreateDependencyTreeReplacePath(String projectName) throws IOException { + Map expected = new HashMap<>() {{ + put("github.com/test/subproject:0.0.0-00010101000000-000000000000", 1); + }}; + Path projectDir = GO_ROOT.resolve(projectName); + GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); + DepTree dt = treeBuilder.buildTree(); + validateDependencyTreeResults(expected, dt); + } + + @DataProvider + private Object[][] replacePathProjectsProvider() { + return new Object[][]{ + {"projectReplaceWithSpace"}, + {"projectReplaceWithShellChars"}, + }; + } + /** * The project has no dependencies. */ diff --git a/src/test/resources/go/projectReplaceWithShellChars/go.mod b/src/test/resources/go/projectReplaceWithShellChars/go.mod new file mode 100644 index 00000000..6fbe6253 --- /dev/null +++ b/src/test/resources/go/projectReplaceWithShellChars/go.mod @@ -0,0 +1,7 @@ +module projectReplaceWithShellChars + +require github.com/test/subproject v0.0.0-00010101000000-000000000000 + +replace github.com/test/subproject => "../sub;&$'project" + +go 1.13 diff --git a/src/test/resources/go/projectReplaceWithShellChars/go.sum b/src/test/resources/go/projectReplaceWithShellChars/go.sum new file mode 100644 index 00000000..6dd2c206 --- /dev/null +++ b/src/test/resources/go/projectReplaceWithShellChars/go.sum @@ -0,0 +1,66 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= +github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= +github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= +github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= +github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= +github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/projectReplaceWithShellChars/main.go b/src/test/resources/go/projectReplaceWithShellChars/main.go new file mode 100644 index 00000000..84b2afad --- /dev/null +++ b/src/test/resources/go/projectReplaceWithShellChars/main.go @@ -0,0 +1,7 @@ +package project3 + +import "github.com/test/subproject" + +func main() { + subproject.PrintHello() +} diff --git a/src/test/resources/go/projectReplaceWithSpace/go.mod b/src/test/resources/go/projectReplaceWithSpace/go.mod new file mode 100644 index 00000000..2347f609 --- /dev/null +++ b/src/test/resources/go/projectReplaceWithSpace/go.mod @@ -0,0 +1,7 @@ +module projectReplaceWithSpace + +require github.com/test/subproject v0.0.0-00010101000000-000000000000 + +replace github.com/test/subproject => "../sub project" + +go 1.13 diff --git a/src/test/resources/go/projectReplaceWithSpace/go.sum b/src/test/resources/go/projectReplaceWithSpace/go.sum new file mode 100644 index 00000000..6dd2c206 --- /dev/null +++ b/src/test/resources/go/projectReplaceWithSpace/go.sum @@ -0,0 +1,66 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= +github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= +github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= +github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= +github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= +github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/projectReplaceWithSpace/main.go b/src/test/resources/go/projectReplaceWithSpace/main.go new file mode 100644 index 00000000..84b2afad --- /dev/null +++ b/src/test/resources/go/projectReplaceWithSpace/main.go @@ -0,0 +1,7 @@ +package project3 + +import "github.com/test/subproject" + +func main() { + subproject.PrintHello() +} diff --git a/src/test/resources/go/sub project/go.mod b/src/test/resources/go/sub project/go.mod new file mode 100644 index 00000000..93e401d9 --- /dev/null +++ b/src/test/resources/go/sub project/go.mod @@ -0,0 +1,5 @@ +module github.com/test/subproject + +require github.com/jfrog/gocmd v0.1.12 + +go 1.13 diff --git a/src/test/resources/go/sub project/go.sum b/src/test/resources/go/sub project/go.sum new file mode 100644 index 00000000..6dd2c206 --- /dev/null +++ b/src/test/resources/go/sub project/go.sum @@ -0,0 +1,66 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= +github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= +github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= +github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= +github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= +github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/sub project/main.go b/src/test/resources/go/sub project/main.go new file mode 100644 index 00000000..a2a7b40f --- /dev/null +++ b/src/test/resources/go/sub project/main.go @@ -0,0 +1,15 @@ +package subproject + +import ( + "fmt" + + "github.com/jfrog/gocmd/cmd" +) + +func main() { + cmd.GetDependenciesGraph() +} + +func PrintHello() { + fmt.Println("Hello World!") +} \ No newline at end of file diff --git a/src/test/resources/go/sub;&$'project/go.mod b/src/test/resources/go/sub;&$'project/go.mod new file mode 100644 index 00000000..93e401d9 --- /dev/null +++ b/src/test/resources/go/sub;&$'project/go.mod @@ -0,0 +1,5 @@ +module github.com/test/subproject + +require github.com/jfrog/gocmd v0.1.12 + +go 1.13 diff --git a/src/test/resources/go/sub;&$'project/go.sum b/src/test/resources/go/sub;&$'project/go.sum new file mode 100644 index 00000000..6dd2c206 --- /dev/null +++ b/src/test/resources/go/sub;&$'project/go.sum @@ -0,0 +1,66 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= +github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= +github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= +github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= +github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= +github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/sub;&$'project/main.go b/src/test/resources/go/sub;&$'project/main.go new file mode 100644 index 00000000..a2a7b40f --- /dev/null +++ b/src/test/resources/go/sub;&$'project/main.go @@ -0,0 +1,15 @@ +package subproject + +import ( + "fmt" + + "github.com/jfrog/gocmd/cmd" +) + +func main() { + cmd.GetDependenciesGraph() +} + +func PrintHello() { + fmt.Println("Hello World!") +} \ No newline at end of file From 18c88eda9ed8117422165a244a271a1321bd9cbc Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Wed, 30 Sep 2026 10:33:24 +0300 Subject: [PATCH 05/10] Document the go.mod replace rewrite and name its helpers plainly Co-Authored-By: Claude Opus 5.5 --- .../ide/common/go/GoScanWorkspaceCreator.java | 64 +++++++++++++------ .../ide/common/go/GoTreeBuilderTest.java | 3 + 2 files changed, 48 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java index a7d1ce04..52f93ee5 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java +++ b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java @@ -86,7 +86,7 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO if (fileName.equals("go.mod")) { Path targetGoMod = targetDir.resolve(sourceDir.relativize(file)); Files.copy(file, targetGoMod); - absolutizeReplacePaths(targetGoMod); + makeReplacePathsAbsolute(targetGoMod); return FileVisitResult.CONTINUE; } // Files other than go.mod and *.go files are not necessary to build the dependency tree of used Go packages. @@ -97,44 +97,66 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO return FileVisitResult.CONTINUE; } - private void absolutizeReplacePaths(Path goMod) throws IOException { - String goModArg = quoteForShell(toGoPath(goMod.toAbsolutePath().toString())); - String goModJson = goDriver.runCmd(List.of("mod", "edit", "-json", goModArg), false).getRes(); - List editArgs = new ArrayList<>(List.of("mod", "edit")); - for (JsonNode replace : jsonReader.readTree(goModJson).path("Replace")) { - JsonNode replacement = replace.get("New"); + /** + * Rewrites every relative local path in the go.mod's replace directives to an absolute path under the source + * directory, so the copied project still finds the modules it replaces. + */ + private void makeReplacePathsAbsolute(Path goMod) throws IOException { + String quotedGoModPath = quoteForShell(toPathForGo(goMod.toAbsolutePath().toString())); + String goModJson = goDriver.runCmd(List.of("mod", "edit", "-json", quotedGoModPath), false).getRes(); + + // Build a -replace flag for each directive that replaces a module with a relative local path. + List replaceFlags = new ArrayList<>(); + for (JsonNode replaceDirective : jsonReader.readTree(goModJson).path("Replace")) { + JsonNode replacement = replaceDirective.get("New"); String replacementPath = replacement.get("Path").asText(); if (replacement.has("Version") || isAbsolute(replacementPath)) { continue; } - editArgs.add(quoteForShell("-replace=" + toModuleQuery(replace.get("Old")) + "=" + resolveFromSourceDir(replacementPath))); + String replaceFlag = "-replace=" + formatReplacedModule(replaceDirective.get("Old")) + "=" + makeAbsolute(replacementPath); + replaceFlags.add(quoteForShell(replaceFlag)); } - if (editArgs.size() == 2) { + if (replaceFlags.isEmpty()) { return; } - editArgs.add(goModArg); + + List editArgs = new ArrayList<>(List.of("mod", "edit")); + editArgs.addAll(replaceFlags); + editArgs.add(quotedGoModPath); goDriver.runCmd(editArgs, true); } - private String toGoPath(String localPath) { + /** + * Returns the path as the go command sees it: a Linux path when Go runs through WSL, otherwise the path unchanged. + */ + private String toPathForGo(String path) { if (!runGoThroughWsl) { - return localPath; + return path; } - return WslUtils.isWslPath(localPath) ? WslUtils.toLinuxPath(localPath) : WslUtils.windowsLocalPathToWslMount(localPath); + return WslUtils.isWslPath(path) ? WslUtils.toLinuxPath(path) : WslUtils.windowsLocalPathToWslMount(path); } - private boolean isAbsolute(String goPath) { - return runGoThroughWsl ? goPath.startsWith("/") : Paths.get(goPath).isAbsolute(); + /** + * Returns whether a path from the go.mod is absolute on the system Go runs on. + */ + private boolean isAbsolute(String path) { + return runGoThroughWsl ? path.startsWith("/") : Paths.get(path).isAbsolute(); } - private String resolveFromSourceDir(String relativePath) { + /** + * Returns the absolute path, as the go command sees it, of a path relative to the source directory. + */ + private String makeAbsolute(String relativePath) { if (runGoThroughWsl) { - return toGoPath(sourceDir.toAbsolutePath().toString()) + "/" + relativePath; + return toPathForGo(sourceDir.toAbsolutePath().toString()) + "/" + relativePath; } return sourceDir.toAbsolutePath().resolve(relativePath).normalize().toString(); } - // GoDriver runs commands through "/bin/sh -c" or "cmd /c", and the replace paths come from the scanned go.mod. + /** + * Quotes an argument so that the shell GoDriver runs commands through ("/bin/sh -c" or "cmd /c") passes it to go + * as a single argument, without interpreting its characters. + */ private static String quoteForShell(String arg) { if (SystemUtils.IS_OS_WINDOWS) { return "\"" + arg + "\""; @@ -142,7 +164,11 @@ private static String quoteForShell(String arg) { return "'" + arg.replace("'", "'\\''") + "'"; } - private static String toModuleQuery(JsonNode module) { + /** + * Returns the replaced module as the -replace flag expects it: its path, followed by "@version" when the + * replace directive applies to one version only. + */ + private static String formatReplacedModule(JsonNode module) { String path = module.get("Path").asText(); return module.has("Version") ? path + "@" + module.get("Version").asText() : path; } diff --git a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java index 28924469..7a07e956 100644 --- a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java @@ -106,6 +106,9 @@ public void testCreateDependencyTree4() { } } + /** + * The projects replace a dependency with a relative path that contains a space or shell characters. + */ @Test(dataProvider = "replacePathProjectsProvider") public void testCreateDependencyTreeReplacePath(String projectName) throws IOException { Map expected = new HashMap<>() {{ From f8f7f63e17224a17546d82c7f66033c4efd4da3c Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Wed, 30 Sep 2026 17:05:32 +0300 Subject: [PATCH 06/10] Pass go.mod values to go through environment variables GoDriver runs commands through /bin/sh -c or cmd /c. Values from the scanned go.mod are now referenced from the command instead of quoted into it, so no shell interprets them. On Windows, a replace directive with a double quote is skipped, since cmd cannot escape it inside quotes. The WSL conversion uses WslUtils, and absolute replace paths go through the same resolution as relative ones. Co-Authored-By: Claude Opus 5.5 --- .../ide/common/go/GoScanWorkspaceCreator.java | 95 +++++++++++-------- .../ide/common/go/GoTreeBuilderTest.java | 54 ++++++++++- .../go/projectReplaceWithPercent/go.mod | 7 ++ .../go/projectReplaceWithPercent/go.sum | 66 +++++++++++++ .../go/projectReplaceWithPercent/main.go | 7 ++ src/test/resources/go/sub%PATH%project/go.mod | 5 + src/test/resources/go/sub%PATH%project/go.sum | 66 +++++++++++++ .../resources/go/sub%PATH%project/main.go | 15 +++ 8 files changed, 277 insertions(+), 38 deletions(-) create mode 100644 src/test/resources/go/projectReplaceWithPercent/go.mod create mode 100644 src/test/resources/go/projectReplaceWithPercent/go.sum create mode 100644 src/test/resources/go/projectReplaceWithPercent/main.go create mode 100644 src/test/resources/go/sub%PATH%project/go.mod create mode 100644 src/test/resources/go/sub%PATH%project/go.sum create mode 100644 src/test/resources/go/sub%PATH%project/main.go diff --git a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java index 52f93ee5..a5942c41 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java +++ b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java @@ -6,6 +6,7 @@ import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jfrog.build.api.util.Log; +import org.jfrog.build.extractor.executor.CommandResults; import org.jfrog.build.extractor.go.GoDriver; import org.jfrog.build.extractor.WslUtils; @@ -13,10 +14,11 @@ import java.nio.file.FileVisitResult; import java.nio.file.FileVisitor; import java.nio.file.Files; +import java.nio.file.InvalidPathException; import java.nio.file.Path; -import java.nio.file.Paths; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Stream; @@ -33,7 +35,10 @@ **/ public class GoScanWorkspaceCreator implements FileVisitor { private static final ObjectMapper jsonReader = createMapper(); - private final GoDriver goDriver; + private static final String GO_MOD_VARIABLE = "JFROG_GO_MOD"; + private static final String REPLACE_FLAG_VARIABLE_PREFIX = "JFROG_GO_REPLACE_"; + private final String executablePath; + private final Map env; private final Path sourceDir; private final Path targetDir; private final Log logger; @@ -42,7 +47,8 @@ public class GoScanWorkspaceCreator implements FileVisitor { public GoScanWorkspaceCreator(String executablePath, Path sourceDir, Path targetDir, Map env, Log logger, boolean runGoThroughWsl) { - this.goDriver = new GoDriver(executablePath, env, targetDir.toFile(), logger, runGoThroughWsl); + this.executablePath = executablePath; + this.env = env; this.sourceDir = sourceDir; this.targetDir = targetDir; this.logger = logger; @@ -102,66 +108,81 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO * directory, so the copied project still finds the modules it replaces. */ private void makeReplacePathsAbsolute(Path goMod) throws IOException { - String quotedGoModPath = quoteForShell(toPathForGo(goMod.toAbsolutePath().toString())); - String goModJson = goDriver.runCmd(List.of("mod", "edit", "-json", quotedGoModPath), false).getRes(); + Map variables = new HashMap<>(); + variables.put(GO_MOD_VARIABLE, toWslPathWhenNeeded(goMod.toAbsolutePath())); + String goModJson = runGo(List.of("mod", "edit", "-json", referenceVariable(GO_MOD_VARIABLE)), variables, false).getRes(); - // Build a -replace flag for each directive that replaces a module with a relative local path. - List replaceFlags = new ArrayList<>(); + // Build a -replace flag for each directive that replaces a module with a local path, not another module version. + List replaceFlagReferences = new ArrayList<>(); for (JsonNode replaceDirective : jsonReader.readTree(goModJson).path("Replace")) { JsonNode replacement = replaceDirective.get("New"); - String replacementPath = replacement.get("Path").asText(); - if (replacement.has("Version") || isAbsolute(replacementPath)) { + if (replacement.has("Version")) { continue; } - String replaceFlag = "-replace=" + formatReplacedModule(replaceDirective.get("Old")) + "=" + makeAbsolute(replacementPath); - replaceFlags.add(quoteForShell(replaceFlag)); + String replaceFlag; + try { + replaceFlag = "-replace=" + formatReplacedModule(replaceDirective.get("Old")) + "=" + makeAbsolute(replacement.get("Path").asText()); + } catch (InvalidPathException e) { + logger.warn("Skipping a go.mod replace directive with an invalid path: " + e.getMessage()); + continue; + } + if (SystemUtils.IS_OS_WINDOWS && breaksCmdQuoting(replaceFlag)) { + logger.warn("Skipping a go.mod replace directive that can't be passed to go on Windows: " + replaceFlag); + continue; + } + String replaceFlagVariable = REPLACE_FLAG_VARIABLE_PREFIX + replaceFlagReferences.size(); + variables.put(replaceFlagVariable, replaceFlag); + replaceFlagReferences.add(referenceVariable(replaceFlagVariable)); } - if (replaceFlags.isEmpty()) { + if (replaceFlagReferences.isEmpty()) { return; } List editArgs = new ArrayList<>(List.of("mod", "edit")); - editArgs.addAll(replaceFlags); - editArgs.add(quotedGoModPath); - goDriver.runCmd(editArgs, true); + editArgs.addAll(replaceFlagReferences); + editArgs.add(referenceVariable(GO_MOD_VARIABLE)); + runGo(editArgs, variables, true); } /** - * Returns the path as the go command sees it: a Linux path when Go runs through WSL, otherwise the path unchanged. + * Runs go with the given variables added to its environment. Values taken from the scanned project are passed + * this way and referenced from the args, because GoDriver runs commands through a shell that would interpret them. */ - private String toPathForGo(String path) { - if (!runGoThroughWsl) { - return path; - } - return WslUtils.isWslPath(path) ? WslUtils.toLinuxPath(path) : WslUtils.windowsLocalPathToWslMount(path); + private CommandResults runGo(List args, Map variables, boolean verbose) throws IOException { + Map goEnv = env == null ? new HashMap<>() : new HashMap<>(env); + goEnv.putAll(variables); + return new GoDriver(executablePath, goEnv, targetDir.toFile(), logger, runGoThroughWsl).runCmd(args, verbose); } /** - * Returns whether a path from the go.mod is absolute on the system Go runs on. + * When Go runs inside WSL, converts a Windows path to the Linux path Go sees there. Otherwise, returns it unchanged. */ - private boolean isAbsolute(String path) { - return runGoThroughWsl ? path.startsWith("/") : Paths.get(path).isAbsolute(); + private String toWslPathWhenNeeded(Path path) { + return runGoThroughWsl ? WslUtils.toWslLinuxCdPath(path.toFile()) : path.toString(); } /** - * Returns the absolute path, as the go command sees it, of a path relative to the source directory. + * Returns the absolute path, in the original project, of a replace path from the go.mod, converted for WSL when + * needed. An absolute replace path is returned as is. */ - private String makeAbsolute(String relativePath) { - if (runGoThroughWsl) { - return toPathForGo(sourceDir.toAbsolutePath().toString()) + "/" + relativePath; - } - return sourceDir.toAbsolutePath().resolve(relativePath).normalize().toString(); + private String makeAbsolute(String replacementPath) { + return toWslPathWhenNeeded(sourceDir.toAbsolutePath().resolve(replacementPath).normalize()); } /** - * Quotes an argument so that the shell GoDriver runs commands through ("/bin/sh -c" or "cmd /c") passes it to go - * as a single argument, without interpreting its characters. + * Returns whether a value would end the quoting around its reference in "cmd /c", which cannot escape a double + * quote inside a quoted argument. */ - private static String quoteForShell(String arg) { - if (SystemUtils.IS_OS_WINDOWS) { - return "\"" + arg + "\""; - } - return "'" + arg.replace("'", "'\\''") + "'"; + private static boolean breaksCmdQuoting(String value) { + return value.chars().anyMatch(character -> character == '"' || character < ' '); + } + + /** + * Returns a reference to an environment variable, which the shell GoDriver runs commands through ("/bin/sh -c" or + * "cmd /c") replaces with the variable's value as one argument. Neither shell expands variables inside that value. + */ + private static String referenceVariable(String variable) { + return SystemUtils.IS_OS_WINDOWS ? "\"%" + variable + "%\"" : "\"$" + variable + "\""; } /** diff --git a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java index 7a07e956..5df18b79 100644 --- a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java @@ -2,6 +2,7 @@ import com.jfrog.ide.common.deptree.DepTree; import com.jfrog.ide.common.deptree.DepTreeNode; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jfrog.build.api.util.Log; import org.jfrog.build.api.util.NullLog; @@ -12,6 +13,7 @@ import org.testng.annotations.Test; import java.io.IOException; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; @@ -107,7 +109,7 @@ public void testCreateDependencyTree4() { } /** - * The projects replace a dependency with a relative path that contains a space or shell characters. + * The projects replace a dependency with a relative path that contains a space, shell characters or a percent sign. */ @Test(dataProvider = "replacePathProjectsProvider") public void testCreateDependencyTreeReplacePath(String projectName) throws IOException { @@ -120,11 +122,61 @@ public void testCreateDependencyTreeReplacePath(String projectName) throws IOExc validateDependencyTreeResults(expected, dt); } + /** + * The project replaces a dependency with an absolute path. + */ + @Test + public void testCreateDependencyTreeAbsoluteReplacePath() throws IOException { + Map expected = new HashMap<>() {{ + put("github.com/test/subproject:0.0.0-00010101000000-000000000000", 1); + }}; + Path projectDir = Files.createTempDirectory("projectAbsoluteReplacePath"); + try { + Files.copy(GO_ROOT.resolve("project4").resolve("main.go"), projectDir.resolve("main.go")); + Files.copy(GO_ROOT.resolve("project4").resolve("go.sum"), projectDir.resolve("go.sum")); + String replacementPath = GO_ROOT.resolve("subproject").toString().replace('\\', '/'); + Files.writeString(projectDir.resolve("go.mod"), "module projectAbsoluteReplacePath\n\n" + + "require github.com/test/subproject v0.0.0-00010101000000-000000000000\n\n" + + "replace github.com/test/subproject => \"" + replacementPath + "\"\n\n" + + "go 1.13\n"); + GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); + DepTree dt = treeBuilder.buildTree(); + validateDependencyTreeResults(expected, dt); + } finally { + FileUtils.deleteDirectory(projectDir.toFile()); + } + } + + /** + * A replaced module name that tries to run a command, through "cmd /c" on Windows and "/bin/sh -c" elsewhere. + */ + @Test + public void testCreateDependencyTreeDoesNotRunReplacedModuleName() throws IOException { + Path projectDir = Files.createTempDirectory("projectInjectedModuleName"); + Path marker = projectDir.resolve("injected"); + try { + String markerInGoMod = marker.toString().replace("\\", "\\\\"); + String replacedModule = "ex\\\"&type nul>" + markerInGoMod + "&\\\"$(touch " + markerInGoMod + ").com/x"; + Files.writeString(projectDir.resolve("go.mod"), "module projectInjectedModuleName\n\n" + + "replace \"" + replacedModule + "\" => \"../subproject\"\n\n" + + "go 1.13\n"); + GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); + try { + treeBuilder.buildTree(); + } catch (IOException ignored) { + } + assertFalse(Files.exists(marker)); + } finally { + FileUtils.deleteDirectory(projectDir.toFile()); + } + } + @DataProvider private Object[][] replacePathProjectsProvider() { return new Object[][]{ {"projectReplaceWithSpace"}, {"projectReplaceWithShellChars"}, + {"projectReplaceWithPercent"}, }; } diff --git a/src/test/resources/go/projectReplaceWithPercent/go.mod b/src/test/resources/go/projectReplaceWithPercent/go.mod new file mode 100644 index 00000000..5d94f5c5 --- /dev/null +++ b/src/test/resources/go/projectReplaceWithPercent/go.mod @@ -0,0 +1,7 @@ +module projectReplaceWithPercent + +require github.com/test/subproject v0.0.0-00010101000000-000000000000 + +replace github.com/test/subproject => "../sub%PATH%project" + +go 1.13 diff --git a/src/test/resources/go/projectReplaceWithPercent/go.sum b/src/test/resources/go/projectReplaceWithPercent/go.sum new file mode 100644 index 00000000..6dd2c206 --- /dev/null +++ b/src/test/resources/go/projectReplaceWithPercent/go.sum @@ -0,0 +1,66 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= +github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= +github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= +github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= +github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= +github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/projectReplaceWithPercent/main.go b/src/test/resources/go/projectReplaceWithPercent/main.go new file mode 100644 index 00000000..84b2afad --- /dev/null +++ b/src/test/resources/go/projectReplaceWithPercent/main.go @@ -0,0 +1,7 @@ +package project3 + +import "github.com/test/subproject" + +func main() { + subproject.PrintHello() +} diff --git a/src/test/resources/go/sub%PATH%project/go.mod b/src/test/resources/go/sub%PATH%project/go.mod new file mode 100644 index 00000000..93e401d9 --- /dev/null +++ b/src/test/resources/go/sub%PATH%project/go.mod @@ -0,0 +1,5 @@ +module github.com/test/subproject + +require github.com/jfrog/gocmd v0.1.12 + +go 1.13 diff --git a/src/test/resources/go/sub%PATH%project/go.sum b/src/test/resources/go/sub%PATH%project/go.sum new file mode 100644 index 00000000..6dd2c206 --- /dev/null +++ b/src/test/resources/go/sub%PATH%project/go.sum @@ -0,0 +1,66 @@ +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= +github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= +github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= +github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= +github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= +github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= +github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= +github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= +github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= +github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= +gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/sub%PATH%project/main.go b/src/test/resources/go/sub%PATH%project/main.go new file mode 100644 index 00000000..a2a7b40f --- /dev/null +++ b/src/test/resources/go/sub%PATH%project/main.go @@ -0,0 +1,15 @@ +package subproject + +import ( + "fmt" + + "github.com/jfrog/gocmd/cmd" +) + +func main() { + cmd.GetDependenciesGraph() +} + +func PrintHello() { + fmt.Println("Hello World!") +} \ No newline at end of file From dd041986b3f87cf05e9aad71770d6b851e1ed483 Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Wed, 30 Sep 2026 17:14:40 +0300 Subject: [PATCH 07/10] Scan Go projects in place with -modfile instead of a rewritten copy go reads and writes a temp copy of go.mod (and go.sum) via GOFLAGS -modfile while running in the project directory, so relative replace paths resolve as they are and nothing from the go.mod reaches a shell. This removes GoScanWorkspaceCreator and its replace rewrite. Co-Authored-By: Claude Opus 5.5 --- .../ide/common/go/GoScanWorkspaceCreator.java | 213 ------------------ .../jfrog/ide/common/go/GoTreeBuilder.java | 36 +-- .../ide/common/go/GoTreeBuilderTest.java | 76 +------ .../go/projectReplaceWithPercent/go.mod | 7 - .../go/projectReplaceWithPercent/go.sum | 66 ------ .../go/projectReplaceWithPercent/main.go | 7 - .../go/projectReplaceWithShellChars/go.mod | 7 - .../go/projectReplaceWithShellChars/go.sum | 66 ------ .../go/projectReplaceWithShellChars/main.go | 7 - .../go/projectReplaceWithSpace/go.mod | 7 - .../go/projectReplaceWithSpace/go.sum | 66 ------ .../go/projectReplaceWithSpace/main.go | 7 - src/test/resources/go/sub project/go.mod | 5 - src/test/resources/go/sub project/go.sum | 66 ------ src/test/resources/go/sub project/main.go | 15 -- src/test/resources/go/sub%PATH%project/go.mod | 5 - src/test/resources/go/sub%PATH%project/go.sum | 66 ------ .../resources/go/sub%PATH%project/main.go | 15 -- src/test/resources/go/sub;&$'project/go.mod | 5 - src/test/resources/go/sub;&$'project/go.sum | 66 ------ src/test/resources/go/sub;&$'project/main.go | 15 -- 21 files changed, 25 insertions(+), 798 deletions(-) delete mode 100644 src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java delete mode 100644 src/test/resources/go/projectReplaceWithPercent/go.mod delete mode 100644 src/test/resources/go/projectReplaceWithPercent/go.sum delete mode 100644 src/test/resources/go/projectReplaceWithPercent/main.go delete mode 100644 src/test/resources/go/projectReplaceWithShellChars/go.mod delete mode 100644 src/test/resources/go/projectReplaceWithShellChars/go.sum delete mode 100644 src/test/resources/go/projectReplaceWithShellChars/main.go delete mode 100644 src/test/resources/go/projectReplaceWithSpace/go.mod delete mode 100644 src/test/resources/go/projectReplaceWithSpace/go.sum delete mode 100644 src/test/resources/go/projectReplaceWithSpace/main.go delete mode 100644 src/test/resources/go/sub project/go.mod delete mode 100644 src/test/resources/go/sub project/go.sum delete mode 100644 src/test/resources/go/sub project/main.go delete mode 100644 src/test/resources/go/sub%PATH%project/go.mod delete mode 100644 src/test/resources/go/sub%PATH%project/go.sum delete mode 100644 src/test/resources/go/sub%PATH%project/main.go delete mode 100644 src/test/resources/go/sub;&$'project/go.mod delete mode 100644 src/test/resources/go/sub;&$'project/go.sum delete mode 100644 src/test/resources/go/sub;&$'project/main.go diff --git a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java b/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java deleted file mode 100644 index a5942c41..00000000 --- a/src/main/java/com/jfrog/ide/common/go/GoScanWorkspaceCreator.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.jfrog.ide.common.go; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.SystemUtils; -import org.apache.commons.lang3.exception.ExceptionUtils; -import org.jfrog.build.api.util.Log; -import org.jfrog.build.extractor.executor.CommandResults; -import org.jfrog.build.extractor.go.GoDriver; -import org.jfrog.build.extractor.WslUtils; - -import java.io.IOException; -import java.nio.file.FileVisitResult; -import java.nio.file.FileVisitor; -import java.nio.file.Files; -import java.nio.file.InvalidPathException; -import java.nio.file.Path; -import java.nio.file.attribute.BasicFileAttributes; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -import static com.jfrog.ide.common.utils.Utils.createMapper; - -/** - * This FileVisitor copies all go.mod and *.go files from the input source directory to the input target directory. - * For all go.mod files, replaces relative paths to absolute. - * That functionality is needed, so that we can calculate the go dependencies tree on a copy of the original code project, - * rather than on the original one, in order to avoid changing it. - * - * @author yahavi - **/ -public class GoScanWorkspaceCreator implements FileVisitor { - private static final ObjectMapper jsonReader = createMapper(); - private static final String GO_MOD_VARIABLE = "JFROG_GO_MOD"; - private static final String REPLACE_FLAG_VARIABLE_PREFIX = "JFROG_GO_REPLACE_"; - private final String executablePath; - private final Map env; - private final Path sourceDir; - private final Path targetDir; - private final Log logger; - private final boolean runGoThroughWsl; - private static final String[] EXCLUDED_DIRS = new String[]{".git", ".idea", ".vscode"}; - - public GoScanWorkspaceCreator(String executablePath, Path sourceDir, Path targetDir, - Map env, Log logger, boolean runGoThroughWsl) { - this.executablePath = executablePath; - this.env = env; - this.sourceDir = sourceDir; - this.targetDir = targetDir; - this.logger = logger; - this.runGoThroughWsl = runGoThroughWsl; - } - - @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { - // Skip excluded directories. - if (StringUtils.equalsAny(dir.getFileName().toString(), EXCLUDED_DIRS)) { - return FileVisitResult.SKIP_SUBTREE; - } - // Skip subdirectories with go.mod files. - // These directories are different Go projects and their go files should not be in the root project. - if (!sourceDir.equals(dir)) { - try (Stream files = Files.list(dir)) { - if (files.anyMatch(file -> file.getFileName().toString().equals("go.mod"))) { - return FileVisitResult.SKIP_SUBTREE; - } - } - } - - Path resolve = targetDir.resolve(sourceDir.relativize(dir)); - if (Files.notExists(resolve)) { - Files.createDirectories(resolve); - } - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - String fileName = file.getFileName().toString(); - - // Go files should be copied to allow running `go list -f "{{with .Module}}{{.Path}} {{.Version}}{{end}}" all` - // and to get the list package that are actually in use by the Go project. - if (fileName.endsWith(".go")) { - Files.copy(file, targetDir.resolve(sourceDir.relativize(file))); - return FileVisitResult.CONTINUE; - } - // Copy the root go.mod file and replace relative path in "replace" to absolute paths. - if (fileName.equals("go.mod")) { - Path targetGoMod = targetDir.resolve(sourceDir.relativize(file)); - Files.copy(file, targetGoMod); - makeReplacePathsAbsolute(targetGoMod); - return FileVisitResult.CONTINUE; - } - // Files other than go.mod and *.go files are not necessary to build the dependency tree of used Go packages. - // Therefore, we just create an empty file with the same name so go:embed files won't cause a missing file error. - if (!fileName.equals("go.sum")) { - Files.createFile(targetDir.resolve(sourceDir.relativize(file))); - } - return FileVisitResult.CONTINUE; - } - - /** - * Rewrites every relative local path in the go.mod's replace directives to an absolute path under the source - * directory, so the copied project still finds the modules it replaces. - */ - private void makeReplacePathsAbsolute(Path goMod) throws IOException { - Map variables = new HashMap<>(); - variables.put(GO_MOD_VARIABLE, toWslPathWhenNeeded(goMod.toAbsolutePath())); - String goModJson = runGo(List.of("mod", "edit", "-json", referenceVariable(GO_MOD_VARIABLE)), variables, false).getRes(); - - // Build a -replace flag for each directive that replaces a module with a local path, not another module version. - List replaceFlagReferences = new ArrayList<>(); - for (JsonNode replaceDirective : jsonReader.readTree(goModJson).path("Replace")) { - JsonNode replacement = replaceDirective.get("New"); - if (replacement.has("Version")) { - continue; - } - String replaceFlag; - try { - replaceFlag = "-replace=" + formatReplacedModule(replaceDirective.get("Old")) + "=" + makeAbsolute(replacement.get("Path").asText()); - } catch (InvalidPathException e) { - logger.warn("Skipping a go.mod replace directive with an invalid path: " + e.getMessage()); - continue; - } - if (SystemUtils.IS_OS_WINDOWS && breaksCmdQuoting(replaceFlag)) { - logger.warn("Skipping a go.mod replace directive that can't be passed to go on Windows: " + replaceFlag); - continue; - } - String replaceFlagVariable = REPLACE_FLAG_VARIABLE_PREFIX + replaceFlagReferences.size(); - variables.put(replaceFlagVariable, replaceFlag); - replaceFlagReferences.add(referenceVariable(replaceFlagVariable)); - } - if (replaceFlagReferences.isEmpty()) { - return; - } - - List editArgs = new ArrayList<>(List.of("mod", "edit")); - editArgs.addAll(replaceFlagReferences); - editArgs.add(referenceVariable(GO_MOD_VARIABLE)); - runGo(editArgs, variables, true); - } - - /** - * Runs go with the given variables added to its environment. Values taken from the scanned project are passed - * this way and referenced from the args, because GoDriver runs commands through a shell that would interpret them. - */ - private CommandResults runGo(List args, Map variables, boolean verbose) throws IOException { - Map goEnv = env == null ? new HashMap<>() : new HashMap<>(env); - goEnv.putAll(variables); - return new GoDriver(executablePath, goEnv, targetDir.toFile(), logger, runGoThroughWsl).runCmd(args, verbose); - } - - /** - * When Go runs inside WSL, converts a Windows path to the Linux path Go sees there. Otherwise, returns it unchanged. - */ - private String toWslPathWhenNeeded(Path path) { - return runGoThroughWsl ? WslUtils.toWslLinuxCdPath(path.toFile()) : path.toString(); - } - - /** - * Returns the absolute path, in the original project, of a replace path from the go.mod, converted for WSL when - * needed. An absolute replace path is returned as is. - */ - private String makeAbsolute(String replacementPath) { - return toWslPathWhenNeeded(sourceDir.toAbsolutePath().resolve(replacementPath).normalize()); - } - - /** - * Returns whether a value would end the quoting around its reference in "cmd /c", which cannot escape a double - * quote inside a quoted argument. - */ - private static boolean breaksCmdQuoting(String value) { - return value.chars().anyMatch(character -> character == '"' || character < ' '); - } - - /** - * Returns a reference to an environment variable, which the shell GoDriver runs commands through ("/bin/sh -c" or - * "cmd /c") replaces with the variable's value as one argument. Neither shell expands variables inside that value. - */ - private static String referenceVariable(String variable) { - return SystemUtils.IS_OS_WINDOWS ? "\"%" + variable + "%\"" : "\"$" + variable + "\""; - } - - /** - * Returns the replaced module as the -replace flag expects it: its path, followed by "@version" when the - * replace directive applies to one version only. - */ - private static String formatReplacedModule(JsonNode module) { - String path = module.get("Path").asText(); - return module.has("Version") ? path + "@" + module.get("Version").asText() : path; - } - - @Override - public FileVisitResult visitFileFailed(Path file, IOException exc) { - if (exc != null) { - logger.warn("An error occurred during preparing Go workspace " + ExceptionUtils.getRootCauseMessage(exc)); - } - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult postVisitDirectory(Path dir, IOException exc) { - if (exc != null) { - logger.warn("An error occurred during preparing Go workspace " + ExceptionUtils.getRootCauseMessage(exc)); - return FileVisitResult.SKIP_SUBTREE; - } - return FileVisitResult.CONTINUE; - } -} diff --git a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java index affcb700..65d6b5ed 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java +++ b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java @@ -114,18 +114,26 @@ static Version parseGoVersion(CommandResults versionRes, Log logger) { } /** - * Copy go.mod file to a temporary directory. - * This is necessary to bypass checksum mismatches issues in the original go.sum. - * - * @return the temporary directory. - * @throws IOException in case of any I/O error. + * Returns the environment for running go in the project directory, with go reading and writing a copy of the + * project's go.mod, and a go.sum next to it, in the given directory instead of the project's own files. */ - private Path createGoWorkspace() throws IOException { - Path targetDir = Files.createTempDirectory(null); - boolean runGoThroughWsl = WslUtils.isWslPath(projectDir); - GoScanWorkspaceCreator goScanWorkspaceCreator = new GoScanWorkspaceCreator(executablePath, projectDir, targetDir, env, logger, runGoThroughWsl); - Files.walkFileTree(projectDir, goScanWorkspaceCreator); - return targetDir; + private Map createScanEnv(Path tmpDir, boolean runGoThroughWsl) throws IOException { + Path goMod = Files.copy(projectDir.resolve("go.mod"), tmpDir.resolve("go.mod")); + String goModPath = runGoThroughWsl ? WslUtils.toWslLinuxCdPath(goMod.toFile()) : goMod.toString(); + Map scanEnv = env == null ? new HashMap<>() : new HashMap<>(env); + String goFlags = scanEnv.getOrDefault("GOFLAGS", System.getenv("GOFLAGS")); + String modFileFlag = "-modfile=" + goModPath; + // GOFLAGS is split on spaces; Go 1.21 and later accept a quoted flag. + if (StringUtils.containsWhitespace(modFileFlag)) { + modFileFlag = "'" + modFileFlag + "'"; + } + scanEnv.put("GOFLAGS", StringUtils.trim(StringUtils.defaultString(goFlags) + " " + modFileFlag)); + if (runGoThroughWsl) { + // Windows environment variables reach go inside WSL only when WSLENV lists them. + String wslEnv = scanEnv.getOrDefault("WSLENV", System.getenv("WSLENV")); + scanEnv.put("WSLENV", StringUtils.isBlank(wslEnv) ? "GOFLAGS" : wslEnv + ":GOFLAGS"); + } + return scanEnv; } private static void populateChildren(DepTree depTree, String[] dependenciesGraph) { @@ -146,10 +154,10 @@ private static void populateChildren(DepTree depTree, String[] dependenciesGraph } public DepTree buildTree() throws IOException { - File tmpDir = createGoWorkspace().toFile(); + Path tmpDir = Files.createTempDirectory(null); try { boolean runGoThroughWsl = WslUtils.isWslPath(projectDir); - GoDriver goDriver = new GoDriver(executablePath, env, tmpDir, logger, runGoThroughWsl); + GoDriver goDriver = new GoDriver(executablePath, createScanEnv(tmpDir, runGoThroughWsl), projectDir.toFile(), logger, runGoThroughWsl); if (!goDriver.isInstalled()) { throw new IOException("Could not scan the Go project dependencies, because the Go executable is not in the PATH. [WSL=" + runGoThroughWsl + "]"); } @@ -162,7 +170,7 @@ public DepTree buildTree() throws IOException { depTree.getRootNode().descriptorFilePath(descriptorFilePath); return depTree; } finally { - FileUtils.deleteDirectory(tmpDir); + FileUtils.deleteDirectory(tmpDir.toFile()); } } diff --git a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java index 5df18b79..1c438f6e 100644 --- a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java @@ -2,7 +2,6 @@ import com.jfrog.ide.common.deptree.DepTree; import com.jfrog.ide.common.deptree.DepTreeNode; -import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jfrog.build.api.util.Log; import org.jfrog.build.api.util.NullLog; @@ -44,9 +43,12 @@ public void testCreateDependencyTree1() { try { Path projectDir = GO_ROOT.resolve("project1"); + String goMod = Files.readString(projectDir.resolve("go.mod")); GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); DepTree dt = treeBuilder.buildTree(); validateDependencyTreeResults(expected, dt); + assertEquals(Files.readString(projectDir.resolve("go.mod")), goMod); + assertFalse(Files.exists(projectDir.resolve("go.sum"))); } catch (IOException ex) { fail(ExceptionUtils.getStackTrace(ex)); } @@ -108,78 +110,6 @@ public void testCreateDependencyTree4() { } } - /** - * The projects replace a dependency with a relative path that contains a space, shell characters or a percent sign. - */ - @Test(dataProvider = "replacePathProjectsProvider") - public void testCreateDependencyTreeReplacePath(String projectName) throws IOException { - Map expected = new HashMap<>() {{ - put("github.com/test/subproject:0.0.0-00010101000000-000000000000", 1); - }}; - Path projectDir = GO_ROOT.resolve(projectName); - GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); - DepTree dt = treeBuilder.buildTree(); - validateDependencyTreeResults(expected, dt); - } - - /** - * The project replaces a dependency with an absolute path. - */ - @Test - public void testCreateDependencyTreeAbsoluteReplacePath() throws IOException { - Map expected = new HashMap<>() {{ - put("github.com/test/subproject:0.0.0-00010101000000-000000000000", 1); - }}; - Path projectDir = Files.createTempDirectory("projectAbsoluteReplacePath"); - try { - Files.copy(GO_ROOT.resolve("project4").resolve("main.go"), projectDir.resolve("main.go")); - Files.copy(GO_ROOT.resolve("project4").resolve("go.sum"), projectDir.resolve("go.sum")); - String replacementPath = GO_ROOT.resolve("subproject").toString().replace('\\', '/'); - Files.writeString(projectDir.resolve("go.mod"), "module projectAbsoluteReplacePath\n\n" + - "require github.com/test/subproject v0.0.0-00010101000000-000000000000\n\n" + - "replace github.com/test/subproject => \"" + replacementPath + "\"\n\n" + - "go 1.13\n"); - GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); - DepTree dt = treeBuilder.buildTree(); - validateDependencyTreeResults(expected, dt); - } finally { - FileUtils.deleteDirectory(projectDir.toFile()); - } - } - - /** - * A replaced module name that tries to run a command, through "cmd /c" on Windows and "/bin/sh -c" elsewhere. - */ - @Test - public void testCreateDependencyTreeDoesNotRunReplacedModuleName() throws IOException { - Path projectDir = Files.createTempDirectory("projectInjectedModuleName"); - Path marker = projectDir.resolve("injected"); - try { - String markerInGoMod = marker.toString().replace("\\", "\\\\"); - String replacedModule = "ex\\\"&type nul>" + markerInGoMod + "&\\\"$(touch " + markerInGoMod + ").com/x"; - Files.writeString(projectDir.resolve("go.mod"), "module projectInjectedModuleName\n\n" + - "replace \"" + replacedModule + "\" => \"../subproject\"\n\n" + - "go 1.13\n"); - GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); - try { - treeBuilder.buildTree(); - } catch (IOException ignored) { - } - assertFalse(Files.exists(marker)); - } finally { - FileUtils.deleteDirectory(projectDir.toFile()); - } - } - - @DataProvider - private Object[][] replacePathProjectsProvider() { - return new Object[][]{ - {"projectReplaceWithSpace"}, - {"projectReplaceWithShellChars"}, - {"projectReplaceWithPercent"}, - }; - } - /** * The project has no dependencies. */ diff --git a/src/test/resources/go/projectReplaceWithPercent/go.mod b/src/test/resources/go/projectReplaceWithPercent/go.mod deleted file mode 100644 index 5d94f5c5..00000000 --- a/src/test/resources/go/projectReplaceWithPercent/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module projectReplaceWithPercent - -require github.com/test/subproject v0.0.0-00010101000000-000000000000 - -replace github.com/test/subproject => "../sub%PATH%project" - -go 1.13 diff --git a/src/test/resources/go/projectReplaceWithPercent/go.sum b/src/test/resources/go/projectReplaceWithPercent/go.sum deleted file mode 100644 index 6dd2c206..00000000 --- a/src/test/resources/go/projectReplaceWithPercent/go.sum +++ /dev/null @@ -1,66 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= -github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= -github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= -github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= -github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= -github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/projectReplaceWithPercent/main.go b/src/test/resources/go/projectReplaceWithPercent/main.go deleted file mode 100644 index 84b2afad..00000000 --- a/src/test/resources/go/projectReplaceWithPercent/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package project3 - -import "github.com/test/subproject" - -func main() { - subproject.PrintHello() -} diff --git a/src/test/resources/go/projectReplaceWithShellChars/go.mod b/src/test/resources/go/projectReplaceWithShellChars/go.mod deleted file mode 100644 index 6fbe6253..00000000 --- a/src/test/resources/go/projectReplaceWithShellChars/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module projectReplaceWithShellChars - -require github.com/test/subproject v0.0.0-00010101000000-000000000000 - -replace github.com/test/subproject => "../sub;&$'project" - -go 1.13 diff --git a/src/test/resources/go/projectReplaceWithShellChars/go.sum b/src/test/resources/go/projectReplaceWithShellChars/go.sum deleted file mode 100644 index 6dd2c206..00000000 --- a/src/test/resources/go/projectReplaceWithShellChars/go.sum +++ /dev/null @@ -1,66 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= -github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= -github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= -github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= -github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= -github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/projectReplaceWithShellChars/main.go b/src/test/resources/go/projectReplaceWithShellChars/main.go deleted file mode 100644 index 84b2afad..00000000 --- a/src/test/resources/go/projectReplaceWithShellChars/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package project3 - -import "github.com/test/subproject" - -func main() { - subproject.PrintHello() -} diff --git a/src/test/resources/go/projectReplaceWithSpace/go.mod b/src/test/resources/go/projectReplaceWithSpace/go.mod deleted file mode 100644 index 2347f609..00000000 --- a/src/test/resources/go/projectReplaceWithSpace/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module projectReplaceWithSpace - -require github.com/test/subproject v0.0.0-00010101000000-000000000000 - -replace github.com/test/subproject => "../sub project" - -go 1.13 diff --git a/src/test/resources/go/projectReplaceWithSpace/go.sum b/src/test/resources/go/projectReplaceWithSpace/go.sum deleted file mode 100644 index 6dd2c206..00000000 --- a/src/test/resources/go/projectReplaceWithSpace/go.sum +++ /dev/null @@ -1,66 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= -github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= -github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= -github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= -github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= -github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/projectReplaceWithSpace/main.go b/src/test/resources/go/projectReplaceWithSpace/main.go deleted file mode 100644 index 84b2afad..00000000 --- a/src/test/resources/go/projectReplaceWithSpace/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package project3 - -import "github.com/test/subproject" - -func main() { - subproject.PrintHello() -} diff --git a/src/test/resources/go/sub project/go.mod b/src/test/resources/go/sub project/go.mod deleted file mode 100644 index 93e401d9..00000000 --- a/src/test/resources/go/sub project/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/test/subproject - -require github.com/jfrog/gocmd v0.1.12 - -go 1.13 diff --git a/src/test/resources/go/sub project/go.sum b/src/test/resources/go/sub project/go.sum deleted file mode 100644 index 6dd2c206..00000000 --- a/src/test/resources/go/sub project/go.sum +++ /dev/null @@ -1,66 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= -github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= -github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= -github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= -github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= -github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/sub project/main.go b/src/test/resources/go/sub project/main.go deleted file mode 100644 index a2a7b40f..00000000 --- a/src/test/resources/go/sub project/main.go +++ /dev/null @@ -1,15 +0,0 @@ -package subproject - -import ( - "fmt" - - "github.com/jfrog/gocmd/cmd" -) - -func main() { - cmd.GetDependenciesGraph() -} - -func PrintHello() { - fmt.Println("Hello World!") -} \ No newline at end of file diff --git a/src/test/resources/go/sub%PATH%project/go.mod b/src/test/resources/go/sub%PATH%project/go.mod deleted file mode 100644 index 93e401d9..00000000 --- a/src/test/resources/go/sub%PATH%project/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/test/subproject - -require github.com/jfrog/gocmd v0.1.12 - -go 1.13 diff --git a/src/test/resources/go/sub%PATH%project/go.sum b/src/test/resources/go/sub%PATH%project/go.sum deleted file mode 100644 index 6dd2c206..00000000 --- a/src/test/resources/go/sub%PATH%project/go.sum +++ /dev/null @@ -1,66 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= -github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= -github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= -github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= -github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= -github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/sub%PATH%project/main.go b/src/test/resources/go/sub%PATH%project/main.go deleted file mode 100644 index a2a7b40f..00000000 --- a/src/test/resources/go/sub%PATH%project/main.go +++ /dev/null @@ -1,15 +0,0 @@ -package subproject - -import ( - "fmt" - - "github.com/jfrog/gocmd/cmd" -) - -func main() { - cmd.GetDependenciesGraph() -} - -func PrintHello() { - fmt.Println("Hello World!") -} \ No newline at end of file diff --git a/src/test/resources/go/sub;&$'project/go.mod b/src/test/resources/go/sub;&$'project/go.mod deleted file mode 100644 index 93e401d9..00000000 --- a/src/test/resources/go/sub;&$'project/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/test/subproject - -require github.com/jfrog/gocmd v0.1.12 - -go 1.13 diff --git a/src/test/resources/go/sub;&$'project/go.sum b/src/test/resources/go/sub;&$'project/go.sum deleted file mode 100644 index 6dd2c206..00000000 --- a/src/test/resources/go/sub;&$'project/go.sum +++ /dev/null @@ -1,66 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/buger/jsonparser v0.0.0-20180910192245-6acdf747ae99/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= -github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/gocmd v0.1.12 h1:d9X2idilMkuUSgvYy6S6A+/uKsk+DNSdt5/CQIScx7A= -github.com/jfrog/gocmd v0.1.12/go.mod h1:SYlgI4BQmgrvV3zpxYia9MHhYe7LQDesCPRvIluJ2Sk= -github.com/jfrog/gofrog v1.0.5 h1:pEJmKZ9XgvQH2a8WCqAEeUDSXBCKBMN90QzOiOhBTIs= -github.com/jfrog/gofrog v1.0.5/go.mod h1:4Caxvc8B2K1A798G1Ne+SsUICRPPre4GpgcFqj+EXJ8= -github.com/jfrog/jfrog-client-go v0.6.2 h1:y9RIwdihquIDhY5M5gbIK+TcIM84sGj88J5GnKvXh1w= -github.com/jfrog/jfrog-client-go v0.6.2/go.mod h1:ke22JapdZHvrOGQq3e6aBiYQKHrujI6GPsaKh8gY0DI= -github.com/kevinburke/ssh_config v0.0.0-20180830205328-81db2a75821e/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mholt/archiver v2.1.0+incompatible/go.mod h1:Dh2dOXnSdiLxRiPoVfIr/fI1TwETms9B8CTWfeh7ROU= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pierrec/lz4 v2.3.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.2.0/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.2.1/go.mod h1:P4AexN0a+C9tGAnUFNwDMYYZv3pjFuvmeiMyKRaNVlI= -github.com/src-d/gcfg v1.3.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= -github.com/xanzy/ssh-agent v0.2.0/go.mod h1:0NyE30eGUDliuLEHJgYte/zncp2zdTStcOnWhgSqHD8= -github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= -golang.org/x/crypto v0.0.0-20181001203147-e3636079e1a4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180926154720-4dfa2610cdf3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sys v0.0.0-20180903190138-2b024373dcd9/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180906133057-8cf3aee42992/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/src-d/go-billy.v4 v4.3.0/go.mod h1:tm33zBoOwxjYHZIE+OV8bxTWFMJLrconzFMd38aARFk= -gopkg.in/src-d/go-git-fixtures.v3 v3.1.1/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.7.0/go.mod h1:CzbUWqMn4pvmvndg3gnh5iZFmSsbhyhUWdI0IQ60AQo= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/test/resources/go/sub;&$'project/main.go b/src/test/resources/go/sub;&$'project/main.go deleted file mode 100644 index a2a7b40f..00000000 --- a/src/test/resources/go/sub;&$'project/main.go +++ /dev/null @@ -1,15 +0,0 @@ -package subproject - -import ( - "fmt" - - "github.com/jfrog/gocmd/cmd" -) - -func main() { - cmd.GetDependenciesGraph() -} - -func PrintHello() { - fmt.Println("Hello World!") -} \ No newline at end of file From 4bb5097c1659cb54bf9a9eaf4e97cfbd1d557824 Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Wed, 30 Sep 2026 19:08:27 +0300 Subject: [PATCH 08/10] Keep -modfile working in go.work workspaces and with saved GOFLAGS Set GOWORK=off, since workspace mode rejects -modfile, and start from go env GOFLAGS so values saved with go env -w are kept. The go version check runs without the scan flags. Co-Authored-By: Claude Opus 5.5 --- .../jfrog/ide/common/go/GoTreeBuilder.java | 36 ++++++++++++------- .../ide/common/go/GoTreeBuilderTest.java | 19 ++++++++++ 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java index 65d6b5ed..b4c82dd6 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java +++ b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java @@ -116,26 +116,36 @@ static Version parseGoVersion(CommandResults versionRes, Log logger) { /** * Returns the environment for running go in the project directory, with go reading and writing a copy of the * project's go.mod, and a go.sum next to it, in the given directory instead of the project's own files. + * + * @param goFlags the GOFLAGS go already uses, including values saved with "go env -w" */ - private Map createScanEnv(Path tmpDir, boolean runGoThroughWsl) throws IOException { + private Map createScanEnv(Path tmpDir, String goFlags, boolean runGoThroughWsl) throws IOException { Path goMod = Files.copy(projectDir.resolve("go.mod"), tmpDir.resolve("go.mod")); String goModPath = runGoThroughWsl ? WslUtils.toWslLinuxCdPath(goMod.toFile()) : goMod.toString(); Map scanEnv = env == null ? new HashMap<>() : new HashMap<>(env); - String goFlags = scanEnv.getOrDefault("GOFLAGS", System.getenv("GOFLAGS")); - String modFileFlag = "-modfile=" + goModPath; - // GOFLAGS is split on spaces; Go 1.21 and later accept a quoted flag. - if (StringUtils.containsWhitespace(modFileFlag)) { - modFileFlag = "'" + modFileFlag + "'"; - } - scanEnv.put("GOFLAGS", StringUtils.trim(StringUtils.defaultString(goFlags) + " " + modFileFlag)); + scanEnv.put("GOFLAGS", StringUtils.trim(goFlags + " " + toGoFlagsEntry("-modfile=" + goModPath))); + // A go.work in or above the project puts go in workspace mode, which does not allow -modfile. + scanEnv.put("GOWORK", "off"); if (runGoThroughWsl) { // Windows environment variables reach go inside WSL only when WSLENV lists them. String wslEnv = scanEnv.getOrDefault("WSLENV", System.getenv("WSLENV")); - scanEnv.put("WSLENV", StringUtils.isBlank(wslEnv) ? "GOFLAGS" : wslEnv + ":GOFLAGS"); + scanEnv.put("WSLENV", StringUtils.isBlank(wslEnv) ? "GOFLAGS:GOWORK" : wslEnv + ":GOFLAGS:GOWORK"); } return scanEnv; } + /** + * Returns a flag as a GOFLAGS entry. GOFLAGS is split on spaces, so a flag with a space is quoted, which Go 1.21 + * and later support. + */ + private static String toGoFlagsEntry(String flag) { + if (!StringUtils.containsWhitespace(flag)) { + return flag; + } + String quote = flag.contains("'") ? "\"" : "'"; + return quote + flag + quote; + } + private static void populateChildren(DepTree depTree, String[] dependenciesGraph) { Map nodes = depTree.nodes(); for (String entry : dependenciesGraph) { @@ -157,15 +167,17 @@ public DepTree buildTree() throws IOException { Path tmpDir = Files.createTempDirectory(null); try { boolean runGoThroughWsl = WslUtils.isWslPath(projectDir); - GoDriver goDriver = new GoDriver(executablePath, createScanEnv(tmpDir, runGoThroughWsl), projectDir.toFile(), logger, runGoThroughWsl); + GoDriver goDriver = new GoDriver(executablePath, env, projectDir.toFile(), logger, runGoThroughWsl); if (!goDriver.isInstalled()) { throw new IOException("Could not scan the Go project dependencies, because the Go executable is not in the PATH. [WSL=" + runGoThroughWsl + "]"); } CommandResults versionRes = goDriver.version(false); Version goVersion = parseGoVersion(versionRes, logger); - goDriver.modTidy(false, goVersion.isAtLeast(MIN_GO_VERSION)); - DepTree depTree = createDependencyTree(goDriver, logger, false, goVersion.isAtLeast(MIN_GO_VERSION_FOR_BUILD_VCS_FLAG)); + String goFlags = goDriver.runCmd("env GOFLAGS", false).getRes().trim(); + GoDriver scanDriver = new GoDriver(executablePath, createScanEnv(tmpDir, goFlags, runGoThroughWsl), projectDir.toFile(), logger, runGoThroughWsl); + scanDriver.modTidy(false, goVersion.isAtLeast(MIN_GO_VERSION)); + DepTree depTree = createDependencyTree(scanDriver, logger, false, goVersion.isAtLeast(MIN_GO_VERSION_FOR_BUILD_VCS_FLAG)); addGoVersionNode(depTree, goVersion); depTree.getRootNode().descriptorFilePath(descriptorFilePath); return depTree; diff --git a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java index 1c438f6e..dc6752d8 100644 --- a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java @@ -2,6 +2,7 @@ import com.jfrog.ide.common.deptree.DepTree; import com.jfrog.ide.common.deptree.DepTreeNode; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.jfrog.build.api.util.Log; import org.jfrog.build.api.util.NullLog; @@ -110,6 +111,24 @@ public void testCreateDependencyTree4() { } } + /** + * The project is a module of a go.work workspace. + */ + @Test + public void testCreateDependencyTreeInWorkspace() throws IOException { + Path workspaceDir = Files.createTempDirectory("goWorkspace"); + try { + Path projectDir = workspaceDir.resolve("project5"); + FileUtils.copyDirectory(GO_ROOT.resolve("project5").toFile(), projectDir.toFile()); + Files.writeString(workspaceDir.resolve("go.work"), "go 1.21\n\nuse ./project5\n"); + GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); + DepTree dt = treeBuilder.buildTree(); + validateDependencyTreeResults(new HashMap<>(), dt); + } finally { + FileUtils.deleteDirectory(workspaceDir.toFile()); + } + } + /** * The project has no dependencies. */ From eb7e7a528ad9878da2092834a188d9a1ce8ce59d Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Thu, 1 Oct 2026 13:10:09 +0300 Subject: [PATCH 09/10] Address review: pin project2 files, cover a quoted GOFLAGS path, dedupe WSLENV Co-Authored-By: Claude Opus 5.5 --- .../jfrog/ide/common/go/GoTreeBuilder.java | 14 +++++++++---- .../ide/common/go/GoTreeBuilderTest.java | 20 +++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java index b4c82dd6..86e10d03 100644 --- a/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java +++ b/src/main/java/com/jfrog/ide/common/go/GoTreeBuilder.java @@ -17,6 +17,7 @@ import java.nio.file.Path; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -127,9 +128,14 @@ private Map createScanEnv(Path tmpDir, String goFlags, boolean r // A go.work in or above the project puts go in workspace mode, which does not allow -modfile. scanEnv.put("GOWORK", "off"); if (runGoThroughWsl) { - // Windows environment variables reach go inside WSL only when WSLENV lists them. - String wslEnv = scanEnv.getOrDefault("WSLENV", System.getenv("WSLENV")); - scanEnv.put("WSLENV", StringUtils.isBlank(wslEnv) ? "GOFLAGS:GOWORK" : wslEnv + ":GOFLAGS:GOWORK"); + // Windows environment variables reach go inside WSL only when WSLENV lists them. They are listed without a + // path translation flag, since the -modfile path is already a Linux path. + String wslEnv = StringUtils.defaultString(scanEnv.getOrDefault("WSLENV", System.getenv("WSLENV"))); + List wslEnvEntries = Arrays.stream(wslEnv.split(":")) + .filter(entry -> StringUtils.isNotBlank(entry) && !StringUtils.equalsAny(StringUtils.substringBefore(entry, "/"), "GOFLAGS", "GOWORK")) + .collect(Collectors.toList()); + wslEnvEntries.addAll(List.of("GOFLAGS", "GOWORK")); + scanEnv.put("WSLENV", String.join(":", wslEnvEntries)); } return scanEnv; } @@ -138,7 +144,7 @@ private Map createScanEnv(Path tmpDir, String goFlags, boolean r * Returns a flag as a GOFLAGS entry. GOFLAGS is split on spaces, so a flag with a space is quoted, which Go 1.21 * and later support. */ - private static String toGoFlagsEntry(String flag) { + static String toGoFlagsEntry(String flag) { if (!StringUtils.containsWhitespace(flag)) { return flag; } diff --git a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java index dc6752d8..bbd1848c 100644 --- a/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java +++ b/src/test/java/com/jfrog/ide/common/go/GoTreeBuilderTest.java @@ -65,9 +65,13 @@ public void testCreateDependencyTree2() { }}; try { Path projectDir = GO_ROOT.resolve("project2"); + byte[] goMod = Files.readAllBytes(projectDir.resolve("go.mod")); + byte[] goSum = Files.readAllBytes(projectDir.resolve("go.sum")); GoTreeBuilder treeBuilder = new GoTreeBuilder(null, projectDir, projectDir.resolve("go.mod").toString(), null, log); DepTree dt = treeBuilder.buildTree(); validateDependencyTreeResults(expected, dt); + assertEquals(Files.readAllBytes(projectDir.resolve("go.mod")), goMod); + assertEquals(Files.readAllBytes(projectDir.resolve("go.sum")), goSum); } catch (IOException ex) { fail(ExceptionUtils.getStackTrace(ex)); } @@ -111,6 +115,22 @@ public void testCreateDependencyTree4() { } } + /** + * Go reads a -modfile path that contains a space from GOFLAGS. + */ + @Test + public void testGoFlagsEntryWithSpace() throws IOException { + Path modFileDir = Files.createTempDirectory("go mod file"); + try { + Path goMod = Files.copy(GO_ROOT.resolve("project5").resolve("go.mod"), modFileDir.resolve("go.mod")); + Map env = Map.of("GOFLAGS", GoTreeBuilder.toGoFlagsEntry("-modfile=" + goMod), "GOWORK", "off"); + GoDriver driver = new GoDriver(null, env, GO_ROOT.resolve("project5").toFile(), log); + assertEquals(driver.runCmd("list -m", false).getRes().trim(), "project5"); + } finally { + FileUtils.deleteDirectory(modFileDir.toFile()); + } + } + /** * The project is a module of a go.work workspace. */ From 850d8f9a50ac589437cfcd08d1c0fd1bbebc4a7e Mon Sep 17 00:00:00 2001 From: Jordan Hury Date: Thu, 1 Oct 2026 13:17:39 +0300 Subject: [PATCH 10/10] Check the Maven audit tests for the known CVEs instead of an exact count Xray published XRAY-1097605 for commons-io 1.4, so the maven-example fixture now has four vulnerabilities and the exact count of three fails on every branch. Co-Authored-By: Claude Opus 5.5 --- .../ide/common/configuration/JfrogCliDriverTest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/jfrog/ide/common/configuration/JfrogCliDriverTest.java b/src/test/java/com/jfrog/ide/common/configuration/JfrogCliDriverTest.java index b46d03ee..753691cd 100644 --- a/src/test/java/com/jfrog/ide/common/configuration/JfrogCliDriverTest.java +++ b/src/test/java/com/jfrog/ide/common/configuration/JfrogCliDriverTest.java @@ -26,6 +26,7 @@ import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; import java.util.*; +import java.util.stream.Collectors; import static org.testng.Assert.*; @@ -39,6 +40,7 @@ public class JfrogCliDriverTest { private final SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss"); private final Map testEnv = new HashMap<>(); private JfrogCliDriver jfrogCliDriver; + private static final Set MAVEN_EXAMPLE_VULNERABILITIES = Set.of("CVE-2017-9801", "CVE-2018-1294", "CVE-2021-29425"); private final String PASSWORD = System.getenv("JF_CLI_TEST_PASSWORD"); private final String USER_NAME = System.getenv("JF_CLI_TEST_USER"); private final String SERVER_URL = System.getenv("JF_CLI_TEST_URL"); @@ -243,7 +245,8 @@ public void testRunAudit_MultiMavenProject() { // Verify the findings FileTreeNode node = findings.stream().filter(finding -> finding.getTitle().equals("pom.xml")).findFirst().orElse(null); assertNotNull(node, "Expected SCA findings in pom.xml"); - assertEquals(node.getChildren().size(), 3, "Expected exactly three vulnerabilities"); + Set vulnerabilities = node.getChildren().stream().map(child -> ((FileIssueNode) child).getTitle()).collect(Collectors.toSet()); + assertTrue(vulnerabilities.containsAll(MAVEN_EXAMPLE_VULNERABILITIES), "Expected " + MAVEN_EXAMPLE_VULNERABILITIES + ", found " + vulnerabilities); assertEquals(node.getSeverity(), Severity.High, "Expected severity to be HIGH"); FileIssueNode issue = (FileIssueNode) node.getChildren().get(0); assertEquals(issue.getReporterType(), SourceCodeScanType.SCA, "Expected reporter type to be SCA"); @@ -286,7 +289,8 @@ public void testRunAudit_WithExcludedPattern() { // Verify the findings FileTreeNode node = findings.stream().filter(finding -> finding.getTitle().equals("pom.xml")).findFirst().orElse(null); assertNotNull(node, "Expected SCA findings in pom.xml"); - assertEquals(node.getChildren().size(), 3, "Expected exactly three vulnerabilities"); + Set vulnerabilities = node.getChildren().stream().map(child -> ((FileIssueNode) child).getTitle()).collect(Collectors.toSet()); + assertTrue(vulnerabilities.containsAll(MAVEN_EXAMPLE_VULNERABILITIES), "Expected " + MAVEN_EXAMPLE_VULNERABILITIES + ", found " + vulnerabilities); assertEquals(node.getSeverity(), Severity.High, "Expected severity to be HIGH"); FileIssueNode issue = (FileIssueNode) node.getChildren().get(0); assertEquals(issue.getReporterType(), SourceCodeScanType.SCA, "Expected reporter type to be SCA");