apache / apache/maven-release

[MRELEASE-939] release:perform uses incorrect ReleaseDescriptor.scmRelativePathProjectDirectory in nested multi-module project

Open
#1,110 1 comment 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
128
Forks
145
Avg merge
7h 7m
Merged PRs (30d)
3

Description

**[Jürgen](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=work_registries)** opened **[MRELEASE-939](https://issues.apache.org/jira/browse/MRELEASE-939?redirect=false)** and commented

I recently migrated from svn to git

I have the same issues as described in MRELEA[SE-927](https://issues.apache.org/jira/browse/SE-927). I use the "pushChanges=false" workaround mentioned in MRELEA[SE-767](https://issues.apache.org/jira/browse/SE-767).

I also have an additional problem with an incorrectly determined ReleaseDescriptor.scmRelativePathProjectDirectory in release:perform

Details:

```
project.git/maven-dir/aggregator/pom.xml
project.git/maven-dir/module-a/pom.xml
project.git/maven-dir/module-b/pom.xml
```

the main issue is the existence of /maven-dir, so the all the maven project dirs don't live in the repos root, but in a sub-folder.

on release:perform of aggregator/pom.xml, a checkout happens into target/checkout

```
(cd /workspace/project.git/maven-dir/aggregator ; mvn release:perform)
checkout into /workspace/project.git/maven-dir/aggregator/target/checkout/maven-dir/aggregator
```

org.apache.maven.shared.release.config.ReleaseDescriptor.setScmRelativePathProjectDirectory(String) determines scmRelativePathProjectDirectory incorrectly:

```
scmResult.getRelativePathProjectDirectory is null

basedir = ReleaseUtil.getCommonBasedir( reactorProjects ) results in:
basedir=/workspace/project.git/maven-dir

rootProjectBasedir = rootProject.getBasedir().getAbsolutePath() results in:
rootProjectBasedir=/workspace/project.git/maven-dir/aggregator

scmRelativePathProjectDirectory = rootProjectBasedir.substring( basedir.length() + 1 ); results in:
scmRelativePathProjectDirectory=/aggregator

due to the full repos git checkout, it should be:
scmRelativePathProjectDirectory=/maven-dir/aggregator
```

existing code worked with svn, because unlike git, release:prepare would tag only the maven-dir substructure of the svn repos, while in git, it tags the whole repos?

so release:perform with svn checkout of the tag would result in only the /maven-dir/ being checked out into /target/checkout, leading to e.g.:
/workspace/project.git/maven-dir/aggregator/target/checkout/aggregator

for git, release:perform checkout of tag pulls the whole repos, so its:
/workspace/project.git/maven-dir/aggregator/target/checkout/maven-dir/aggregator

code to determine scmRelativePathProjectDirectory does not account for that.

suggestion: let me define a relative project location for full-repos scm's like git, either in project/scm or in release-plugin configuration

like
\maven-dir\

I also attaching my current workaround. I made a custom built of maven-release-plugin based on 2.5.3
I added org.apache.maven.plugins.release.GitperformReleaseMojo
* add a scmRelativePathProjectDirectory configuration param
* set ReleaseDescriptor.scmRelativePathProjectDirectory to param value shortly before its needed, by injecting a custom CheckoutProjectFromScm phase
* simply setting ReleaseDescriptor.scmRelativePathProjectDirectory in GitperformReleaseMojo.execute() doesn't work, because ReleaseDescriptor gets constructed/partly-copied/merged/overwritten later (awful!)...
* prevent wrong ReleaseDescriptor.setScmRelativePathProjectDirectory in CheckoutProjectFromScm.performCheckout using a ReleaseDescriptor delegate

its not a solution, but it demonstrates what I want to achieve: properly setting ReleaseDescriptor.scmRelativePathProjectDirectory and not having it overwritten later with wrong value

---

**Affects:** 2.5.3

**Attachments:**
- [GitperformReleaseMojo.java](https://issues.apache.org/jira/secure/attachment/12783369/GitperformReleaseMojo.java) (_15.64 kB_)

**Issue Links:**
- [MRELEASE-927](https://issues.apache.org/jira/browse/MRELEASE-927) Releasing flat multi-module projects using git

- [MRELEASE-767](https://issues.apache.org/jira/browse/MRELEASE-767) releasing flat multi-module projects using git

1 votes, 4 watchers

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by tracing release:perform through ReleaseDescriptor.setScmRelativePathProjectDirectory and CheckoutProjectFromScm.performCheckout, using the attached GitperformReleaseMojo.java as context. Reproduce the nested Git checkout layout described in the issue, then verify that the descriptor preserves the repository-relative maven-dir/aggregator path without being overwritten.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, java
Domain
build-system, release
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.