Commit 51231092e514abc2c2cf7af606e1bf4e510f7f75
Handle hashtag/channel repos
cel committed on 9/20/2017, 7:40:02 AMParent: 83af49c5eefe3d3bdb488ab8c469ab4299563bb4
Files changed
index.js | changed |
lib/about.js | changed |
lib/repos/index.js | changed |
lib/votes.js | changed |
package.json | changed |
index.js | |||
---|---|---|---|
@@ -110,11 +110,12 @@ | |||
110 | 110 … | this.pullReqs = PullRequests.init(ssb) | |
111 | 111 … | this.getRepo = asyncMemo({ | |
112 | 112 … | cache: new LRUCache(32) | |
113 | 113 … | }, function (id, cb) { | |
114 … | + if (id[0] === '#') return ssbGit.getRepo(ssb, id, {live: true}, cb) | ||
114 | 115 … | this.getMsg(id, function (err, msg) { | |
116 … | + if (err) return cb(err) | ||
115 | 117 … | if (msg.private && this.isPublic) return cb(new Error('Private Repo')) | |
116 | - if (err) return cb(err) | ||
117 | 118 … | ssbGit.getRepo(ssb, msg, {live: true}, cb) | |
118 | 119 … | }) | |
119 | 120 … | }) | |
120 | 121 … | ||
@@ -163,8 +164,10 @@ | |||
163 | 164 … | }.bind(this)) | |
164 | 165 … | } | |
165 | 166 … | ||
166 | 167 … | G.getRepoName = function (ownerId, repoId, cb) { | |
168 … | + if (!repoId) return cb(null, '?') | ||
169 … | + if (repoId[0] === '#') return cb(null, repoId) | ||
167 | 170 … | this.about.getName({ | |
168 | 171 … | owner: ownerId, | |
169 | 172 … | target: repoId | |
170 | 173 … | }, cb) | |
@@ -238,8 +241,10 @@ | |||
238 | 241 … | if (dir == '') | |
239 | 242 … | return this.serveIndex(req) | |
240 | 243 … | else if (dir == 'search') | |
241 | 244 … | return this.serveSearch(req) | |
245 … | + else if (dir[0] === '#') | ||
246 … | + return this.serveChannel(req, dir, dirs.slice(1)) | ||
242 | 247 … | else if (ref.isBlobId(dir)) | |
243 | 248 … | return this.serveBlob(req, dir) | |
244 | 249 … | else if (ref.isMsgId(dir)) | |
245 | 250 … | return this.serveMessage(req, dir, dirs.slice(1)) | |
@@ -625,8 +630,9 @@ | |||
625 | 630 … | }) | |
626 | 631 … | case 'issue': | |
627 | 632 … | case 'pull-request': | |
628 | 633 … | var issueLink = u.link([msg.key], u.messageTitle(msg)) | |
634 … | + // TODO: handle hashtag in project property | ||
629 | 635 … | return self.getMsg(c.project, function (err, projectMsg) { | |
630 | 636 … | if (err) return cb(null, | |
631 | 637 … | self.repos.serveRepoNotFound(req, c.repo, err)) | |
632 | 638 … | self.getRepoName(projectMsg.value.author, c.project, | |
@@ -676,9 +682,17 @@ | |||
676 | 682 … | G.serveIndex = function (req) { | |
677 | 683 … | return this.serveTemplate(req)(this.renderFeed(req)) | |
678 | 684 … | } | |
679 | 685 … | ||
680 | -/* Message */ | ||
686 … | +G.serveChannel = function (req, id, path) { | ||
687 … | + var self = this | ||
688 … | + return u.readNext(function (cb) { | ||
689 … | + self.getRepo(id, function (err, repo) { | ||
690 … | + if (err) return cb(null, self.serveError(req, err)) | ||
691 … | + cb(null, self.repos.serveRepoPage(req, GitRepo(repo), path)) | ||
692 … | + }) | ||
693 … | + }) | ||
694 … | +} | ||
681 | 695 … | ||
682 | 696 … | G.serveMessage = function (req, id, path) { | |
683 | 697 … | var self = this | |
684 | 698 … | return u.readNext(function (cb) { |
lib/about.js | ||
---|---|---|
@@ -42,9 +42,19 @@ | ||
42 | 42 … | }) |
43 | 43 … | }) |
44 | 44 … | } |
45 | 45 … | pull( |
46 | - sbot.links({ | |
46 … | + sbot.backlinks ? sbot.backlinks.read({ | |
47 … | + reverse: true, | |
48 … | + query: [{$filter: { | |
49 … | + dest: id, | |
50 … | + value: { | |
51 … | + content: { | |
52 … | + type: 'about' | |
53 … | + } | |
54 … | + } | |
55 … | + }}] | |
56 … | + }) : sbot.links({ | |
47 | 57 … | rel: 'about', |
48 | 58 … | values: true, |
49 | 59 … | dest: id |
50 | 60 … | }), |
@@ -86,8 +96,9 @@ | ||
86 | 96 … | } |
87 | 97 … | |
88 | 98 … | function getAbout(dest, cb) { |
89 | 99 … | if (!dest) return cb(null, {}) |
100 … | + if (dest[0] === '#') return cb(null, {name: dest}) | |
90 | 101 … | var target = dest.target || dest |
91 | 102 … | getAboutInfo(target, function (err, info) { |
92 | 103 … | if (err) return cb(err) |
93 | 104 … | // order of preference: source, owner, any, msg |
lib/repos/index.js | ||
---|---|---|
@@ -154,9 +154,9 @@ | ||
154 | 154 … | R.serveRepoNotFound = function (req, id, err) { |
155 | 155 … | return this.web.serveTemplate(req, req._t('error.RepoNotFound'), 404) |
156 | 156 … | (pull.values([ |
157 | 157 … | '<h2>' + req._t('error.RepoNotFound') + '</h2>', |
158 | - '<p>' + req._t('error.RepoNameNotFound') + '</p>', | |
158 … | + '<p>' + req._t('error.RepoIdNotFound', id) + '</p>', | |
159 | 159 … | '<pre>' + u.escape(err.stack) + '</pre>' |
160 | 160 … | ])) |
161 | 161 … | } |
162 | 162 … | |
@@ -204,9 +204,9 @@ | ||
204 | 204 … | u.link([repo.upstream]) |
205 | 205 … | var title = titleTemplate ? titleTemplate |
206 | 206 … | .replace(/%\{repo\}/g, repoName) |
207 | 207 … | .replace(/%\{author\}/g, authorName) |
208 | - : authorName + '/' + repoName | |
208 … | + : (authorName ? authorName + '/' : '') + repoName | |
209 | 209 … | var isPublic = self.web.isPublic |
210 | 210 … | var isLocal = !isPublic |
211 | 211 … | cb(null, self.web.serveTemplate(req, title)(cat([ |
212 | 212 … | h('div', {class: 'repo-title'}, [ |
@@ -233,9 +233,12 @@ | ||
233 | 233 … | ]) |
234 | 234 … | ) |
235 | 235 … | ]), |
236 | 236 … | forms.name(req, isLocal, repo.id, repoName, 'repo-name', null, req._t('repo.Rename'), |
237 | - h('h2', {class: 'bgslash'}, `${u.link([repo.feed], authorName)} / ${u.link([repo.id], repoName)}${repo.private ? ' ' + u.privateIcon(req) : ''}`) | |
237 … | + h('h2', {class: 'bgslash'}, | |
238 … | + (authorName ? u.link([repo.feed], authorName) + ' / ' : '') + | |
239 … | + u.link([repo.id], repoName) + | |
240 … | + (repo.private ? ' ' + u.privateIcon(req) : '')) | |
238 | 241 … | ), |
239 | 242 … | ]), |
240 | 243 … | u.when(repo.upstream, () => |
241 | 244 … | h('small', {class: 'bgslash'}, req._t('ForkedFrom', { |
lib/votes.js | ||
---|---|---|
@@ -22,9 +22,19 @@ | ||
22 | 22 … | downvotes: 0 |
23 | 23 … | } |
24 | 24 … | |
25 | 25 … | pull( |
26 | - sbot.links({dest: id, rel: 'vote', values: true}), | |
26 … | + sbot.backlinks ? sbot.backlinks.read({ | |
27 … | + reverse: true, | |
28 … | + query: [{$filter: { | |
29 … | + dest: id, | |
30 … | + value: { | |
31 … | + content: { | |
32 … | + type: 'vote' | |
33 … | + } | |
34 … | + } | |
35 … | + }}] | |
36 … | + }) : sbot.links({dest: id, rel: 'vote', values: true}), | |
27 | 37 … | u.decryptMessages(sbot), |
28 | 38 … | u.readableMessages(), |
29 | 39 … | pull.drain(processMsg, function (err) { |
30 | 40 … | cb(err, result) |
package.json | ||
---|---|---|
@@ -14,9 +14,9 @@ | ||
14 | 14 … | "multicb": "^1.2.1", |
15 | 15 … | "node-polyglot": "^1.0.0", |
16 | 16 … | "pull-cat": "^1.1.11", |
17 | 17 … | "pull-git-pack": "^1.0.1", |
18 | - "pull-git-repo": "^1.2.1", | |
18 … | + "pull-git-repo": "^1.3.0", | |
19 | 19 … | "pull-hyperscript": "^0.2.2", |
20 | 20 … | "pull-identify-filetype": "^1.1.0", |
21 | 21 … | "pull-many": "^1.0.8", |
22 | 22 … | "pull-paginate": "^1.0.0", |
@@ -24,9 +24,9 @@ | ||
24 | 24 … | "pull-stream": "^3.5.0", |
25 | 25 … | "remove-markdown": "^0.1.0", |
26 | 26 … | "ssb-client": "^4.2.1", |
27 | 27 … | "ssb-config": "^2.2.0", |
28 | - "ssb-git-repo": "^2.6.0", | |
28 … | + "ssb-git-repo": "^2.9.2", | |
29 | 29 … | "ssb-issues": "^1.0.0", |
30 | 30 … | "ssb-keys": "^7.0.3", |
31 | 31 … | "ssb-marked": "^0.6.0", |
32 | 32 … | "ssb-mentions": "^0.1.0", |
Built with git-ssb-web