+ try {
+ const gemlogPath = resolve(join(__dirname, '../', '.gemlog'));
+ internals.debuglog(`Reading archive from ${gemlogPath}`);
+ await internals.exec(`rsync -r ${gemlogPath}/ ${host}`);
+ }
+ catch (err) {
+ console.error('Failed to publish archive');
+ console.error(err.stderr);
+ }
+
+ internals.debuglog('Finished publishing');
+ }
+
+ /**
+ * Adds a remote
+ *
+ * @function addRemote
+ * @memberof Blog
+ * @return {Promise<undefined>} empty promise, returns no value
+ * @instance
+ */
+ async addRemote(remote) {
+ await Remote.add(this.remoteConfig, remote)
+ }
+
+ /**
+ * Removes a remote
+ *
+ * @function removeRemote
+ * @memberof Blog
+ * @return {Promise<undefined>} empty promise, returns no value
+ * @instance
+ */
+ async removeRemote() {
+ await Remote.remove(this.remoteConfig)
+ }
+
+
+ /**
+ * Pulls the posts and archive from the remote
+ *
+ * @function syncDown
+ * @memberof Blog
+ * @return {Promise<undefined>} empty promise, returns no value
+ * @instance
+ */
+ async syncDown() {
+ await Remote.syncDown(this.remoteConfig, this.blogDirectory)
+ }
+
+ /**
+ * Pushes the posts and archive to the remote
+ *
+ * @function syncUp
+ * @memberof Blog
+ * @return {Promise<undefined>} empty promise, returns no value
+ * @instance
+ */
+ async syncUp() {
+ await Remote.syncUp(this.remoteConfig, this.blogDirectory)
+ }
+
+ // Parses Gemini for each page, copies assets and generates index.
+
+ async generate() {