Opened 6 years ago

Closed 19 months ago

# Commits match against partial ticket number (i.e. commit refs #1045 ends up on ticket #10)

Reported by: Owned by: marcusl richard normal TracTicketChangelogPlugin major 0.12

### Description

Our commit comments use the fixes/refs/see system, which looks like

• Fixed framboozle in GUI. See #23 and #46. Fixes #23.
• Initial hogwash setup. See #1, #11 and #111.

The problem is that a commit that referenses ticket 100 ends up on ticket 1 and 10 as well.

I've tried using something like: .*?#%s[^0-9].* but the problem seems to be with the %s itself.

Or else it's a different bug altogether.

### comment:1 Changed 6 years ago by richard

• Status changed from new to assigned

I tried your pattern, but did not get matched:

re.match(".*?#10[^0-9].*", "* See #100 and #46. Fixes #100.", re.M + re.S + re.U)


This changelog seems should not on ticket 10 as above test.

Could you show the exact comment and pattern?

### comment:2 Changed 6 years ago by marcusl

• Summary changed from Unable to figure out good pattern for comments _ending_ in ticket # to Commits match against partial ticket number (i.e. commit refs #1045 ends up on ticket #10)

Thanks for the quick response. Sorry for being so slow in return.

I've updated the summary to be more relevant w.r.t. my problem.

The previous pattern was slightly incorrect. I've tried with a slightly different one and got the same results. Perhaps there is a better way altogether.

Pattern: log_pattern = .*#%s[^0-9]*.*

Commit:

changeset:   1904:a42d4562ecb0
tag:         tip
user:        Marcus Lindblom <marcus.lindblom@orzone.se>
date:        Wed Nov 03 14:19:45 2010 +0100
summary:     OrzCPanel: Ask user if system is in correct position + better shutdown msg (fixes #1064)


Ticket #10 changelog:

Changeset	Author	Time	ChangeLog
[a42d4562ecb0231950446ef48cbb2f5314fef344]	Marcus Lindblom	2010-11-03	OrzCPanel: Ask user if system is in correct position + better shutdown msg (fixes #1064)
[8f89fd76a27c52782a100105e67e167ecd2019f2]	Daniel Svensson	2010-11-03	OrzCPanel: Added missing signal/slot connection for calibrated status in GUI. Fixes #1065
[5953bb2cbbb84d2c9ee16a408098f80b684515a1]	Daniel Svensson	2010-11-03	OrzCPanel: Maxon motors store calibrate status in volatile ram. (Fixes #1013) * Added necessary transitions to state machine to enable new functionality. * Added new function calibrateCheck in motors which checks that the calibrated flag is set. On maxonmotor the relevant bit on the controller is read. * Fixed Re-calibrate functionality. If all motors are calibrated and the user wishes to recalibrate, this now works. * Setup motor_config_dev.xml with same configuration as k6 system.
[bc03b4514883cc0cf50392a6847b2fed461e7a32]	Marcus Lindblom	2010-11-02	OrzCPanel: Swap via emulated motors when changing config file. See #1007
[e2f3ddf9891ed57663382b967aa614563e37929c]	Marcus Lindblom	2010-11-02	Dummy commit to test trac hook. see #10
[747256f9047c4621dab67364975275231c3ab449]	Marcus Lindblom	2010-11-02	Dummy commit to test trac hook. see #10


What exactly do you put in %s? is it ([0-9]+) or something different?

Also, how can I be sure that old changes are removed from the ticket? I currently use 'trac-admin . mercurial sync default' to re-sync changesets after I've changed the pattern. (I'm assuming the ticket<->changeset relations are stored in the database and not matched 'live' each time I view a ticket...)

### comment:3 Changed 3 years ago by rjollos

• Type changed from task to defect

### comment:4 follow-up: ↓ 5 Changed 20 months ago by anonymous

We had the same problem her and the following pattern works well:

[ticketlog]
log_pattern = (\n|.)*#%s($|\D(\n|.)*)  ### comment:5 in reply to: ↑ 4 Changed 19 months ago by anonymous Replying to anonymous: We had the same problem her and the following pattern works well: [ticketlog] log_pattern = (\n|.)*#%s($|\D(\n|.)*)


I've tried your reqexp, however it leads to hangs of the web server running trac when parsing a long commit message, probably because of Catastrophic Backtracking.

This expression works for me:

(?:\n|[^#])*#%s(?:\D|$)  I'd like to propose the use of re.search instead of re.match though, to simplify the regexp even further and make eliminating of "false" matches from the database result faster: Index: web_ui.py =================================================================== --- web_ui.py (revision 14529) +++ web_ui.py (working copy) @@ -36,7 +36,7 @@ max_message_length = IntOption('ticketlog', 'log_message_maxlength', doc="""Maximum length of log message to display.""") - log_pattern = Option('ticketlog', 'log_pattern', '\s*#%s[:\s]+.*', + log_pattern = Option('ticketlog', 'log_pattern', '#%s(?:\D|$)',
"Regex to determine which changesets reference the ticket.")

def __init__(self):
@@ -86,7 +86,7 @@
WHERE message LIKE %s
""", ('%#' + ticket_id + '%',)):

-            if not p.match(message):
+            if not p.search(message):
continue

repos = RepositoryManager(self.env).get_repository(repos_name)


### comment:6 Changed 19 months ago by rjollos

This issue will eventually be resolved by using the regex from CommitTicketUpdater, as suggested in #11821.

### comment:7 Changed 19 months ago by rjollos

• Resolution set to duplicate
• Status changed from assigned to closed

Closing as a duplicate of #11821, since I hope to implement those changes within the next few months.