pub fn parse_source(spec: &str) -> Result<Source, String>Expand description
github:owner/repo@v2, forgejo:host/owner/repo, a git URL, or a local
path.
The revision is split on the last @ that falls AFTER the last separator.
That rule is not decoration: git@github.com:acme/repo.git carries an @
in its userinfo, and splitting on the last @ outright would read
github.com as a revision and quietly fetch the wrong thing. Both / and
\ count, or a Windows path containing an @ would lose its tail the same
way.