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

ItemGroupMixin#createProject() does not call Jenkins#checkGoodName()

    XMLWordPrintable

Details

    • Bug
    • Status: Resolved (View Workflow)
    • Minor
    • Resolution: Fixed
    • core
    • Jenkins 2.164.2
      Folders plugin 6.9
    • Jenkins 2.237

    Description

      String nested = "one/two"
      
      // Creates a single folder named "one/two" with / embedded in the name
      createProject(Folder.class, nested)
      
      // Looks for a subfolder named "two" inside a folder named "one"
      getItemByFullName(nested)
      

      As a result, this code fails

      import com.cloudbees.hudson.plugins.folder.Folder
      
      String folder = "nested/folders"
      
      create_folder_if_missing(folder)
      create_folder_if_missing(folder)
      
      void create_folder_if_missing(String folder) {
        def item = Jenkins.instance.getItemByFullName(folder)
      
        if (item == null) {
          println(folder + " not found. Creating.")
          Jenkins.instance.createProject(Folder.class, folder)
          println("Created " + folder)
        }
        else {
          println(folder + " found. Skipping.")
        }
      }
      

      with the result

      nested/folders not found. Creating.
      Created nested/folders
      nested/folders not found. Creating.
      java.lang.IllegalArgumentException: nested/folders already exists
      	at hudson.model.Items.verifyItemDoesNotAlreadyExist(Items.java:641)
      

      I think createProject(Folder.class, nested) should change its behavior to look for slashes and create subfolders, rather than allowing a slash in a folder name. At this point it's impossible to search for a folder with a slash in the name using getItemByFullName() function.

      Attachments

        Issue Links

          Activity

            calvinpark Calvin Park created issue -
            calvinpark Calvin Park made changes -
            Field Original Value New Value
            Description {code:java}
            String nested = "one/two"

            // Creates a single folder named "one/two" with / embedded in the name
            createProject(Folder.class, nested)

            // Looks for a subfolder named "two" inside a folder named "one"
            getItemByFullName(nested)
            {code}
            As a result, this code fails
            {code:java}
            import com.cloudbees.hudson.plugins.folder.Folder

            String folder = "nested/folders"

            create_folder_if_missing(folder)
            create_folder_if_missing(folder)

            void create_folder_if_missing(String folder) {
              def item = Jenkins.instance.getItemByFullName(folder)

              if (item == null) {
                println(folder + " not found. Creating.")
                Jenkins.instance.createProject(Folder.class, folder)
                println("Created " + folder)
              }
              else {
                println(folder + " found. Skipping.")
              }
            }
            {code}
            with the result
            {code:java}
            nested/folders not found. Creating.
            Created nested/folders
            nested/folders not found. Creating.
            java.lang.IllegalArgumentException: nested/folders already exists
            at hudson.model.Items.verifyItemDoesNotAlreadyExist(Items.java:641)
            {code}

            I think {{createProject(Folder.class, nested)}} should change its behavior to look for slashes and create subfolders, rather than allowing a slash in a folder name.
            {code:java}
            String nested = "one/two"

            // Creates a single folder named "one/two" with / embedded in the name
            createProject(Folder.class, nested)

            // Looks for a subfolder named "two" inside a folder named "one"
            getItemByFullName(nested)
            {code}
            As a result, this code fails
            {code:java}
            import com.cloudbees.hudson.plugins.folder.Folder

            String folder = "nested/folders"

            create_folder_if_missing(folder)
            create_folder_if_missing(folder)

            void create_folder_if_missing(String folder) {
              def item = Jenkins.instance.getItemByFullName(folder)

              if (item == null) {
                println(folder + " not found. Creating.")
                Jenkins.instance.createProject(Folder.class, folder)
                println("Created " + folder)
              }
              else {
                println(folder + " found. Skipping.")
              }
            }
            {code}
            with the result
            {code:java}
            nested/folders not found. Creating.
            Created nested/folders
            nested/folders not found. Creating.
            java.lang.IllegalArgumentException: nested/folders already exists
            at hudson.model.Items.verifyItemDoesNotAlreadyExist(Items.java:641)
            {code}

            I think {{createProject(Folder.class, nested)}} should change its behavior to look for slashes and create subfolders, rather than allowing a slash in a folder name. At this point it's impossible to search for a folder with a slash in the name using {{getItemByFullName()}} function.
            danielbeck Daniel Beck made changes -
            Summary createProject() and getItemsByFullName() handle nested folders inconsistently ItemGroupMixing#createProject() does not call Jenkins#checkGoodName
            calvinpark Calvin Park made changes -
            Comment [ I've tried to contribute to the {{cloudbees-folder-plugin}} git repo but {{mvn hpi:run}} fails.
            {code:java}
            cloudbees-folder-plugin master$ mvn hpi:run
            [INFO] Scanning for projects...
            [INFO]
            [INFO] --------------< org.jenkins-ci.plugins:cloudbees-folder >---------------
            [INFO] Building Folders Plugin 6.13-SNAPSHOT
            [INFO] --------------------------------[ hpi ]---------------------------------
            [INFO]
            [INFO] >>> maven-hpi-plugin:3.10:run (default-cli) > compile @ cloudbees-folder >>>
            [...]
            [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ cloudbees-folder ---
            [INFO] Changes detected - recompiling the module!
            [INFO] Compiling 45 source files to /Users/calvin/GitRepos/cloudbees-folder-plugin/target/classes
            [INFO] -------------------------------------------------------------
            [ERROR] COMPILATION ERROR :
            [INFO] -------------------------------------------------------------
            [ERROR] java.nio.file.NoSuchFileException: /Users/calvin/GitRepos/cloudbees-folder-plugin/target/classes/META-INF/annotations/hudson.Extension
            [INFO] 1 error
            [...]{code}
            The github page didn't enable {{Issues}} feature so I can't ask for help there [https://github.com/jenkinsci/cloudbees-folder-plugin]

            Any ideas on how to fix the compilation error?

            Thank you ]
            danielbeck Daniel Beck made changes -
            Summary ItemGroupMixing#createProject() does not call Jenkins#checkGoodName ItemGroupMixin#createProject() does not call Jenkins#checkGoodName
            danielbeck Daniel Beck made changes -
            Status Open [ 1 ] In Progress [ 3 ]
            danielbeck Daniel Beck made changes -
            Status In Progress [ 3 ] In Review [ 10005 ]
            danielbeck Daniel Beck made changes -
            Status In Review [ 10005 ] In Progress [ 3 ]
            danielbeck Daniel Beck made changes -
            Status In Progress [ 3 ] In Review [ 10005 ]
            danielbeck Daniel Beck made changes -
            Remote Link This issue links to "PR 4684 (Web Link)" [ 24889 ]
            calvinpark Calvin Park made changes -
            Summary ItemGroupMixin#createProject() does not call Jenkins#checkGoodName ItemGroupMixin#createProject() does not call Jenkins#checkGoodName()
            danielbeck Daniel Beck made changes -
            Released As Jenkins 2.237
            Resolution Fixed [ 1 ]
            Status In Review [ 10005 ] Resolved [ 5 ]
            oleg_nenashev Oleg Nenashev made changes -
            Labels lts-candidate
            olivergondza Oliver Gondža made changes -
            Labels lts-candidate 2.235.1-fixed
            olivergondza Oliver Gondža made changes -
            Labels 2.235.1-fixed 2.235.2-fixed
            olivergondza Oliver Gondža made changes -
            Labels 2.235.2-fixed 2.235.2-rejected

            People

              Unassigned Unassigned
              calvinpark Calvin Park
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: