anchor.diff:          if (!c.future.isComplete) {
             getRevision().then((revision) {
               REVISION = revision;
  -            getUserName().then((username) {
  -              USERNAME = username;
  -              if (username != '') username = "_$username";
  -              var revisionString = "";
  -              if (revision != 0) revisionString = "_r$revision";
  -              c.complete("$MAJOR.$MINOR.$BUILD.$PATCH$revisionString$username");
  -              return;
  -            });
  +            USERNAME = getUserName();
  +            var userNameString = "";
  +            if (USERNAME != '') userNameString = "_$USERNAME";
  +            var revisionString = "";
  +            if (revision != 0) revisionString = "_r$revision";
  +            c.complete(
  +                "$MAJOR.$MINOR.$BUILD.$PATCH$revisionString$userNameString");
  +            return;
             });
           }
         };
       });
       return c.future;
  +  }
  +
  +  String getExecutableSuffix() {
  +    if (Platform.operatingSystem == 'windows') {
  +      return '.exe';
  +    }
  +    return '';
     }
   
     Future<int> getRevision() {
  
positive.code:     }
      var isSvn = repositoryType == RepositoryType.SVN;
      var command = isSvn ? "svn" : "git";
      var arguments = isSvn ? ["info"] : ["svn", "info"];
      return Process.run(command, arguments).transform((result) {
        if (result.exitCode != 0) {
  
negative.code:     });
    }
  
    String getUserName() {
      // TODO(ricow): Don't add this on the buildbot.
      if (!Platform.environment.containsKey("USER")) return "";
      return Platform.environment["USER"];
    }
  
    RepositoryType get repositoryType {
  