--- /dev/null
+const { exec } = require('child_process');
+const { debuglog, promisify } = require('util');
+
+const internals = {
+ // Promisified functions
+ exec: promisify(exec),
+
+ debuglog: debuglog('blog'),
+};
+
+module.exports = {
+ canHandle() {
+ // For the future: actually check if it's a valid git url
+ return true;
+ },
+
+ async syncUp(remote, blogDirectory) {
+ await internals.exec(`cd ${blogDirectory} && git init`);
+ await internals.exec(`cd ${blogDirectory} && git add .`);
+ await internals.exec(`cd ${blogDirectory} && git commit --allow-empty -m blog-sync-up-${Date.now()}`);
+ await internals.exec(`cd ${blogDirectory} && git push ${remote} main --force`);
+ },
+
+ async syncDown(remote, blogDirectory) {
+ await internals.exec(`cd ${blogDirectory} && git init`);
+ await internals.exec(`cd ${blogDirectory} && git checkout .`);
+ await internals.exec(`cd ${blogDirectory} && git clean . -f`);
+ await internals.exec(`cd ${blogDirectory} && git pull ${remote} main`);
+ }
+}