anchor.diff:        return _saveDatabase();
       })
       .then((_) {
  -      completer.complete();
  +      completer.complete(true);
  +    })
  +    .catchError((e, trace) {
  +      PinUtility.handleError(e, trace);
  +      completer.completeError(e, trace);
       });
   
       return completer.future;
  
positive.code:     String postBaseDir = LibPath.join(CartConst.WWW_POST_PATH, post.uuid);
      String mdPath = LibPath.join(postBaseDir, post.uuid + '.md');
      String htmlPath = LibPath.join(postBaseDir, post.uuid + '.html');
  
      PinUtility.createDir(postBaseDir)
      .then((bool created) {
        // check & create local base dir first
        if (!created) {
          PinLogger.instance.shout('[CartModel] _uploadPost: Create dir failed: ${postBaseDir}');
          completer.complete(false);
        }
        return new Future.value(created);
      })
      .then((_) {
        // update or create local markdown & html files
  
negative.code:         PinGoogleDrive.qIsRootFiles,
          PinGoogleDrive.qIsFolder,
          "title = '${rootFolderName}'"
      ])
      .then((GoogleDriveClient.FileList files) {
        if (files.items.length <= 0) {
          // no necessary root blog folder, create it
          return _drive.drive_folder(rootFolderName);
        } else {
          return new Future.value(files.items.removeAt(0)); // shall only contains 1 item
        }
      })
      .then((GoogleDriveClient.File file) {
        completer.complete(file.id);
      })
      .catchError((e, trace) {
        PinUtility.handleError(e, trace);
        completer.completeError(e, trace);
      });
  
      return completer.future;
  