-
Bug
-
Resolution: Fixed
-
Minor
-
None
-
Platform: All, OS: All
-
Powered by SuggestiMate
In our projects, we are working with some files that contains non ASCII
characters (mainly accentuated characters é,è,à ,...) that are stored in a CVS
repository.
The first checkout of a project is working, but any subsequent update is failing
with this kind of error:
cvs update: move away <a_file_with_accentuated_chars>; it is in the way
Examing the error message closely shows that a file like
liste_des_répertoires_de_configuration.doc is conflicting with
liste_des_r@"pertoires_de_configuration.doc, after some search, I found that the
related CVS/Entries file contains the wrong characters. So I tried by command
line the same CVS checkout command that Hudson is performing and the CVS/Entries
file is right this time. Notepad++ is telling me that the right file has an ANSI
encoding and the wrong file has a ANSI+UTF-8 encoding. Please note that my CVS
client is the cvsnt.exe provided with TortoiseSVN and runs on a Windows XP
workstation where Hudson is installed.
I thought that Hudson was maybe updating the CVS/Entries and corrupting them by
not using the right encoding, so I took some time to read the source code and
found that the hudson.scm.CVSSCM implementation is reading the hidden
CVS/Entries files to detect and remove the "sticky date" if any (see the
internal StickyDateCleanUpTask class).
I think there are two problems here:
- First, the content is read using the FileUtils.readFileToString(entries)
method instead of using the FileUtils.readFileToString(entries, encoding), thus
the content of these files are read with the default VM encoding instead of the
real file encoding. - Second, the new content is written using the AtomicFileWriter class. This
class is always writing files in UTF-8. This the origin of the bug that put
wrong characters in the CVS/Entries files.
Now here is what I did to fix the bug:
- Add a constructor to the AtomicFileWriter that takes the file and the encoding
as arguments. The original constructor is now invoking the new one using UTF-8
encoding for backward compatibility. - Add a cvsHiddenFilesEncoding property in the CVSSCM class.
- Modify every reading of a CVS file to use the encoding.
- Modify the call to AtomicFileWriter to use the encoding.
- Currently initializing the cvsHiddenFilesEncoding to ISO-8859-1 directly in
the constructor. This not the right thing to do, but it works and fixes my bug
right now. I think that this property should be configurable in the CVS
managment page but I don't know how to do this.
[JENKINS-4241] CVS CSM implementation change CVS/Entries files encoding
Code changed in jenkins
User: mc1arke
Path:
pom.xml
src/main/java/hudson/org/apache/tools/ant/taskdefs/AbstractCvsTask.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/CVSEntry.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/ChangeLogParser.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/ChangeLogWriter.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/CvsUser.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/RCSFile.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/RedirectingOutputStream.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/RedirectingStreamHandler.java
src/main/java/hudson/org/apache/tools/ant/taskdefs/cvslib/package.html
src/main/java/hudson/scm/CVSChangeLogParser.java
src/main/java/hudson/scm/CVSChangeLogSet.java
src/main/java/hudson/scm/CVSRepositoryBrowser.java
src/main/java/hudson/scm/CVSSCM.java
src/main/java/hudson/scm/CvsChangeLogHelper.java
src/main/java/hudson/scm/CvsChangeSet.java
src/main/java/hudson/scm/CvsFile.java
src/main/java/hudson/scm/CvsModule.java
src/main/java/hudson/scm/CvsModuleLocation.java
src/main/java/hudson/scm/CvsModuleLocationType.java
src/main/java/hudson/scm/CvsRepository.java
src/main/java/hudson/scm/CvsRevisionState.java
src/main/java/hudson/scm/ExcludedRegion.java
src/main/java/hudson/scm/LegacyConvertor.java
src/main/java/hudson/scm/MailAddressResolverImpl.java
src/main/java/hudson/scm/cvstagging/CvsTagAction.java
src/main/java/hudson/scm/cvstagging/CvsTagActionDescriptor.java
src/main/java/hudson/scm/cvstagging/CvsTagActionWorker.java
src/main/java/hudson/scm/cvstagging/LegacyTagAction.java
src/main/resources/hudson/scm/CVSSCM/DescriptorImpl/enterPassword.jelly
src/main/resources/hudson/scm/CVSSCM/DescriptorImpl/versionCheckError.jelly
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_de.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_fr.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_ja.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_nl.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_pt_BR.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_ru.html
src/main/resources/hudson/scm/CVSSCM/TagAction/help-tagAll_tr.html
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm.jelly
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_de.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_es.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_fr.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_ja.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_nl.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_pt_BR.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_ru.properties
src/main/resources/hudson/scm/CVSSCM/TagAction/tagForm_tr.properties
src/main/resources/hudson/scm/CVSSCM/config.jelly
src/main/resources/hudson/scm/CVSSCM/config.properties
src/main/resources/hudson/scm/CVSSCM/global.jelly
src/main/resources/hudson/scm/CVSSCM/help-allModules.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_de.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_fr.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_ja.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_nl.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_pt_BR.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_ru.html
src/main/resources/hudson/scm/CVSSCM/help-allModules_tr.html
src/main/resources/hudson/scm/CVSSCM/help-branch.html
src/main/resources/hudson/scm/CVSSCM/help-branch_de.html
src/main/resources/hudson/scm/CVSSCM/help-branch_fr.html
src/main/resources/hudson/scm/CVSSCM/help-branch_ja.html
src/main/resources/hudson/scm/CVSSCM/help-branch_nl.html
src/main/resources/hudson/scm/CVSSCM/help-branch_pt_BR.html
src/main/resources/hudson/scm/CVSSCM/help-branch_ru.html
src/main/resources/hudson/scm/CVSSCM/help-branch_tr.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_de.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_fr.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_ja.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_nl.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_pt_BR.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_ru.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_tr.html
src/main/resources/hudson/scm/CVSSCM/help-cvsExe_zh_CN.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_de.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_fr.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_ja.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_nl.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_pt_BR.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_ru.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRoot_tr.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_de.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_fr.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_ja.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_nl.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_pt_BR.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_ru.html
src/main/resources/hudson/scm/CVSSCM/help-cvsRsh_tr.html
src/main/resources/hudson/scm/CVSSCM/help-cvspassFile.html
src/main/resources/hudson/scm/CVSSCM/help-cvspassFile_de.html
src/main/resources/hudson/scm/CVSSCM/help-cvspassFile_fr.html
src/main/resources/hudson/scm/CVSSCM/help-cvspassFile_ja.html
src/main/resources/hudson/scm/CVSSCM/help-cvspassFile_zh_CN.html
src/main/resources/hudson/scm/CVSSCM/help-disableCvsQuiet.html
src/main/resources/hudson/scm/CVSSCM/help-excludedRegions.html
src/main/resources/hudson/scm/CVSSCM/help-excludedRegions_de.html
src/main/resources/hudson/scm/CVSSCM/help-excludedRegions_fr.html
src/main/resources/hudson/scm/CVSSCM/help-excludedRegions_ja.html
src/main/resources/hudson/scm/CVSSCM/help-pruneEmptyDirectories.html
src/main/resources/hudson/scm/CVSSCM/help-skipChangeLog.html
src/main/resources/hudson/scm/CVSSCM/help-useHeadIfNotFound.html
src/main/resources/hudson/scm/CVSSCM/help-useHeadIfNotFound_de.html
src/main/resources/hudson/scm/CvsModule/config.jelly
src/main/resources/hudson/scm/CvsModule/config.properties
src/main/resources/hudson/scm/CvsModule/config_de.properties
src/main/resources/hudson/scm/CvsModule/config_es.properties
src/main/resources/hudson/scm/CvsModule/config_fr.properties
src/main/resources/hudson/scm/CvsModule/config_ja.properties
src/main/resources/hudson/scm/CvsModule/config_nl.properties
src/main/resources/hudson/scm/CvsModule/config_pt_BR.properties
src/main/resources/hudson/scm/CvsModule/config_ru.properties
src/main/resources/hudson/scm/CvsModule/config_tr.properties
src/main/resources/hudson/scm/CvsModule/help-branchName.html
src/main/resources/hudson/scm/CvsModule/help-localName.html
src/main/resources/hudson/scm/CvsModule/help-remoteName.html
src/main/resources/hudson/scm/CvsModule/help-tagName.html
src/main/resources/hudson/scm/CvsModule/help-useHeadIfNotFound.html
src/main/resources/hudson/scm/CvsModule/help-useHeadIfNotFound_de.html
src/main/resources/hudson/scm/CvsModuleLocation/BranchModuleLocation/config.jelly
src/main/resources/hudson/scm/CvsModuleLocation/HeadModuleLocation/config.jelly
src/main/resources/hudson/scm/CvsModuleLocation/TagModuleLocation/config.jelly
src/main/resources/hudson/scm/CvsRepository/config.jelly
src/main/resources/hudson/scm/CvsRepository/config.properties
src/main/resources/hudson/scm/CvsRepository/config_de.properties
src/main/resources/hudson/scm/CvsRepository/config_es.properties
src/main/resources/hudson/scm/CvsRepository/config_fr.properties
src/main/resources/hudson/scm/CvsRepository/config_ja.properties
src/main/resources/hudson/scm/CvsRepository/config_nl.properties
src/main/resources/hudson/scm/CvsRepository/config_pt_BR.properties
src/main/resources/hudson/scm/CvsRepository/config_ru.properties
src/main/resources/hudson/scm/CvsRepository/config_tr.properties
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_de.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_fr.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_ja.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_nl.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_pt_BR.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_ru.html
src/main/resources/hudson/scm/CvsRepository/help-cvsRoot_tr.html
src/main/resources/hudson/scm/CvsRepository/help-excludedRegions.html
src/main/resources/hudson/scm/CvsRepository/help-excludedRegions_de.html
src/main/resources/hudson/scm/CvsRepository/help-excludedRegions_fr.html
src/main/resources/hudson/scm/CvsRepository/help-excludedRegions_ja.html
src/main/resources/hudson/scm/ExcludedRegion/config.jelly
src/main/resources/hudson/scm/cvs/Messages.properties
src/main/resources/hudson/scm/cvs/Messages_de.properties
src/main/resources/hudson/scm/cvs/Messages_es.properties
src/main/resources/hudson/scm/cvs/Messages_fr.properties
src/main/resources/hudson/scm/cvs/Messages_ja.properties
src/main/resources/hudson/scm/cvs/Messages_nl.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_de.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_fr.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_ja.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_nl.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_pt_BR.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_ru.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/help-tagAll_tr.html
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm.jelly
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_de.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_es.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_fr.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_ja.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_nl.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_pt_BR.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_ru.properties
src/main/resources/hudson/scm/cvstagging/CvsTagAction/tagForm_tr.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_de.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_fr.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_ja.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_nl.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_pt_BR.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_ru.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/help-tagAll_tr.html
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm.jelly
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_de.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_es.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_fr.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_ja.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_nl.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_pt_BR.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_ru.properties
src/main/resources/hudson/scm/cvstagging/LegacyTagAction/tagForm_tr.properties
src/test/java/hudson/scm/CVSSCMTest.java
src/test/java/hudson/scm/CvsChangeLogHelperTest.java
http://jenkins-ci.org/commit/cvs-plugin/1c6ddef1e5c1c3fe9f1a236fe4cc3aa336b8ca21
Log:
Merge pull request #5 from mc1arke/master
Overhaul of the cvs plugin
Changes:
- Allowing checking out modules from different branch/tags in a single repository (
JENKINS-768,JENKINS-6812) - Allowing multiple repositories in a single job i.e. multiple CVS roots (
JENKINS-2638) - Using a Java CVS Library rather than depend on a system library (
JENKINS-49,JENKINS-3848,JENKINS-3756,JENKINS-1676) - Use 'rlog' for polling and change-log generation and 'rtag' for tagging (
JENKINS-6312,JENKINS-10981,JENKINS-11787,JENKINS-1847,JENKINS-1359,JENKINS-76,JENKINS-9809,JENKINS-2710,JENKINS-5744,JENKINS-4604) - Restrict CVS to only check-out configured modules and not other CVS items in the workspace (
JENKINS-7449,JENKINS-2345,JENKINS-4489,JENKINS-1638,JENKINS-528) - Add check-box to allow disabling change-log generation per project (
JENKINS-3979) - Leave CVS/Entries contents in their original encoding (
JENKINS-4241,JENKINS-2614) - Making CVS Prune (-p parameter) optional through job configuration (
JENKINS-1013) - Improving warnings and validation (
JENKINS-9670,JENKINS-9045,JENKINS-7407,JENKINS-3133) - Fixing cyclic dependency with subversion plugin in POM (
JENKINS-10370) - Fixing 'after-the-fact' tagging of builds (
JENKINS-8128) - Improved date format on CVS commands (
JENKINS-6119,JENKINS-7833) - Allowing macro/parameter expansion on input fields (
JENKINS-2318,JENKINS-3821) - Fixing missing CVS change log entries when 'use head if not found' is used (
JENKINS-12104)
Potentially also fixes:
JENKINS-1737: Alternative Quiet Period Implementation (untested - updated polling should fix this)
JENKINS-10843: CVS Update (defect is unclear)
JENKINS-427: Cannot check out alias modules from CVS (untested - using rlog should fix this)
It's probably worth updating the version number in the POM to 2.0 given the number/scale of these changes, although this hasn't been included as part of this request.
Compare: https://github.com/jenkinsci/cvs-plugin/compare/7b57474...1c6ddef
Cvs plugin no longer modifies the entries files manually, rather using a java cvs client for all cvs work. This prevents entries files contents being changed wrongly
.