3737
3838URL_BASE = 'https://github.com'
3939RE_PARTS = dict (
40- USER = r'[-_\w]+ ' ,
40+ USER = r'[-_\w]{1,39}\b ' ,
4141 PROJECT = r'[-_.\w]+\b'
4242)
4343
@@ -86,6 +86,27 @@ def handleMatch(self, m):
8686 return _build_link (label , title , href , 'gh-link gh-issue' )
8787
8888
89+ class CommitPattern (Pattern ):
90+ def __init__ (self , config , md ):
91+ COMMIT_RE = r'((?:({USER})(?:\/({PROJECT}))?@|\b)([a-f0-9]{{40}})\b)' .format (** RE_PARTS )
92+ super (CommitPattern , self ).__init__ (COMMIT_RE , md )
93+ self .config = config
94+
95+ def handleMatch (self , m ):
96+ user = m .group (3 )
97+ project = m .group (4 ) or self .config ['project' ]
98+ commit = m .group (5 )
99+ short = commit [:7 ]
100+ if user :
101+ label = '{0}@{1}' .format (m .group (2 ).split ('@' )[0 ], short )
102+ else :
103+ label = short
104+ user = self .config ['user' ]
105+ title = 'GitHub Commit: {0}/{1}@{2}' .format (user , project , commit )
106+ href = '{0}/{1}/{2}/commit/{3}' .format (URL_BASE , user , project , commit )
107+ return _build_link (label , title , href , 'gh-link gh-commit' )
108+
109+
89110class GithubLinks (Extension ):
90111 def __init__ (self , * args , ** kwargs ):
91112 self .config = {
@@ -98,6 +119,7 @@ def extendMarkdown(self, md, md_globals):
98119 md .ESCAPED_CHARS .append ('@' )
99120 md .inlinePatterns ['issue' ] = IssuePattern (self .getConfigs (), md )
100121 md .inlinePatterns ['mention' ] = MentionPattern (self .getConfigs (), md )
122+ md .inlinePatterns ['commit' ] = CommitPattern (self .getConfigs (), md )
101123
102124
103125def makeExtension (* args , ** kwargs ):
0 commit comments