anchor.diff:      return walkLevel(nodes);
     }
   
  -  _nonFastForward() {
  +  // TODO (grv) : Support non fast forward push.
  +  void _nonFastForwardPush() {
  +    throw new GitException(GitErrorConstants.GIT_PUSH_NON_FAST_FORWARD);
       //TODO throw some error.
     }
   
  -  Future<CommitObject> _checkRemoteHead(GitRef remoteRef) {
  +  Future _checkRemoteHead(GitRef remoteRef) {
       // Check if the remote head exists in the local repo.
       if (remoteRef.sha != HEAD_MASTER_SHA) {
  -      return retrieveObject(remoteRef.sha, ObjectTypes.COMMIT_STR).then(
  -          (obj) => obj,
  +      return retrieveObject(remoteRef.sha, ObjectTypes.COMMIT_STR).then((r) => r,
           onError: (e) {
  -          //TODO support non-fast forward.
  -          _nonFastForward();
  -          throw(e);
  +          _nonFastForwardPush();
         });
       }
       return new Future.value();
  
positive.code:         return completer.future;
  
        }, onError: (e) {
          _nonFastForward();
        });
      }
      return getNextCommit(sha);
  
negative.code: 
  import 'config.dart';
  import 'constants.dart';
  import 'exception.dart';
  import 'fast_sha.dart';
  import 'file_operations.dart';
  import 'commands/index.dart';
  