Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-15826

CVS plugin excluded regions no longer match on the file path

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved (View Workflow)
    • Priority: Major
    • Resolution: Fixed
    • Component/s: cvs-plugin
    • Labels:
      None
    • Similar Issues:

      Description

      After upgrading from version 1.6 of the CVS plugin to 2.6 (and then to 2.7), our "excludes regions" have stopped working. That's because we have a pattern like

      [^/]*\.ext
      

      to prevent changes to .ext files in the root directory of the checkout from triggering builds, and we have patterns like

      directoryToExclude/.*
      

      to prevent any file in directoryToExclude from triggering a build. But we do expect a build to be triggered by changes to a .ext file that is in a directory that is not excluded. That was true of version 1.6, but not after upgrading to 2.6.

      Not that you don't already know this, but looking at the source code for version 2.6 of the CVS plugin, it looks like the CvsFile is constructed (in CvsLog) using only file.getSimpleName() and not file.getFullName() which means that the loop over excludePatterns in AbstractCvs is not taking the full path into account. (However, I wouldn't know what negative side effects there would be, if any, to making the single change.)

        Attachments

          Activity

          Hide
          scm_issue_link SCM/JIRA link daemon added a comment -

          Code changed in jenkins
          User: Michael Clarke
          Path:
          src/main/java/hudson/scm/CvsLog.java
          http://jenkins-ci.org/commit/cvs-plugin/9d1021271f95842c85dda35a6aec19ff768b3554
          Log:
          [FIXED JENKINS-15826] use full name for matching file exclude regions

          Compare: https://github.com/jenkinsci/cvs-plugin/compare/e1be53655e72...9d1021271f95

          Show
          scm_issue_link SCM/JIRA link daemon added a comment - Code changed in jenkins User: Michael Clarke Path: src/main/java/hudson/scm/CvsLog.java http://jenkins-ci.org/commit/cvs-plugin/9d1021271f95842c85dda35a6aec19ff768b3554 Log: [FIXED JENKINS-15826] use full name for matching file exclude regions Compare: https://github.com/jenkinsci/cvs-plugin/compare/e1be53655e72...9d1021271f95
          Hide
          jasonobrien Jason O'Brien added a comment - - edited
            • duplicate, my apologies
          Show
          jasonobrien Jason O'Brien added a comment - - edited duplicate, my apologies
          Hide
          jasonobrien Jason O'Brien added a comment -

          Michael, I believe your test case sidesteps the issue here by manually building the changed file list. CvsLog.java uses file.getSimpleName(), and so the CvsFile objects never get created with the full path - just the filename.

          So where you have done:
          new CvsFile("subdir/subdir2/test.ext", "1.1", false)
          CvsLog.java does:
          new CvsFile(file.getSimpleName(), file.getRevision(), file.isDead())

          Where file.getSimpleName just returns "text.ext" as specified in CVSChangeLogSet.java, where the doc is:

          Gets just the last component of the path, like "zot.c"

          I think using getFullName instead, as Jeremy suggested, might fix it, but I'm not sure if other code would be affected.

          Show
          jasonobrien Jason O'Brien added a comment - Michael, I believe your test case sidesteps the issue here by manually building the changed file list. CvsLog.java uses file.getSimpleName(), and so the CvsFile objects never get created with the full path - just the filename. So where you have done: new CvsFile("subdir/subdir2/test.ext", "1.1", false) CvsLog.java does: new CvsFile(file.getSimpleName(), file.getRevision(), file.isDead()) Where file.getSimpleName just returns "text.ext" as specified in CVSChangeLogSet.java, where the doc is: Gets just the last component of the path, like "zot.c" I think using getFullName instead, as Jeremy suggested, might fix it, but I'm not sure if other code would be affected.
          Hide
          mc1arke Michael Clarke added a comment -

          I'm unable to replicate this either manually or through unit tests. Please re-open if you are still affected by this issue and have further information to help resolve it.

          Show
          mc1arke Michael Clarke added a comment - I'm unable to replicate this either manually or through unit tests. Please re-open if you are still affected by this issue and have further information to help resolve it.
          Hide
          mc1arke Michael Clarke added a comment -

          I've run some tests and can't replicate your issue. Could you try installing the snapshot version from https://buildhive.cloudbees.com/job/jenkinsci/job/cvs-plugin/88/org.jenkins-ci.plugins$cvs/artifact/org.jenkins-ci.plugins/cvs/2.9-SNAPSHOT/cvs-2.9-SNAPSHOT.hpi and check what the logs show?

          To answer your above comment: The plugin polls the full repository then checks each changed file to see if its path matches the exclude region. I've add in a log message to show which pattern any skipped files have matched to.

          Show
          mc1arke Michael Clarke added a comment - I've run some tests and can't replicate your issue. Could you try installing the snapshot version from https://buildhive.cloudbees.com/job/jenkinsci/job/cvs-plugin/88/org.jenkins-ci.plugins$cvs/artifact/org.jenkins-ci.plugins/cvs/2.9-SNAPSHOT/cvs-2.9-SNAPSHOT.hpi and check what the logs show? To answer your above comment: The plugin polls the full repository then checks each changed file to see if its path matches the exclude region. I've add in a log message to show which pattern any skipped files have matched to.

            People

            • Assignee:
              mc1arke Michael Clarke
              Reporter:
              jeremy Jeremy Michelson
            • Votes:
              2 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: