Skip to content

[MWAR-455] Allow force overwrite of read only resources in exploded war target directory - #27

Open
laoseth wants to merge 2 commits into
apache:masterfrom
laoseth:master
Open

[MWAR-455] Allow force overwrite of read only resources in exploded war target directory#27
laoseth wants to merge 2 commits into
apache:masterfrom
laoseth:master

Conversation

@laoseth

@laoseth laoseth commented Jul 1, 2022

Copy link
Copy Markdown

Following this checklist to help us incorporate your
contribution quickly and easily:

  • [ X] Make sure there is a JIRA issue filed
    for the change (usually before you start working on it). Trivial changes like typos do not
    require a JIRA issue. Your pull request should address just this issue, without
    pulling in other changes.
  • [ X] Each commit in the pull request should have a meaningful subject line and body.
  • [X ] Format the pull request title like [MWAR-XXX] - Fixes bug in ApproximateQuantiles,
    where you replace MWAR-XXX with the appropriate JIRA issue. Best practice
    is to use the JIRA issue title in the pull request title and in the first line of the
    commit message.
  • [ X] Write a pull request description that is detailed enough to understand what the pull request does, how, and why.
  • [X ] Run mvn clean verify to make sure basic checks pass. A more thorough check will
    be performed on your pull request automatically.
  • You have run the integration tests successfully (mvn -Prun-its clean verify).

If your pull request is about ~20 lines of code you don't need to sign an
Individual Contributor License Agreement if you are unsure
please ask on the developers list.

To make clear that you license your contribution under
the Apache License Version 2.0, January 2004
you have to acknowledge this by using the following check-box.

Seth Wilcox added 2 commits July 1, 2022 12:57
… readonly, similar to ant's force option for file operations
* MWAR-455:
  Add option to allow forcing resources to be overwritten when they are readonly, similar to ant's force option for file operations
@bmarwell
bmarwell requested a review from michael-o July 20, 2022 18:44
@bmarwell

Copy link
Copy Markdown

Thanks for the PR! Will look at it and run the CI...

* If resources should be overwritten, even if they are read only
*/
@Parameter( defaultValue = "false" )
boolean forceOverwriteResources;

@olamy olamy Jul 21, 2022

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we usually add @since for new parameter and make the field private.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can get that added to the pull request. However, based on @michael-o 's response, is that a vain exercise?

@michael-o michael-o left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking at the JIRA issue and the reason for this I am not convinced. It looks like a fix for a symptom with an ill-designed SCM. You should rather inquire with Perforce's today owner why it is implmented this way. I don't understand, therefore I won't consent this PR even if the code looks decent.

What about this? https://stackoverflow.com/questions/48195633/prevent-perforce-from-marking-files-as-read-only

@elharo elharo changed the title MWAR-455 - Allow force overwrite of read only resources in exploded war target directory [MWAR-455] Allow force overwrite of read only resources in exploded war target directory Oct 23, 2022
@jira-importer

Copy link
Copy Markdown

Resolve #536

1 similar comment
@jira-importer

Copy link
Copy Markdown

Resolve #536

@elharo

elharo commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Perforce is a major SCM. IMHO it's superior to git. I think we need to support it instead of just claiming it's wrong by design.

@elharo
elharo requested a review from Copilot July 28, 2026 11:45

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Adds support for forcibly overwriting read-only resources when building an exploded WAR, and validates the behavior with a new unit test.

Changes:

  • Introduces a forceOverwriteResources Mojo parameter and propagates it through the packaging context.
  • Updates file-copy logic to make read-only destination files writable before overwriting.
  • Adds a test covering a read-only destination resource scenario for exploded WAR builds.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 5 comments.

File Description
src/test/java/org/apache/maven/plugins/war/WarExplodedMojoTest.java Adds a new test to exercise overwriting a read-only resource in the exploded WAR directory.
src/main/java/org/apache/maven/plugins/war/packaging/WarPackagingContext.java Extends the packaging context API to expose the force-overwrite flag.
src/main/java/org/apache/maven/plugins/war/packaging/AbstractWarPackagingTask.java Updates copy logic to flip destination files to writable when force-overwrite is enabled.
src/main/java/org/apache/maven/plugins/war/AbstractWarMojo.java Adds the new configuration parameter and wires it into the packaging context implementation.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 260 to +266
String getOutputTimestamp();

/**
* If files are modified, but the target is readonly, force update.
* @return forceOverwriteResources
*/
boolean isForceOverwriteResources();
Comment on lines +375 to 380
if ( context.isForceOverwriteResources() && destination.exists() && !destination.canWrite() )
{
destination.setWritable( true );
}
FileUtils.copyFile( source.getCanonicalFile(), destination );
// preserve timestamp
Comment on lines +149 to +153
/**
* If resources should be overwritten, even if they are read only
*/
@Parameter( defaultValue = "false" )
boolean forceOverwriteResources;
Comment on lines +175 to +179
createFile( conflictingFile );
conflictingFile.setWritable(false);
conflictingFile.setLastModified(System.currentTimeMillis()-100_000);

assertTrue( "sampeResource not found", sampleResource.exists() );
conflictingFile.setWritable(false);
conflictingFile.setLastModified(System.currentTimeMillis()-100_000);

assertTrue( "sampeResource not found", sampleResource.exists() );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants