public void Commit()
        {
            if(transactionState != HgTransactionState.Active) return;

            log.Info("committing transaction");

            foreach(var transactionalAction in transactionalActions)
            {
                transactionalAction.Commit(); 
            } // foreach

            hgJournal.Commit();

            transactionState = HgTransactionState.Commit;
        }
        internal HgTransaction(HgStore hgStore, HgJournal hgJournal)
        {
            // TODO: 
            /*         
            # abort here if the journal already exists
            if os.path.exists(self.sjoin("journal")):
                raise error.RepoError(
                    _("abandoned transaction found - run hg recover"))
            */
            
            this.hgStore = hgStore;
            this.hgJournal = hgJournal;

            log.Info("starting transaction");

            transactionState = HgTransactionState.Active;
        }
        public void Rollback()
        {
            if(transactionState != HgTransactionState.Active) return;

            log.Info("rolling back transaction");

            foreach(var transactionalAction in transactionalActions)
            {
                transactionalAction.Rollback();
            } // foreach

            foreach(var entry in hgJournal.Entries)
            {
                var filePath = hgStore.ResolveFilePath(entry.Name);

                log.Info("rolling back '{0}'", filePath);

                if(entry.Length == 0)
                {
                    if(File.Exists(filePath))
                        File.Delete(filePath);
                } // if
                else
                {
                    using(var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Write, FileShare.None))
                        fileStream.SetLength(entry.Length);
                } // else
            } // foreach

            hgJournal.Rollback();

            transactionState = HgTransactionState.Rollback;
        }