Commits

Jens Alfke committed b973886

Update parents of uncommitted revision more carefully to avoid assertion failures. (Speculatively fixes #147.)

Comments (0)

Files changed (1)

Source/HgRepository.m

     else
         AssertEq([nuRevisions lastObject],_uncommittedRevision);
     
-    // Update the list of revisions, the current revision, and the uncommitted revision's parents:
+    // Now update my public properties ... very carefully.
     [self willChangeValueForKey: @"currentRevision"];
     [self willChangeValueForKey: @"revisions"];
     _currentRevision = curRevNo>=0 ?[nuRevisions objectAtIndex: curRevNo] :nil;
+    
+    // Update parents of the uncommitted revision.
+    // Needs to be done in this order to avoid triggering assertion failures. (See issue #147)
+    _uncommittedRevision.parent2 = nil;
     _uncommittedRevision.parent = _currentRevision;
-    _uncommittedRevision.parent2 = curParent2>=0 ?[nuRevisions objectAtIndex: curParent2] :nil;
+    if (curParent2>=0)
+        _uncommittedRevision.parent2 = [nuRevisions objectAtIndex: curParent2];
+    
     _headRevisions = nil;  // invalidate cache
     if (!$equal(nuRevisions,self.revisions))
         self.revisions = nuRevisions;
     [self didChangeValueForKey: @"revisions"];
     [self didChangeValueForKey: @"currentRevision"];
+    // ...done updating public properties.
 
     [self _checkWorkingTree: &error];
     return YES;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.