This method's naming is pretty confusing, since you don't have to update the "entire" index at all. It's also weird that the enumeration block is optional, since that's very unconventional in Cocoa.

How about this:

```objc
- (BOOL)updatePathspecs:(NSArray *)pathspecs error:(NSError **)error passingTest:(BOOL (^)(NSString *matchedPathspec, NSString *path, BOOL *stop))block;
```

If no test is necessary, you can just pass in a block that always returns `YES`.

Other changes include:

 1. Moved the `error` parameter before the block. Since block arguments can span multiple lines, it's pretty unwieldy to pass any other arguments _after_ them.
 1. Took influence from `-[NSArray objectsPassingTest:]`. Defining return values around 0 is a very C-like thing to do, and we already have a pattern for aborting in Cocoa: the `BOOL *stop` parameter.
 1. Reversed the arguments to the block. Typically, the enumerated object (here, we're enumerating the pathspecs) is the _first_ argument, and any additional data follows.