anchor.diff:      yamlFileData.replaceFirst(yamlPattern(currentVersion),
         yamlPattern(nextVersion));
     var newChangelogData =
  -    changelogData.replaceFirst(changelogPattern('Upcoming Version'),
  +    changelogData.replaceFirst(changelogPattern('unreleased'),
         changelogPattern(nextVersion));
   
     new File('package.json').writeAsStringSync(newPackageFileData);
  
positive.code: part of atom.grind;
  
  // import 'dart:convert';
  // import 'dart:io';
  
  // import 'package:grinder/grinder.dart';
  // import 'package:pub_semver/pub_semver.dart';
  
  @Task('Publish a new version of dartlang')
  publish() {
    throw 'Sorry -- grinder does not yet support specifying options on the command line!';
    // TODO: command line parsing (major, minor, patch) version update
    // Comment out the if statements while developing this task.
    var diffResult = Process.runSync("git", ["diff", "--shortstat"]);
    if (diffResult.stdout.toString().isNotEmpty)
  
negative.code:   var packageData = JSON.decode(packageFileData);
  
    var currentVersion = new Version.parse(packageData['version']);
    var nextVersion;
    if (publishType == 'major') nextVersion = currentVersion.nextMajor;
    if (publishType == 'minor') nextVersion = currentVersion.nextMinor;
    if (publishType == 'patch') nextVersion = currentVersion.nextPatch;
  
    // We do pattern matches to preserve the formatting in the existing files.
    var jsonPattern         = (version) => '"version": "${version}"';
    var yamlPattern         = (version) => 'version: ${version}';
    var changelogPattern    = (version) => "# ${version}";
  
    if (!changelogData.contains('## unreleased')) {
      fail("Please add a '## unreleased' section to the changelog.");
    }
  
    var newPackageFileData =
      packageFileData.replaceFirst(jsonPattern(currentVersion),
  