@@ -139,6 +139,36 @@ gitHosts.gist = Object.assign({}, defaults, {
139139 }
140140} )
141141
142+ gitHosts . sourcehut = Object . assign ( { } , defaults , {
143+ protocols : [ 'git+ssh:' , 'https:' ] ,
144+ domain : 'git.sr.ht' ,
145+ treepath : 'tree' ,
146+ browsefiletemplate : ( { domain, user, project, committish, treepath, path, fragment, hashformat } ) => `https://${ domain } /${ user } /${ project } /${ treepath } /${ maybeEncode ( committish || 'main' ) } /${ path } ${ maybeJoin ( '#' , hashformat ( fragment || '' ) ) } ` ,
147+ filetemplate : ( { domain, user, project, committish, path } ) => `https://${ domain } /${ user } /${ project } /blob/${ maybeEncode ( committish ) || 'main' } /${ path } ` ,
148+ httpstemplate : ( { domain, user, project, committish } ) => `https://${ domain } /${ user } /${ project } .git${ maybeJoin ( '#' , committish ) } ` ,
149+ tarballtemplate : ( { domain, user, project, committish } ) => `https://${ domain } /${ user } /${ project } /archive/${ maybeEncode ( committish ) || 'main' } .tar.gz` ,
150+ bugstemplate : ( { domain, user, project } ) => `https://todo.sr.ht/${ user } /${ project } ` ,
151+ docstemplate : ( { domain, user, project, treepath, committish } ) => `https://${ domain } /${ user } /${ project } ${ maybeJoin ( '/' , treepath , '/' , maybeEncode ( committish ) ) } #readme` ,
152+ extract : ( url ) => {
153+ let [ , user , project , aux ] = url . pathname . split ( '/' , 4 )
154+
155+ // tarball url
156+ if ( [ 'archive' ] . includes ( aux ) ) {
157+ return
158+ }
159+
160+ if ( project && project . endsWith ( '.git' ) ) {
161+ project = project . slice ( 0 , - 4 )
162+ }
163+
164+ if ( ! user || ! project ) {
165+ return
166+ }
167+
168+ return { user, project, committish : url . hash . slice ( 1 ) }
169+ }
170+ } )
171+
142172const names = Object . keys ( gitHosts )
143173gitHosts . byShortcut = { }
144174gitHosts . byDomain = { }
0 commit comments