Merge
2019-06-09, John Bailey
--- a/Dockerfile Wed Jun 05 00:19:04 2019 -0400
+++ b/Dockerfile Sun Jun 09 14:01:46 2019 -0400
@@ -8,6 +8,8 @@
apt-get install -y hugo && \
rm -rf /var/lib/apt/lists
RUN hugo -s /nest/hugo -d /nest/public
--- a/convey.yml Wed Jun 05 00:19:04 2019 -0400
+++ b/convey.yml Sun Jun 09 14:01:46 2019 -0400
@@ -13,7 +13,13 @@
tag: ${REGISTRY}/${REPO}:${TAG}
+ - BUILD_DATE=${RUN_TIME} + - BUILD_DATE=${RUN_TIME} image: ${REGISTRY}/${REPO}:${TAG}
--- a/hugo/content/_index.es.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/_index.es.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,5 +1,7 @@
+date: 2019-01-15T05:58:46.000Z +lastmod: 2019-01-21T22:34:09.000Z --- a/hugo/content/building/2.x.y.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/building/2.x.y.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,7 +1,8 @@
-data: 2019-02-03T19:15:00-05:00
+date: 2019-01-11T03:13:47.000Z +lastmod: 2019-02-04T00:21:57.000Z --- a/hugo/content/building/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/building/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,7 +1,8 @@
-date: 2019-01-10T22:12:03-06:00
+date: 2019-01-11T05:44:25.000Z +lastmod: 2019-01-21T22:34:09.000Z --- a/hugo/content/contributing/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/contributing/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,10 @@
-date: 2019-02-03T19:49:30-05:00
+date: 2017-09-19T02:00:55.000Z +lastmod: 2019-03-17T23:05:38.000Z Pidgin is a huge project with a ton of things to be done, even if you're not a coder. Below is a short list of things you can do to help get involved!!
--- a/hugo/content/contributing/mercurial.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/contributing/mercurial.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
-title: "Using Mercurial"
-date: 2019-02-01T03:51:53+00:00
- "developer.pidgin.im/wiki/UsingPidginMercurial",
+date: 2019-02-01T05:09:48.000Z + - developer.pidgin.im/wiki/UsingPidginMercurial +lastmod: 2019-02-01T05:09:48.000Z --- a/hugo/content/development/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,6 +1,8 @@
-date: 2019-01-11T04:05:09+00:00
+date: 2019-01-15T03:38:25.000Z +lastmod: 2019-01-21T22:34:09.000Z --- a/hugo/content/development/design-guidelines.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/design-guidelines.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
-title: "Design Guidelines"
-date: 2019-02-03T20:47:20-05:00
-anchor: "design-guidelines"
- "developer.pidgin.im/wiki/DesignGuidelines",
+title: Design Guidelines +date: 2017-09-19T03:27:00.000Z +anchor: design-guidelines + - developer.pidgin.im/wiki/DesignGuidelines +lastmod: 2019-03-17T23:05:38.000Z --- a/hugo/content/development/faq.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/faq.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
-date: 2019-02-03T20:57:00-05:00
-anchor: "development-faq"
- "developer.pidgin.im/wiki/Development%20FAQ",
+date: 2017-09-19T03:57:30.000Z + - developer.pidgin.im/wiki/Development%20FAQ +lastmod: 2019-03-17T23:05:38.000Z The following is a list of Frequently Asked Questions (FAQs), with answers, and notes related to development using LibPurple.
--- a/hugo/content/development/version-control.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/development/version-control.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
-title: "Version Control"
-date: 2019-02-03T21:08:00-05:00
- "developer.pidgin.im/wiki/UsingPidginMercurial",
+date: 2019-02-01T05:09:48.000Z + - developer.pidgin.im/wiki/UsingPidginMercurial +lastmod: 2019-02-04T02:09:43.000Z All of the source code relating to Pidgin and its libraries is hosted on
--- a/hugo/content/drafts/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,6 +1,8 @@
+date: 2019-01-14T18:49:58.000Z +lastmod: 2019-01-21T22:34:09.000Z **THIS PAGE SHOULD NOT BE IN PRODUCTION**
\ No newline at end of file
--- a/hugo/content/drafts/download.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/download.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,18 +1,20 @@
-date: 2019-01-16T05:42:50Z
+date: 2019-01-16T20:14:59.000Z
- "pidgin.im/download/windows/",
- "pidgin.im/download/linux/",
- "pidgin.im/download/mac/",
- "pidgin.im/download/source/",
+ - pidgin.im/download/windows/ + - pidgin.im/download/linux/ + - pidgin.im/download/mac/ + - pidgin.im/download/source/ +lastmod: 2019-05-29T22:53:40.000Z <!-- Never pipe curl sudo bash -->
[![](/images/download.png)](http://sourceforge.net/projects/pidgin/files/Pidgin/2.13.0/pidgin-2.13.0.exe/download?accel_key=62%3Aa4c0d8b6-1952-11e9-abae-525400fc71c5&click_id=a4c154bc-1952-11e9-abae-525400fc71c5&source=accel)
@@ -34,6 +36,12 @@
sudo apt-get install pidgin
For a native Mac OS X experience we recommend [Adium](http://adium.im/), which uses libpurple (the core of Pidgin) for much of its protocol support.
@@ -51,3 +59,24 @@
If you want to **use** Pidgin, you should either download and use our Windows installer or look for pre-built packages from your operating system distribution.
If you are looking to **modify** Pidgin, you may want to look at our [instructions for checking out the code from our repository](https://developer.pidgin.im/wiki/UsingPidginMercurial).
+We do not provide pre-built packages for Linux and Unix distributions. We recommend installing Pidgin using your operating system's standard package management tool. +If your operating system doesn't provide a pre-built package, or if their pre-built package is out of date and you want to upgrade, then you can try [building from source](#Source). +sudo apt-get install finch \ No newline at end of file
--- a/hugo/content/drafts/release-process.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/release-process.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,10 @@
-title: "Release Process"
+date: 2019-01-14T18:49:58.000Z
- "developer.pidgin.im/wiki/ReleaseProcess",
+ - developer.pidgin.im/wiki/ReleaseProcess +lastmod: 2019-03-17T23:05:38.000Z The release process for Pidgin is kind of tedious but is described in great detail below.
--- a/hugo/content/drafts/voice-and-video-API.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/voice-and-video-API.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,9 @@
-title: "Voice and Video API"
-date: 2019-03-16T20:15:02Z
- "developer.pidgin.im/wiki/vvAPI",
+title: Voice and Video API +date: 2019-03-17T23:11:17.000Z + - developer.pidgin.im/wiki/vvAPI +lastmod: 2019-03-17T23:11:17.000Z For functions that could be per conference, session, participant, or stream, they would have a session and a participant parameter. A NULL for either of these would be a wildcard.
--- a/hugo/content/drafts/voice-and-video.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/drafts/voice-and-video.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,9 @@
-title: "Voice and Video"
-date: 2019-03-16T16:58:31Z
- "developer.pidgin.im/wiki/vv",
+date: 2019-03-17T23:11:17.000Z + - developer.pidgin.im/wiki/vv +lastmod: 2019-03-17T23:11:17.000Z --- a/hugo/content/gsoc/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/gsoc/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,17 +1,17 @@
-title: "Google Summer of Code"
-date: 2019-01-10T22:32:00-06:00
- "developer.pidgin.im/wiki/SummerOfCode2007",
- "developer.pidgin.im/wiki/SummerOfCode2008",
- "developer.pidgin.im/wiki/SummerOfCode2009",
- "developer.pidgin.im/wiki/SummerOfCode2010",
- "developer.pidgin.im/wiki/SummerOfCode2011",
- "developer.pidgin.im/wiki/SummerOfCode2012",
- "developer.pidgin.im/wiki/SummerOfCode2013",
- "developer.pidgin.im/wiki/SummerOfCode2015",
+title: Google Summer of Code +date: 2019-01-15T03:38:25.000Z + - developer.pidgin.im/wiki/SummerOfCode2007 + - developer.pidgin.im/wiki/SummerOfCode2008 + - developer.pidgin.im/wiki/SummerOfCode2009 + - developer.pidgin.im/wiki/SummerOfCode2010 + - developer.pidgin.im/wiki/SummerOfCode2011 + - developer.pidgin.im/wiki/SummerOfCode2012 + - developer.pidgin.im/wiki/SummerOfCode2013 + - developer.pidgin.im/wiki/SummerOfCode2015 +lastmod: 2019-01-21T22:34:09.000Z Pidgin has been involved in the
--- a/hugo/content/gsoc/ideas.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/gsoc/ideas.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
-date: 2019-01-10T22:32:00-06:00
- "https://developer.pidgin.im/wiki/SoCIdeas",
+date: 2019-01-11T03:13:47.000Z + - 'https://developer.pidgin.im/wiki/SoCIdeas' +lastmod: 2019-03-17T23:05:38.000Z These ideas are starting points for Google Summer of Code projects that the Pidgin, Finch, and libpurple community has agreed are generally desirable and high impact. For smaller projects, community-submitted ideas, or projects that for some reason we are not sure are in scope for SoC, please see [wiki:SoCAndBountyIdeas]. (You can submit SoC proposals with those ideas, or your own ideas, as well, you just have to convince us they're suitable!)
--- a/hugo/content/gsoc/instructions.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/gsoc/instructions.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,10 +1,10 @@
-title: "GSoC Instructions"
-date: 2019-01-10T22:32:00-06:00
-anchor: "gsoc-instructions"
- "developer.pidgin.im/wiki/SoCApplicationInstructions"
+title: GSoC Instructions +date: 2019-01-15T04:24:21.000Z +anchor: gsoc-instructions + - developer.pidgin.im/wiki/SoCApplicationInstructions +lastmod: 2019-03-17T23:05:38.000Z Our project has historically allowed a wide variety of applications on topics both solicited and unsolicited, and we do not intend to change this policy. However, every application must meet some criteria, which we have set out here, to be considered.
--- a/hugo/content/i18n/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/i18n/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,4 +1,6 @@
-title: "Internationalization"
+title: Internationalization +date: 2019-01-15T05:58:46.000Z +lastmod: 2019-01-21T22:34:09.000Z --- a/hugo/content/i18n/tips.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/i18n/tips.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,9 +1,10 @@
- "developer.pidgin.im/wiki/TipsForTranslators",
+date: 2019-01-15T05:58:46.000Z + - developer.pidgin.im/wiki/TipsForTranslators +lastmod: 2019-03-17T23:05:38.000Z ### Can I help translate?
--- a/hugo/content/plugins/_index.md Wed Jun 05 00:19:04 2019 -0400
+++ b/hugo/content/plugins/_index.md Sun Jun 09 14:01:46 2019 -0400
@@ -1,7 +1,8 @@
-date: 2019-01-10T22:29:01-06:00
+date: 2019-01-11T05:44:25.000Z +lastmod: 2019-04-17T01:38:41.000Z --- a/package-lock.json Wed Jun 05 00:19:04 2019 -0400
+++ b/package-lock.json Sun Jun 09 14:01:46 2019 -0400
@@ -850,9 +850,9 @@
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.1.tgz",
- "integrity": "sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", --- a/package.json Wed Jun 05 00:19:04 2019 -0400
+++ b/package.json Sun Jun 09 14:01:46 2019 -0400
@@ -2,6 +2,7 @@
--- a/tools/pre-prod.js Wed Jun 05 00:19:04 2019 -0400
+++ b/tools/pre-prod.js Sun Jun 09 14:01:46 2019 -0400
@@ -1,6 +1,8 @@
* Runs after Hugo has built the site
* * Cleans, Minifies and Optimises hugo output
+ * USAGE: node tools/pre-prod [path to hugo output] /*****************************************************************************
@@ -17,7 +19,9 @@
*****************************************************************************/
-const target = path.join(__dirname, '../public/')
+ // looks for a path in first arg or default to `./public/` + path.join(__dirname, `..`, process.argv[2] || 'public') + path.sep const xmlRegex = /\.(html|xml)$/
@@ -45,7 +49,7 @@
*****************************************************************************/
- * Format XML and HTML, removing hugo template artefacts,
+ * Format XML and HTML, removing hugo template artefacts, --- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/update-lastmod.js Sun Jun 09 14:01:46 2019 -0400
@@ -0,0 +1,160 @@
+ * For each content page: + * * reads last change date form mercurial + * * writes last edite date to front matter +/***************************************************************************** + *****************************************************************************/ +const fs = require('fs').promises +const path = require('path') +const { spawn } = require('child_process') +const front = require('front-matter') +const yaml = require('js-yaml') +/***************************************************************************** + *****************************************************************************/ +const hgLogArgs = ['log', '--follow', '--pager', 'never', '--color', 'never'] +const yamlDumpSettings = { indent: 2 } +/***************************************************************************** + *****************************************************************************/ +getMdPaths(path.join(__dirname, '../hugo/content/')).then(paths => + paths.map(async function(file) { + const [commits, { attributes, body }] = await Promise.all([ + const lastmod = commits[0].date + const date = commits[commits.length - 1].date + const newFrontString = yaml + .dump({ ...attributes, lastmod, date }, yamlDumpSettings) + const output = `---\n${newFrontString}\n---\n\n${body}` + await fs.writeFile(file, output) + console.log(`Updated: ${file}`) +/***************************************************************************** + *****************************************************************************/ + * Get an orderd array commits for a file + * @param {string} file the file path +function getCommits(file) { + return new Promise((resolve, reject) => { + const log = spawn('hg', [...hgLogArgs, file]) + log.stdout.on('data', data => { + log.on('close', code => { + new Error(`Unexpected return code from hg log ${code}`) + resolve(commits.sort((a, b) => a.date - b.date).reverse()) + * Converts the raw commit data from log into a a commit object + * @param {string} commitString raw commit from hg output +function parseCommit(commitString) { + const [, key, value] = /(\w+):\s+(.+)/.exec(line) + commit[key].push(value) + commit[key] = new Date(value) + * Filters out commits that contain an automation flag +const filterCommits = ({ summary }) => + !/^\[(Automated|Auto|Minor)\]/i.test(summary) +/***************************************************************************** + *****************************************************************************/ + * reads and parses a markdown file for frontmatter + * @param {string} file path to markdown file +async function getFrontMatter(file) { + return fs.readFile(file, 'utf8').then(contents => front(contents)) + * creates a list of all markdown files in a directory + * @param {string} directory directory to search for markdown files +async function getMdPaths(directory) { + let items = (await fs.readdir(directory)).map(i => path.join(directory, i)) + const item = items.pop() + const stat = await fs.stat(item) + if (stat.isDirectory()) { + const nueveau = (await fs.readdir(item)).map(i => + } else if (stat.isFile() && mdRegex.test(item)) {