http://bugs.grommit.com/show_bug.cgi?id=363

           Summary: utility to compare TeamWare and Mercurial trees
           Product: SCM Migration
           Version: unspecified
          Platform: All
        OS/Version: Solaris 11/Nevada
            Status: NEW
          Severity: enhancement
          Priority: P4
         Component: other
        AssignedTo: scm-migration-dev at opensolaris.org
        ReportedBy: mike.kupfer at sun.com


It may be useful to have a utility for comparing a TeamWare source
tree with a Mercurial source tree.  I've needed this once so far, to
verify repairs after a problem with the bridge.

The reason this is non-trivial is that the TeamWare tree has expanded
SCCS keywords, and the Mercurial tree has unexpanded keywords.  So a
straight "diff -ur" will have too many false positives to be useful.

Here's what I did to verify correctness of repairs after that bridge
failure.  Hopefully it can be scripted.

1. Generate a list of files for each workspace, using something like
   "find usr deleted_files -type f -print".  (That's the Teamware
   workspace, the open Mercurial repository, and the closed Mercurial
   repository.)  Strip the .hg tree and SCCS files from the lists.
   Merge the two Mercurial lists into a single list with usr/src and
   usr/closed.

2. Patch up the list of deleted closed files.  This is the step that
   will take some thought on how to do correctly.  All of the deleted
   closed files are in the closed Mercurial repository, under
   deleted_files.  But in the Teamware workspace, some are under
   deleted_files/usr/src and some are under deleted_files/usr/closed.
   (The ones under deleted_files/usr/src are presumably all
   pre-launch.)  We don't want that to introduce false positives, but
   we do want to detect (for example) a file that got deleted in
   TeamWare but is still under usr in Mercurial.

3. Sort each list and compare them.  Flag any files that appear in
   only one list.

4. Compare the contents of files that appear in both lists.  I
   combined the two lists, ran the result through "sort -u", then fed
   that to a hacky script that ignored files that appeared in only one
   workspace.  A cleaner approach might be to use /usr/xpg4/bin/grep
   with -F and -f.  Or step 3 could produce a list of common files at
   the same time it's looking for files to flag.

   The common files can be compared using sccskdiff, which is
   something Bill Sommerfeld kindly provided and which I've attached.

   sccskdiff assumes that a file has unexpanded keywords if it's
   writable.  This can fail if the Mercurial tree is not writable by
   you (e.g., read-only NFS mount, or the tree is owned by a different
   user).  So we might want to change sccskdiff to tell it which file
   has expanded keywords and which doesn't.


-- 
Configure bugmail: http://bugs.grommit.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

Reply via email to