This pull request closes #2551: making sure that the keywords don't already appear in the example's title. I also added validation that checks that they are at least two characters long, as this is enforced by the homepage when type your search.
120 lines
3.5 KiB
JavaScript
120 lines
3.5 KiB
JavaScript
'use strict'
|
|
|
|
const LegacyService = require('../legacy-service')
|
|
const {
|
|
makeBadgeData: getBadgeData,
|
|
makeLabel: getLabel,
|
|
} = require('../../lib/badge-data')
|
|
const { makeLogo: getLogo } = require('../../lib/logos')
|
|
const { documentation } = require('./github-helpers')
|
|
|
|
// This legacy service should be rewritten to use e.g. BaseJsonService.
|
|
//
|
|
// Tips for rewriting:
|
|
// https://github.com/badges/shields/blob/master/doc/rewriting-services.md
|
|
//
|
|
// Do not base new services on this code.
|
|
module.exports = class GithubCommitsSince extends LegacyService {
|
|
static get category() {
|
|
return 'activity'
|
|
}
|
|
|
|
static get route() {
|
|
return {
|
|
base: 'github/commits-since',
|
|
pattern: ':user/:repo/:version',
|
|
}
|
|
}
|
|
|
|
static get examples() {
|
|
return [
|
|
{
|
|
title: 'GitHub commits',
|
|
namedParams: {
|
|
user: 'SubtitleEdit',
|
|
repo: 'subtitleedit',
|
|
version: '3.4.7',
|
|
},
|
|
staticPreview: {
|
|
label: 'commits since 3.4.7',
|
|
message: '4225',
|
|
color: 'blue',
|
|
},
|
|
documentation,
|
|
},
|
|
{
|
|
title: 'GitHub commits (since latest release)',
|
|
namedParams: {
|
|
user: 'SubtitleEdit',
|
|
repo: 'subtitleedit',
|
|
version: 'latest',
|
|
},
|
|
staticPreview: {
|
|
label: 'commits since 3.5.7',
|
|
message: '157',
|
|
color: 'blue',
|
|
},
|
|
documentation,
|
|
},
|
|
]
|
|
}
|
|
|
|
static registerLegacyRouteHandler({ camp, cache, githubApiProvider }) {
|
|
camp.route(
|
|
/^\/github\/commits-since\/([^/]+)\/([^/]+)\/([^/]+)\.(svg|png|gif|jpg|json)$/,
|
|
cache((data, match, sendBadge, request) => {
|
|
const user = match[1] // eg, SubtitleEdit
|
|
const repo = match[2] // eg, subtitleedit
|
|
const version = match[3] // eg, 3.4.7 or latest
|
|
const format = match[4]
|
|
const badgeData = getBadgeData(`commits since ${version}`, data)
|
|
|
|
function setCommitsSinceBadge(user, repo, version) {
|
|
const apiUrl = `/repos/${user}/${repo}/compare/${version}...master`
|
|
if (badgeData.template === 'social') {
|
|
badgeData.logo = getLogo('github', data)
|
|
}
|
|
githubApiProvider.request(request, apiUrl, {}, (err, res, buffer) => {
|
|
if (err != null) {
|
|
badgeData.text[1] = 'inaccessible'
|
|
sendBadge(format, badgeData)
|
|
return
|
|
}
|
|
|
|
try {
|
|
const result = JSON.parse(buffer)
|
|
badgeData.text[1] = result.ahead_by
|
|
badgeData.colorscheme = 'blue'
|
|
badgeData.text[0] = getLabel(`commits since ${version}`, data)
|
|
sendBadge(format, badgeData)
|
|
} catch (e) {
|
|
badgeData.text[1] = 'invalid'
|
|
sendBadge(format, badgeData)
|
|
}
|
|
})
|
|
}
|
|
|
|
if (version === 'latest') {
|
|
const url = `/repos/${user}/${repo}/releases/latest`
|
|
githubApiProvider.request(request, url, {}, (err, res, buffer) => {
|
|
if (err != null) {
|
|
badgeData.text[1] = 'inaccessible'
|
|
sendBadge(format, badgeData)
|
|
return
|
|
}
|
|
try {
|
|
const data = JSON.parse(buffer)
|
|
setCommitsSinceBadge(user, repo, data.tag_name)
|
|
} catch (e) {
|
|
badgeData.text[1] = 'invalid'
|
|
sendBadge(format, badgeData)
|
|
}
|
|
})
|
|
} else {
|
|
setCommitsSinceBadge(user, repo, version)
|
|
}
|
|
})
|
|
)
|
|
}
|
|
}
|