Skip to content

Support SCP-like parent URLs with relative submodules #492

@bjornrobertsson

Description

@bjornrobertsson

Problem

When the parent repository uses an SCP-like URL (e.g., git@github.com:org/repo.git) and a submodule is configured with a relative path (e.g., ../other/submodule.git), envbuilder cannot resolve the submodule URL.

Currently this returns an error:

relative submodule URL "../other/submodule.git" cannot be resolved: parent URL "git@github.com:org/repo.git" uses SCP-like syntax which is not supported for relative submodule resolution

Background

Go's net/url.Parse() cannot properly parse SCP-like URLs - they have no scheme and use : as a path separator instead of /.

We've built a custom ResolveSubmoduleURL function to handle relative submodule paths because go-git's native implementation has bugs with:

  • HTTPS URLs losing slashes when using filepath.Dir()
  • Multiple relative paths (../../submodule.git) not resolving correctly

Workaround

Users can configure submodules with absolute URLs instead of relative paths.

Proposed Solution

Add SCP-like URL handling to ResolveSubmoduleURL:

  1. Detect SCP-like parent URLs using the existing scpLikeURLRegex
  2. Parse into user, host, and path components
  3. Apply relative path resolution to the path component
  4. Reconstruct the SCP-like URL

Alternatively, use go-git's transport.NewEndpoint() which can parse SCP-like URLs, but this needs careful testing to ensure it doesn't reintroduce the bugs we worked around.

Related/Blocker

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions