Invalid change ordering?

Stephen Lee stephen.lee at hexagonmetrology.com
Wed Feb 7 05:28:40 EST 2007


Scott Nowell wrote:
> <<< Started new transaction, based on original revision 2750
>      * adding path : labels/Ready for MS01 Validation Run ... done.
>      * adding path : labels/Ready for MS01 Validation Run/UC00 ... done.
>      * adding path : labels/Ready for MS01 Validation Run/UC00/Source 
> ... done.
>      * adding path : labels/Ready for MS01 Validation 
> Run/UC00/Source/MicroCOS .
> .. done.
>
> <SNIP about 100 lines from same rev 2750 >
>
>      * adding path : labels/Ready for MS01 Validation 
> Run/MS01/Source/UnitTests/
> Test/regress.bat ..COPIED... done.
>      * adding path : labels/Ready for MS01 Validation 
> Run/MS01/Source/UnitTests/
> Test/Script.bat ..COPIED... done.
>      * adding path : labels/Ready for MS01 Validation 
> Run/MS01/Source/UnitTests/
> Test/setenv.bat ...COPIED... done.
> svnadmin: Invalid change ordering: new node revision ID without delete

Check within the about 100 lines you snipped for two consecutive lines 
that are the same.

This looks like it could be the same as a problem I reported to the list 
and toby filed as a defect:
http://www.pumacode.org/projects/vss2svn/ticket/42

Also, you (and anyone else with the same problem) may be interested in 
the "TrimDupes" workaround I used for this problem (attached). You would 
need a working C compiler, and replace the TrimDupe(...) calls from 
main() with the duplicates that you get, in the order they are imported.

When I said my database imported almost perfectly on the most recent 
dummy run, this was AFTER this filter which I had just automatically 
done after the conversion.

Now I've got perl running, I should probably look to rewrite this or fix 
the underlying bug in vss2svn - the whole thing could probably reduce to 
a single non-database-specific regexp.

-- 
Stephen Lee <Stephen.Lee at hexagonmetrology.com>
Software Engineer, Vision Group - Pro-Measure Leader
Wilcox Associates Inc. (U.K.)


-------------- next part --------------
#include <stdio.h>
#include <fcntl.h>
#include <io.h>

void TrimDupe(const char *Trigger)
{
  const char *TrigPtr=Trigger;
  char c;
  while(fread(&c,1,1,stdin))
  {
    fwrite(&c,1,1,stdout);
    if(!TrigPtr)
      ;
    else if(c!=*TrigPtr++)
      TrigPtr=Trigger;
    else if(!*TrigPtr)
    {
      fprintf(stderr,"MATCH FOUND: %s\n",Trigger);
      // found the first trigger - look for 2nd, without using putchar
      while(fread(&c,1,1,stdin))
      {
        if(c!=*TrigPtr++)
          TrigPtr=Trigger;
        else if(!*TrigPtr)
        {
          fprintf(stderr,"DUPE FOUND... continuing\n");
          break;
        }
      }
      break;
    }
  }
}

int main(void)
{
  _setmode( _fileno( stdin ), _O_BINARY );
  _setmode( _fileno( stdout ), _O_BINARY );

  TrimDupe("labels/PRE_UNITS/Plugins/Sdmxp/MotorRequest.h");
  TrimDupe("labels/Release 2.31/ProComposer.NewStdDB");
  TrimDupe(NULL);

  return 0;
}


More information about the vss2svn-users mailing list