This seems quite reasonable to me. Aaron, would this work correctly in
the case of your Subversion repository setup?
Cedric's algorithm seems like it will work. As long as I can define a
Hackystat project with "work3" workspaces, then analyses like Daily Project
Details should know what to do.
But, let me explain further that I think this problem doesn't occur because
of a Subversion repository setup. Users could experience this problem with
CVS as well. For example, checking out hackystat modules in a subdirectory,
while checking out a single standalone module in the top level directory.
c:\cvs\hackystat\hackyBuild
c:\cvs\hackystat\hacky<ModuleName>
c:\cvs\stackyHack
However, in CVS's case this isn't the standard practice (at least in CSDL
and our SE classes). In Subversion it seems to be quite common to checkout
the parent directory of a bunch of modules. So instead of checking out
hackyBuild, hackyKernel, hackyStdExt, etc separately, Subversion
_allows_the_possibility_ of checking out all submodules from its parent
directory (well, depending on how you set up your subversion repository. i
suppose you could keep all modules at the top level, but that doesn't seem
to be the standard). Note that you can definitely checkout individual
modules in subversion like we have been doing with CVS. In fact, you guys
might continue to do that, since some of the Hackystat modules don't have
to be built locally all the time and there are different configurations of
modules.
A couple of other things:
1) I've heard that you guys are planning on importing only version 7
designs in Subversion. I personally think that it would be cool import
version 6 and use Subversion in the refactoring to keep track of the
original architecture and how it maps to version 7. For example, I think
subversion will know that hackyStdExt/src/org/hackystat/stdext/unittest/sdt
was changed to hackyStdUnitTest/src/org/hackystat/unittest/sdt/. There
could be some really interesting Hackystat analyses one could write in
regards to Software Architecture/Evolution. I'm not sure what is the best
way to do this in subversion but maybe importing version 6 into one
subversion directory (say hackystat6) then moving it to another directory
(say hackystat). Anyway, I understand why you guys have chosen not to do this.
Subversion could be one way to solve the refactoring problem in hackystat.
Of course this would be a tool specific solution.
2) has anyone started to think about the subversion directory structure for
hackystat? Here is a suggestion to start things off
http://hackystat.ics.hawaii.edu/repos/hackystat/
http://hackystat.ics.hawaii.edu/repos/hackystat/trunk/
http://hackystat.ics.hawaii.edu/repos/hackystat/trunk/hacky<ModuleName>
http://hackystat.ics.hawaii.edu/repos/hackystat/trunk/hacky<ModuleName>/src
http://hackystat.ics.hawaii.edu/repos/hackystat/tags/
http://hackystat.ics.hawaii.edu/repos/hackystat/tags/release7.0.1/hacky<ModuleName>
http://hackystat.ics.hawaii.edu/repos/hackystat/tags/release7.0.1/hacky<ModuleName>/src
http://hackystat.ics.hawaii.edu/repos/hackystat/branch/
http://hackystat.ics.hawaii.edu/repos/hackystat/branch/somebranch
http://hackystat.ics.hawaii.edu/repos/hackystat/branch/somebranch/hacky<ModuleName>
http://hackystat.ics.hawaii.edu/repos/hackystat/branch/somebranch/hacky<ModuleName>/src
http://hackystat.ics.hawaii.edu/repos/stackyHack/
http://hackystat.ics.hawaii.edu/repos/stackyHack/trunk
http://hackystat.ics.hawaii.edu/repos/stackyHack/trunk/stackHack
http://hackystat.ics.hawaii.edu/repos/stackyHack/trunk/stackHack/src
http://hackystat.ics.hawaii.edu/repos/stackyHack/tags/
http://hackystat.ics.hawaii.edu/repos/stackyHack/branches/
This last example is a little strange, because stackyHack doesn't belong to
a larger system. So, you could do something like this:
http://hackystat.ics.hawaii.edu/repos/stackyHack/
http://hackystat.ics.hawaii.edu/repos/stackyHack/trunk
http://hackystat.ics.hawaii.edu/repos/stackyHack/trunk/src
but to keep a standard way of creating modules it seems the first option is
better. But, I'm not sure. I know that maven's subversion repository
doesn't do that. See the maven core directory below.
Just to show that some other people have similar Subversion setups check
out: <http://svn.apache.org/viewcvs.cgi/maven/maven-1/plugins/?rev=232355>
You will see a directory structure like this:
maven-1/plugins/
maven-1/plugins/trunk
maven-1/plugins/trunk/jira
maven-1/plugins/trunk/<other plugins>
maven-1/plugins/tags/MAVEN_1_0_B10/jira
maven-1/plugins/tags/MAVEN_1_0_B10/<other plugins>
maven-1/plugins/branch/MAVEN_1_0_B10_BRANCH/jira
maven-1/plugins/branch/MAVEN_1_0_B10_BRANCH/<other plugins>
http://svn.apache.org/viewcvs.cgi/maven/maven-1/core/trunk/?rev=232355
maven-1/core/trunk/src/
maven-1/core/trunk/xdocs/
maven-1/core/trunk/...
thanks, aaron
At 07:27 PM 10/4/2005, Philip Johnson wrote:
This seems quite reasonable to me. Aaron, would this work correctly in
the case of your Subversion repository setup?
Cheers,
Philip
--On Tuesday, October 4, 2005 5:09 PM -1000 "Qin ZHANG (Cedric)"
<[EMAIL PROTECTED]> wrote:
I think I have a simple algorithm for Hackystat to have nested workspace
root support, of course, with one assumption.
A file path = workspace root + releative path.
In order to have an efficient algorithm, we need to eliminate the guess
work which workspace root should this file path use. The assumption is
always using the longest workspace root.
Suppose we have 2 workspace roots:
C:\work1
C:\work1\work2
and a file path
C:\work1\work2\work3\file.java
Then we use
C:\work1\work2 as workspace root for this file, because it is the
longest matching workspace root.
I think this restriction is very reasonable.
Cheers,
Cedric
Hongbing Kou wrote:
Hi, hackers,
Aaron called in and we discussed the problem he is facing. In our
analyses we
have module or top-level workspace based analysis. In Aaron's
configuration we
can let project Hackystat include workspaces hackystat\hackyBuild,
hackystat\hackyKernel
.. but we won't be able to know how much time we spend on individual
modules such as
hackyKernel, hackyReport, hackyStdExt etc. And there are telemetry
analyses on
module level as well.
Thanks Aaron for clarifying the misunderstandings in this issue. I
will think it over
and I'd like to know others' comments as well.
Thanks,
Hongbing
At 03:35 PM 10/4/2005, Hongbing Kou wrote:
Hi, Philip & Aaron,
I am not strongly against this change but I don't see the connection
between
nested workspace root and SVN and CSDL or Hackystat specific
module-based
directory structure.
C:\cruisecontrol-work\checkout\hackystat\hackyBuild
C:\cruisecontrol-work\checkout\hackystat\hackyKernel
C:\cruisecontrol-work\checkout\hackystat\hackyKernel\src
C:\cruisecontrol-work\checkout\hackystat\hacky...
C:\cruisecontrol-work\checkout\applicationBar
C:\cruisecontrol-work\checkout\applicationBar\src
C:\cruisecontrol-work\checkout\applicationFoo\module1
C:\cruisecontrol-work\checkout\applicationFoo\module1\src
C:\cruisecontrol-work\checkout\applicationFoo\module2
C:\cruisecontrol-work\checkout\applicationFoo\module2\src
I can understand why Aaron has directory structure like this because
we don't want to create repository
for each Hackystat module (for instance, Ikayzo uses
SVN://ikayzo.org/jupiter as repository name) To hackystat
we may use SVN://hackydev.ics.hawaii.edu/hackystat as repository name
to include all the modules.
(Obliviously, Philip & Cedric may take different strategy.)
Assume we can create nested workspace root
C:\cruisecontrol-work\checkout\hackystat\ and
C:\cruisecontrol-work\checkout the benefit is
hackyBuild, hackyKernel hacky..., and applicationFoo line up as the
top-most level workspace.
But they are different systems, seeing hackyBuild etc on the top
level do not add real values to Aaron.
I can see the side effects caused by nested workspace root. Using
Jupiter as example, we have folders like this:
C:\cvs
C:\cvs\jupiter
C:\cvs\jupiter\src
C:\cvs\jupiter\src\org
C:\cvs\jupiter\src\org\csdl ...
We can configure both C:\cvs and C:\cvs\jupiter\src as workspace
roots. Then we define a Jupiter project
in Hackystat which has workspace jupiter\. To run the project
analysis we will get nothing matched because
all files match workspace root C:\cvs\jupiter\src not C:\cvs.
Again, it is not hard to have nested workspace roots. I can implement
it but we need to think more before
we head to it. I will look back into Tim's email to think it thoroughly.
Thanks,
Hongbing
At 10:14 AM 10/4/2005, Philip Johnson wrote:
I think with the advent of subversion we're going to be forced to
deal with the nested workspace root issue.
Hongbing, how hard would it be to remove this constraint? I am
thinking that the behavior when roots are nested is to match against
the longest string. Does that make sense?
Cheers,
Philip
--On Monday, October 3, 2005 4:48 PM -1000 Aaron Akihisa Kagawa
<[EMAIL PROTECTED]> wrote:
Hey Guys,
I have a problem with workspace roots that I would like to report. I
have a directory structure that is similar to this example:
C:\cruisecontrol-work\checkout\hackystat\hackyBuild
C:\cruisecontrol-work\checkout\hackystat\hackyKernel
C:\cruisecontrol-work\checkout\hackystat\hackyKernel\src
C:\cruisecontrol-work\checkout\hackystat\hacky...
C:\cruisecontrol-work\checkout\applicationBar
C:\cruisecontrol-work\checkout\applicationBar\src
C:\cruisecontrol-work\checkout\applicationFoo\module1
C:\cruisecontrol-work\checkout\applicationFoo\module1\src
C:\cruisecontrol-work\checkout\applicationFoo\module2
C:\cruisecontrol-work\checkout\applicationFoo\module2\src
What I've done is checked out the parent directory of the modules in
Subversion to the checkout directory. This seems to be a common
Subversion practice. You should see the problem already; there are
nested Workspace Roots.
Working with Subversion and CruiseControl, this directory structure
seems to be the standard way one would do this. However, the only
reason I can't do this is Hackystat's Workspace Root nesting problem.
In CSDL, I had one top level directory (C:\java\cvs) that contained
many
cvs modules hackyBuild, clewNewsbulletin, stackMvc, stackyHack, etc...
But, that seems to be closely tied to the way our CVS repository is
organized. In an organization that uses Subversion, we are able to
organize the modules in directories. For example, in Apache's SVN
repos
you can checkout all the plugins from its top level trunk
(http://svn.apache.org/viewcvs.cgi/maven/maven-1/plugins/trunk/?rev=2
>>>>> 9349
>>>>>
>>>>> >> > 2).
So, one workspace root could be C:\java\svn\maven\plugins\ and another
could be C:\java\svn (which won't work of course).
So, I guess my question is, does it seem silly to change the directory
structure (for cruisecontrol) to get around the Hacksytat workspace
root
problem? Not to mention, if I ever get developers to use client side
sensors, I would have to ensure that they do not nest their workspace
roots.
thanks, aaron