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

Fisheye viewer is ignorant of svn:externals property

    • Icon: Improvement Improvement
    • Resolution: Unresolved
    • Icon: Major Major
    • subversion-plugin
    • None
    • Platform: All, OS: All

      Frequently I have builds which are triggered by changes in one or more projects
      referenced by way of an svn:externals property. In this case, however, the
      Fisheye URL for project MYPROJECT with svn:externals containing the MYEXTERNAL
      project is always of the form

      http://fisheye.example.com/source/changelog/MYPROJECT/?cs=123

      instead of

      http://fisheye.example.com/source/changelog/MYEXTERNAL/?cs=123

      where the revision is 123.

      The construction of the URL should check to see whether affected paths actually
      reside in MYPROJECT or MYEXTERNAL.

      P.S. It looks like a new component should be added for the Fisheye viewer. I
      specified the "subversion" component instead.

          [JENKINS-4167] Fisheye viewer is ignorant of svn:externals property

          It seems like this imposes a bigger challenge in that FishEye support doesn't
          really know which URL to point to — the referenced URLs in svn:external can
          point to anywhere in the whole world.

          Kohsuke Kawaguchi added a comment - It seems like this imposes a bigger challenge in that FishEye support doesn't really know which URL to point to — the referenced URLs in svn:external can point to anywhere in the whole world.

          f_copperfield added a comment -

          > the referenced URLs in svn:external can point to anywhere in the whole world.

          Yes, but I would just assume that if the svn:externals URL has the same host as
          the checked out project, then there is a corresponding project in Fisheye.
          Although I don't think it would be common, multiple Fisheye URLs could be
          registered in Hudson to cater for scenarios where a project spans multiple
          Fisheye-visible repositories.

          In cases where the URL doesn't look like a Fisheye URL, you might have a
          fallback to show diffs or just choose to link to that URL (while providing some
          visual indication that this is not a diff), as many repositories allow http(s)
          access.

          I think that the algorithm for finding whether a working copy path is actually
          an svn:external is fairly straightforward. Something like:

          // path = working copy path
          // workspaceDir = project workspace directory
          function isSvnExternal(path, workspaceDir) {
          let pathDir = path.getParent()
          let parentDir = pathDir
          while (parentDir != workspaceDir) {
          parentDir = parentDir.getParent()
          let svnExternals = parentDir's svn:externals || {}
          for (svnExternal in svnExternals)
          if (svnExternal.path == pathDir)
          return true
          }
          return false
          }

          f_copperfield added a comment - > the referenced URLs in svn:external can point to anywhere in the whole world. Yes, but I would just assume that if the svn:externals URL has the same host as the checked out project, then there is a corresponding project in Fisheye. Although I don't think it would be common, multiple Fisheye URLs could be registered in Hudson to cater for scenarios where a project spans multiple Fisheye-visible repositories. In cases where the URL doesn't look like a Fisheye URL, you might have a fallback to show diffs or just choose to link to that URL (while providing some visual indication that this is not a diff), as many repositories allow http(s) access. I think that the algorithm for finding whether a working copy path is actually an svn:external is fairly straightforward. Something like: // path = working copy path // workspaceDir = project workspace directory function isSvnExternal(path, workspaceDir) { let pathDir = path.getParent() let parentDir = pathDir while (parentDir != workspaceDir) { parentDir = parentDir.getParent() let svnExternals = parentDir's svn:externals || {} for (svnExternal in svnExternals) if (svnExternal.path == pathDir) return true } return false }

          evernat added a comment -

          This seems as an improvement and not a bug to me.

          evernat added a comment - This seems as an improvement and not a bug to me.

            Unassigned Unassigned
            f_copperfield f_copperfield
            Votes:
            1 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated: