Represents the header of a VSS record.
Beispiel #1
0
        public bool ReadNextRecord(VssRecord record)
        {
            while (reader.Remaining > RecordHeader.LENGTH)
            {
                try
                {
                    var recordHeader = new RecordHeader();
                    recordHeader.Read(reader);

                    var recordReader = reader.Extract(recordHeader.Length);

                    // comment records always seem to have a zero CRC
                    if (recordHeader.Signature != CommentRecord.SIGNATURE)
                    {
                        recordHeader.CheckCrc();
                    }

                    if (recordHeader.Signature == record.Signature)
                    {
                        record.Read(recordReader, recordHeader);
                        return(true);
                    }
                }
                catch (EndOfBufferException e)
                {
                    throw new RecordTruncatedException(e.Message);
                }
            }
            return(false);
        }
Beispiel #2
0
        protected T GetRecord <T>(
            CreateRecordCallback <T> creationCallback,
            bool ignoreUnknown)
            where T : VssRecord
        {
            var recordHeader = new RecordHeader();

            recordHeader.Read(reader);

            var recordReader = reader.Extract(recordHeader.Length);

            // comment records always seem to have a zero CRC
            if (recordHeader.Signature != CommentRecord.SIGNATURE)
            {
                recordHeader.CheckCrc();
            }

            var record = creationCallback(recordHeader, recordReader);

            if (record != null)
            {
                // double-check that the object signature matches the file
                recordHeader.CheckSignature(record.Signature);
                record.Read(recordReader, recordHeader);
            }
            else if (!ignoreUnknown)
            {
                throw new UnrecognizedRecordException(recordHeader,
                                                      string.Format("Unrecognized record signature {0} in item file",
                                                                    recordHeader.Signature));
            }
            return(record);
        }
Beispiel #3
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevBranchOffset = reader.ReadInt32();
            branchFile       = reader.ReadString(12);
        }
Beispiel #4
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevBranchOffset = reader.ReadInt32();
            branchFile = reader.ReadString(12);
        }
Beispiel #5
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            kindCount = reader.ReadInt16();
            reader.Skip(2); // unknown
            kinds = new NameKind[kindCount];
            names = new string[kindCount];
            var baseOffset = reader.Offset + (kindCount * 4);

            for (int i = 0; i < kindCount; ++i)
            {
                kinds[i] = (NameKind)reader.ReadInt16();
                var nameOffset = reader.ReadInt16();
                var saveOffset = reader.Offset;
                try
                {
                    reader.Offset = baseOffset + nameOffset;
                    names[i]      = reader.ReadString(reader.Remaining);
                }
                finally
                {
                    reader.Offset = saveOffset;
                }
            }
        }
Beispiel #6
0
        private static VssRecord CreateRecord(
            RecordHeader recordHeader, BufferReader recordReader)
        {
            VssRecord record = null;

            switch (recordHeader.Signature)
            {
            case RevisionRecord.SIGNATURE:
                record = CreateRevisionRecord(recordHeader, recordReader);
                break;

            case CommentRecord.SIGNATURE:
                record = new CommentRecord();
                break;

            case CheckoutRecord.SIGNATURE:
                record = new CheckoutRecord();
                break;

            case ProjectRecord.SIGNATURE:
                record = new ProjectRecord();
                break;

            case BranchRecord.SIGNATURE:
                record = new BranchRecord();
                break;

            case DeltaRecord.SIGNATURE:
                record = new DeltaRecord();
                break;
            }
            return(record);
        }
Beispiel #7
0
 public override void Read(BufferReader reader, RecordHeader header)
 {
     base.Read(reader, header);
     
     kindCount = reader.ReadInt16();
     reader.Skip(2); // unknown
     kinds = new NameKind[kindCount];
     names = new string[kindCount];
     var baseOffset = reader.Offset + (kindCount * 4);
     for (int i = 0; i < kindCount; ++i)
     {
         kinds[i] = (NameKind)reader.ReadInt16();
         var nameOffset = reader.ReadInt16();
         var saveOffset = reader.Offset;
         try
         {
             reader.Offset = baseOffset + nameOffset;
             names[i] = reader.ReadString(reader.Remaining);
         }
         finally
         {
             reader.Offset = saveOffset;
         }
     }
 }
Beispiel #8
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevProjectOffset = reader.ReadInt32();
            projectFile       = reader.ReadString(12);
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            name     = reader.ReadName();
            physical = reader.ReadString(10);
        }
Beispiel #10
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevProjectOffset = reader.ReadInt32();
            projectFile = reader.ReadString(12);
        }
Beispiel #11
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            reader.Skip(16); // reserved; always 0
            eofOffset = reader.ReadInt32();
            // remaining reserved; always 0
        }
Beispiel #12
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            reader.Skip(16); // reserved; always 0
            EofOffset = reader.ReadInt32();
            // remaining reserved; always 0
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            name     = reader.ReadName();
            unkShort = reader.ReadInt16(); // 0 or 1
            physical = reader.ReadString(10);
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevDeltaOffset = reader.ReadInt32();
            reader.Skip(4); // reserved; always 0
            projectPath = reader.ReadString(260);
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            parentProject = reader.ReadString(260);
            parentFile = reader.ReadString(8);
            reader.Skip(4); // reserved; always 0
            totalItems = reader.ReadInt16();
            subprojects = reader.ReadInt16();
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            itemType      = (ItemType)reader.ReadInt16();
            flags         = (ProjectEntryFlags)reader.ReadInt16();
            name          = reader.ReadName();
            pinnedVersion = reader.ReadInt16();
            physical      = reader.ReadString(10);
        }
Beispiel #17
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            ParentProject = reader.ReadString(260);
            ParentFile    = reader.ReadString(8);
            reader.Skip(4); // reserved; always 0
            TotalItems  = reader.ReadInt16();
            Subprojects = reader.ReadInt16();
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            name     = reader.ReadName();
            physical = reader.ReadString(10);
            reader.Skip(2); // 0?
            archivePath = reader.ReadString(260);
            reader.Skip(4); // ?
        }
Beispiel #19
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            itemType = (ItemType)reader.ReadInt16();
            flags = (ProjectEntryFlags)reader.ReadInt16();
            name = reader.ReadName();
            pinnedVersion = reader.ReadInt16();
            physical = reader.ReadString(10);
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            projectPath      = reader.ReadString(260);
            name             = reader.ReadName();
            unpinnedRevision = reader.ReadInt16();
            pinnedRevision   = reader.ReadInt16();
            unkShort         = reader.ReadInt16(); // often seems to increment
            physical         = reader.ReadString(10);
        }
Beispiel #21
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            for (; ; )
            {
                DeltaOperation operation = new DeltaOperation();
                operation.Read(reader);
                if (operation.Command == DeltaCommand.Stop) break;
                operations.AddLast(operation);
            }
        }
Beispiel #22
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            for (; ;)
            {
                DeltaOperation operation = new DeltaOperation();
                operation.Read(reader);
                if (operation.Command == DeltaCommand.Stop)
                {
                    break;
                }
                operations.AddLast(operation);
            }
        }
Beispiel #23
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            itemType = (ItemType)reader.ReadInt16();
            revisions = reader.ReadInt16();
            name = reader.ReadName();
            firstRevision = reader.ReadInt16();
            dataExt = reader.ReadString(2);
            firstRevOffset = reader.ReadInt32();
            lastRevOffset = reader.ReadInt32();
            eofOffset = reader.ReadInt32();
            rightsOffset = reader.ReadInt32();
            reader.Skip(16); // reserved; always 0
        }
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevRevOffset      = reader.ReadInt32();
            action             = (Action)reader.ReadInt16();
            revision           = reader.ReadInt16();
            dateTime           = reader.ReadDateTime();
            user               = reader.ReadString(32);
            label              = reader.ReadString(32);
            commentOffset      = reader.ReadInt32();
            labelCommentOffset = reader.ReadInt32();
            commentLength      = reader.ReadInt16();
            labelCommentLength = reader.ReadInt16();
        }
Beispiel #25
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            itemType       = (ItemType)reader.ReadInt16();
            revisions      = reader.ReadInt16();
            name           = reader.ReadName();
            firstRevision  = reader.ReadInt16();
            dataExt        = reader.ReadString(2);
            firstRevOffset = reader.ReadInt32();
            lastRevOffset  = reader.ReadInt32();
            eofOffset      = reader.ReadInt32();
            rightsOffset   = reader.ReadInt32();
            reader.Skip(16); // reserved; always 0
        }
Beispiel #26
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            user = reader.ReadString(32);
            dateTime = reader.ReadDateTime();
            workingDir = reader.ReadString(260);
            machine = reader.ReadString(32);
            project = reader.ReadString(260);
            comment = reader.ReadString(64);
            revision = reader.ReadInt16();
            flags = reader.ReadInt16();
            exclusive = (flags & 0x40) != 0;
            prevCheckoutOffset = reader.ReadInt32();
            thisCheckoutOffset = reader.ReadInt32();
            checkouts = reader.ReadInt32();
        }
Beispiel #27
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            user               = reader.ReadString(32);
            dateTime           = reader.ReadDateTime();
            workingDir         = reader.ReadString(260);
            machine            = reader.ReadString(32);
            project            = reader.ReadString(260);
            comment            = reader.ReadString(64);
            revision           = reader.ReadInt16();
            flags              = reader.ReadInt16();
            exclusive          = (flags & 0x40) != 0;
            prevCheckoutOffset = reader.ReadInt32();
            thisCheckoutOffset = reader.ReadInt32();
            checkouts          = reader.ReadInt32();
        }
Beispiel #28
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            User               = reader.ReadString(32);
            DateTime           = reader.ReadDateTime();
            WorkingDir         = reader.ReadString(260);
            Machine            = reader.ReadString(32);
            Project            = reader.ReadString(260);
            Comment            = reader.ReadString(64);
            Revision           = reader.ReadInt16();
            Flags              = reader.ReadInt16();
            Exclusive          = (Flags & 0x40) != 0;
            PrevCheckoutOffset = reader.ReadInt32();
            ThisCheckoutOffset = reader.ReadInt32();
            Checkouts          = reader.ReadInt32();
        }
Beispiel #29
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            itemType      = (ItemType)reader.ReadInt16();
            revisions     = reader.ReadInt16();
            name          = reader.ReadName();
            firstRevision = reader.ReadInt16();
            dataExt       = reader.ReadString(2);
            if (Type.GetType("Mono.Runtime") != null)
            {
                dataExt = dataExt.ToLower();
            }
            firstRevOffset = reader.ReadInt32();
            lastRevOffset  = reader.ReadInt32();
            eofOffset      = reader.ReadInt32();
            rightsOffset   = reader.ReadInt32();
            reader.Skip(16); // reserved; always 0
        }
Beispiel #30
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            Flags      = (FileFlags)reader.ReadInt16();
            BranchFile = reader.ReadString(8);
            reader.Skip(2); // reserved; always 0
            BranchOffset        = reader.ReadInt32();
            ProjectOffset       = reader.ReadInt32();
            BranchCount         = reader.ReadInt16();
            ProjectCount        = reader.ReadInt16();
            FirstCheckoutOffset = reader.ReadInt32();
            LastCheckoutOffset  = reader.ReadInt32();
            DataCrc             = (uint)reader.ReadInt32();
            reader.Skip(8); // reserved; always 0
            LastRevDateTime      = reader.ReadDateTime();
            ModificationDateTime = reader.ReadDateTime();
            CreationDateTime     = reader.ReadDateTime();
            // remaining appears to be trash
        }
Beispiel #31
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            flags = (FileFlags)reader.ReadInt16();
            branchFile = reader.ReadString(8);
            reader.Skip(2); // reserved; always 0
            branchOffset = reader.ReadInt32();
            projectOffset = reader.ReadInt32();
            branchCount = reader.ReadInt16();
            projectCount = reader.ReadInt16();
            firstCheckoutOffset = reader.ReadInt32();
            lastCheckoutOffset = reader.ReadInt32();
            dataCrc = (uint)reader.ReadInt32();
            reader.Skip(8); // reserved; always 0
            lastRevDateTime = reader.ReadDateTime();
            modificationDateTime = reader.ReadDateTime();
            creationDateTime = reader.ReadDateTime();
            // remaining appears to be trash
        }
Beispiel #32
0
        public void ReadRecord(VssRecord record)
        {
            try
            {
                var recordHeader = new RecordHeader();
                recordHeader.Read(reader);

                var recordReader = reader.Extract(recordHeader.Length);

                // comment records always seem to have a zero CRC
                if (recordHeader.Signature != CommentRecord.SIGNATURE)
                {
                    recordHeader.CheckCrc();
                }

                recordHeader.CheckSignature(record.Signature);

                record.Read(recordReader, recordHeader);
            }
            catch (EndOfBufferException e)
            {
                throw new RecordTruncatedException(e.Message);
            }
        }
Beispiel #33
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevRevOffset = reader.ReadInt32();
            action = (Action)reader.ReadInt16();
            revision = reader.ReadInt16();
            dateTime = reader.ReadDateTime();
            user = reader.ReadString(32);
            label = reader.ReadString(32);
            commentOffset = reader.ReadInt32();
            labelCommentOffset = reader.ReadInt32();
            commentLength = reader.ReadInt16();
            labelCommentLength = reader.ReadInt16();
        }
Beispiel #34
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            name = reader.ReadName();
            oldName = reader.ReadName();
            physical = reader.ReadString(10);
        }
Beispiel #35
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            prevDeltaOffset = reader.ReadInt32();
            reader.Skip(4); // reserved; always 0
            projectPath = reader.ReadString(260);
        }
Beispiel #36
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            name = reader.ReadName();
            unkShort = reader.ReadInt16(); // 0 or 1
            physical = reader.ReadString(10);
        }
Beispiel #37
0
 public virtual void Read(BufferReader reader, RecordHeader header)
 {
     this.header = header;
 }
Beispiel #38
0
 private static VssRecord CreateRecord(
     RecordHeader recordHeader, BufferReader recordReader)
 {
     VssRecord record = null;
     switch (recordHeader.Signature)
     {
         case RevisionRecord.SIGNATURE:
             record = CreateRevisionRecord(recordHeader, recordReader);
             break;
         case CommentRecord.SIGNATURE:
             record = new CommentRecord();
             break;
         case CheckoutRecord.SIGNATURE:
             record = new CheckoutRecord();
             break;
         case ProjectRecord.SIGNATURE:
             record = new ProjectRecord();
             break;
         case BranchRecord.SIGNATURE:
             record = new BranchRecord();
             break;
         case DeltaRecord.SIGNATURE:
             record = new DeltaRecord();
             break;
     }
     return record;
 }
Beispiel #39
0
 public UnrecognizedRecordException(RecordHeader header)
 {
     this.header = header;
 }
Beispiel #40
0
 public RecordCrcException(RecordHeader header)
 {
     this.header = header;
 }
 public UnrecognizedRecordException(RecordHeader header, string message)
     : base(message)
 {
     this.header = header;
 }
 public UnrecognizedRecordException(RecordHeader header)
 {
     this.header = header;
 }
Beispiel #43
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            Comment = reader.ReadString(reader.Remaining);
        }
Beispiel #44
0
 public RecordCrcException(RecordHeader header, string message)
     : base(message)
 {
     this.Header = header;
 }
Beispiel #45
0
 public RecordCrcException(RecordHeader header)
 {
     this.Header = header;
 }
Beispiel #46
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            projectPath = reader.ReadString(260);
            name = reader.ReadName();
            unpinnedRevision = reader.ReadInt16();
            pinnedRevision = reader.ReadInt16();
            unkShort = reader.ReadInt16(); // often seems to increment
            physical = reader.ReadString(10);
        }
Beispiel #47
0
        private static RevisionRecord CreateRevisionRecord(
            RecordHeader recordHeader, BufferReader recordReader)
        {
            if (recordHeader.Signature != RevisionRecord.SIGNATURE)
            {
                return null;
            }

            RevisionRecord record;
            var action = RevisionRecord.PeekAction(recordReader);
            switch (action)
            {
                case Action.Label:
                    record = new RevisionRecord();
                    break;
                case Action.DestroyProject:
                case Action.DestroyFile:
                    record = new DestroyRevisionRecord();
                    break;
                case Action.RenameProject:
                case Action.RenameFile:
                    record = new RenameRevisionRecord();
                    break;
                case Action.MoveFrom:
                case Action.MoveTo:
                    record = new MoveRevisionRecord();
                    break;
                case Action.ShareFile:
                    record = new ShareRevisionRecord();
                    break;
                case Action.BranchFile:
                case Action.CreateBranch:
                    record = new BranchRevisionRecord();
                    break;
                case Action.EditFile:
                    record = new EditRevisionRecord();
                    break;
                case Action.ArchiveProject:
                case Action.RestoreProject:
                    record = new ArchiveRevisionRecord();
                    break;
                case Action.CreateProject:
                case Action.AddProject:
                case Action.AddFile:
                case Action.DeleteProject:
                case Action.DeleteFile:
                case Action.RecoverProject:
                case Action.RecoverFile:
                case Action.CreateFile:
                default:
                    record = new CommonRevisionRecord();
                    break;
            }
            return record;
        }
Beispiel #48
0
 public virtual void Read(BufferReader reader, RecordHeader header)
 {
     this.header = header;
 }
Beispiel #49
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            itemType = (ItemType)reader.ReadInt16();
            revisions = reader.ReadInt16();
            name = reader.ReadName();
            firstRevision = reader.ReadInt16();
            dataExt = reader.ReadString(2);
            if (Type.GetType("Mono.Runtime") != null)
            {
                dataExt = dataExt.ToLower();
            }
            firstRevOffset = reader.ReadInt32();
            lastRevOffset = reader.ReadInt32();
            eofOffset = reader.ReadInt32();
            rightsOffset = reader.ReadInt32();
            reader.Skip(16); // reserved; always 0
        }
Beispiel #50
0
        private static RevisionRecord CreateRevisionRecord(
            RecordHeader recordHeader, BufferReader recordReader)
        {
            if (recordHeader.Signature != RevisionRecord.SIGNATURE)
            {
                return(null);
            }

            RevisionRecord record;
            var            action = RevisionRecord.PeekAction(recordReader);

            switch (action)
            {
            case Action.Label:
                record = new RevisionRecord();
                break;

            case Action.DestroyProject:
            case Action.DestroyFile:
                record = new DestroyRevisionRecord();
                break;

            case Action.RenameProject:
            case Action.RenameFile:
                record = new RenameRevisionRecord();
                break;

            case Action.MoveFrom:
            case Action.MoveTo:
                record = new MoveRevisionRecord();
                break;

            case Action.ShareFile:
                record = new ShareRevisionRecord();
                break;

            case Action.BranchFile:
            case Action.CreateBranch:
                record = new BranchRevisionRecord();
                break;

            case Action.EditFile:
                record = new EditRevisionRecord();
                break;

            case Action.ArchiveProject:
            case Action.RestoreProject:
            case Action.RestoreFile:
                record = new ArchiveRevisionRecord();
                break;

            case Action.CreateProject:
            case Action.AddProject:
            case Action.AddFile:
            case Action.DeleteProject:
            case Action.DeleteFile:
            case Action.RecoverProject:
            case Action.RecoverFile:
            case Action.CreateFile:
            default:
                record = new CommonRevisionRecord();
                break;
            }
            return(record);
        }
Beispiel #51
0
 public UnrecognizedRecordException(RecordHeader header, string message)
     : base(message)
 {
     this.header = header;
 }
Beispiel #52
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            name = reader.ReadName();
            physical = reader.ReadString(10);
            reader.Skip(2); // 0?
            archivePath = reader.ReadString(260);
            reader.Skip(4); // ?
        }
Beispiel #53
0
        public override void Read(BufferReader reader, RecordHeader header)
        {
            base.Read(reader, header);

            comment = reader.ReadString(reader.Remaining);
        }
Beispiel #54
0
 public RecordCrcException(RecordHeader header, string message)
     : base(message)
 {
     this.header = header;
 }