anchor.diff:   *
    * [delayedLibraryList] a [List<String>] mapping to paths to libraries or some
    * combinations of [Future] or [Function] values that return a [List<String>].
  + *
  + * [postBuild] A [Function] to call before content is committed. It has the
  + * signature `Future postBuild(TaskLogger logger, String tempDocPath)`. Use this
  + * if you want to modify the doc output.
    */
   Task createDartDocTask(dynamic delayedLibraryList, {
     String targetBranch: 'gh-pages',
     String packageDir: 'packages/',
     Iterable<String> excludeLibs,
  -  bool linkApi: false}) {
  +  bool linkApi: false,
  +  Func2<TaskContext, String, Future> postBuild
  +  }) {
     requireArgumentNotNull(targetBranch, 'targetBranch');
     requireArgumentNotNull(packageDir, 'packageDir');
   
  
positive.code: part of hop_tasks;
  
  // TODO: add post-build options to pretty-up the docs
  
  const _allowDirtyArg = 'allow-dirty';
  const _targetBranchArg = 'target-branch';
  
negative.code: Future<bool> compileDocs(TaskContext ctx, String targetBranch,
      dynamic delayedLibraryList, String packageDir,
      {Iterable<String> excludeLibs, bool linkApi: false}) {
    return _compileDocs(ctx, targetBranch, delayedLibraryList, packageDir,
        excludeLibs, linkApi, null);
  }
  
  Future<bool> _compileDocs(TaskContext ctx, String targetBranch,
      dynamic delayedLibraryList, String packageDir,
      Iterable<String> excludeLibs, bool linkApi, Func2<TaskContext, String, Future> postBuild) {
  
    final excludeList = excludeLibs == null ? [] : excludeLibs.toList();
  
  