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

"Automatic Cleanup and Sync" does not delete non-versioned folders, only files

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Minor Minor
    • p4-plugin
    • None
    • Jenkins - 2.7.4
      Pipeline - 2.4
      P4-Plugin - 1.4.12

      Hi,

      I have a pipeline which uses the checkout([ $class: 'PerforceScm... syntax.
      Among other things, this build runs "npm install" which creates the node_modules folder under the workspace with all the relevant packages.

      When the checkout is done with Automatic Cleanup and Sync (AutoCleanImpl) - it cleans up all files under node_modules but leaves the folder structure intact. This causes issues when running npm install in the next build.

      As a workaround I have 2 alternatives:
      1. run "npm cache clean" on every build
      2. checkout with "Forced Clean and Sync" (ForceCleanImpl)

      Can AutoCleanImpl also remove non-versioned folders? Or this is intentional?

      Thanks,
      Mor

          [JENKINS-40687] "Automatic Cleanup and Sync" does not delete non-versioned folders, only files

          Paul Allen added a comment -

          The AutoCleanImpl only cleans up Versioned files. In addition Perforce will not remove empty directories unless you set the RMDIR option in your workspace, and then only if Perforce removes the last file (so if it was already empty, Perforce will not delete it).

          workspace: [$class: 'ManualWorkspaceImpl', ...
             spec: [rmdir: true, ...
          

          The 'p4cleanup' is a bit more drastic, deleting the client workspace. Do check the Global cleanup options under 'Manage Jenkins' -> 'Configure System' as you can set it to remove all content and client metadata.

          Paul Allen added a comment - The AutoCleanImpl only cleans up Versioned files. In addition Perforce will not remove empty directories unless you set the RMDIR option in your workspace, and then only if Perforce removes the last file (so if it was already empty, Perforce will not delete it). workspace: [$class: 'ManualWorkspaceImpl' , ... spec: [rmdir: true , ... The 'p4cleanup' is a bit more drastic, deleting the client workspace. Do check the Global cleanup options under 'Manage Jenkins' -> 'Configure System' as you can set it to remove all content and client metadata.

          Mor L added a comment - - edited

          Hi,

          I'm not sure I understand "The AutoCleanImpl only cleans up Versioned files" correctly - the plugin documentation contradicts that:
          "Automatic Cleanup and Sync
          Efficient cleaning and syncing of file revisions. Extra (non versioned files) are removed, missing and modified files re-added.
          Best for clean builds."
          I would expect the "Extra (non versioned files) are removed" would include the directories as well.
          I will try adding the RMDIR and see how it goes.
          Either way - I think it would be good to also document the "Options" section of the plugin (in which you can checkbox RMDIR) because its not clear.

          Mor L added a comment - - edited Hi, I'm not sure I understand "The AutoCleanImpl only cleans up Versioned files" correctly - the plugin documentation contradicts that: " Automatic Cleanup and Sync Efficient cleaning and syncing of file revisions. Extra (non versioned files) are removed , missing and modified files re-added. Best for clean builds." I would expect the "Extra (non versioned files) are removed" would include the directories as well. I will try adding the RMDIR and see how it goes. Either way - I think it would be good to also document the "Options" section of the plugin (in which you can checkbox RMDIR) because its not clear.

          Paul Allen added a comment -

          Sorry you are correct; AutoClean will remove non versioned files within the scope of the Workspace View (p4 clean). However, files outside of the Workspace view will not get removed.

          RMDIR is a unset as Perforce default; I could override this option in Jenkins, but some better documentation would help. Do let me know if the option works for you.

          Paul Allen added a comment - Sorry you are correct; AutoClean will remove non versioned files within the scope of the Workspace View (p4 clean). However, files outside of the Workspace view will not get removed. RMDIR is a unset as Perforce default; I could override this option in Jenkins, but some better documentation would help. Do let me know if the option works for you.

            Unassigned Unassigned
            pyrocks Mor L
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: