Modify

Opened 14 years ago

Closed 9 years ago

Last modified 8 years ago

#7884 closed defect (duplicate)

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

Reported by: Marcus Lindblom Owned by: Richard Liao
Priority: normal Component: TracTicketChangelogPlugin
Severity: major Keywords:
Cc: Trac Release: 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.

Attachments (0)

Change History (8)

comment:1 Changed 14 years ago by Richard Liao

Status: newassigned

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 14 years ago by Marcus Lindblom

Summary: Unable to figure out good pattern for comments _ending_ in ticket #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...)

Just so I don't take up your time with bad data.

comment:3 Changed 11 years ago by Ryan J Ollos

Type: taskdefect

comment:4 Changed 10 years 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 10 years 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 10 years ago by Ryan J Ollos

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

comment:7 Changed 9 years ago by Ryan J Ollos

Resolution: duplicate
Status: assignedclosed

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

comment:8 Changed 8 years ago by Ryan J Ollos

See also #12833.

Modify Ticket

Change Properties
Set your email in Preferences
Action
as closed The owner will remain Richard Liao.
The resolution will be deleted. Next status will be 'reopened'.

Add Comment


E-mail address and name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.