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; }