How do I configure BeyondCompare to ignore SCM replaced text in comments?
Asked Answered
A

2

20

I do have some text sequences that are replaced by the SCM (Perforce in my case).

I do want to configure BeyondCompare to consider these sequences as unimportant differences in order to be able to ignore them when I compare files.

In my case it's about Python source files and the sequences are looking like

# $Id: //depot/.../filename#7 $
# $DateTime: 2010/09/01 10:45:29 $
# $Author: username $
# $Change: 1234 $

Sometimes these sequences can be outside comments, but even in this cases I would like to be able ignore these lines because they are not really changed.

Armrest answered 6/9, 2010 at 14:42 Comment(1)
There used be a Compare By Rules options where you could say that comments were Unimportant Differences, however I just checked my version (3.1.9) and Compare By Rules seems to have been removed? At least, I cannot find it. What version are you using?Fitzhugh
S
5

Beyond Compare's parser doesn't currently (v3/v4) support nested elements, so file formats grammars can't be used to mark an SCM sequence as unimportant for a specific file type if the text is already classified as a comment, string, etc.

Beyond Compare 4.0 added support for marking arbitrary text as unimportant across an entire comparison, separate from the grammar.

  1. Load the files you're interested in
  2. Click the Session Settings button (aka Rules w/ umpire icon) or use the Session->Session Settings menu item.
  3. Switch to the Importance tab
  4. Click the + button at the bottom of the Unimportant text list.
  5. Add the plain text or regular expression to Text to find edit and check the Regular Expression checkbox if necessary. In this case the regular expression would be:
    \$(Id|DateTime|Author|Change):.*\$
  6. Click Ok.
  7. By default these changes will only affect the current comparison. You can change the combobox at the bottom of the Session Settings dialog from Use for this view only to Also update session defaults to make it affect all future comparisons for all file types.
Seesaw answered 29/4, 2016 at 21:59 Comment(0)
B
16

You need to define a new grammar element (let's call it "SCM") and mark it as unimportant (see the tutorial here; choose "Basic" and make sure to check "Regular Expression").

The grammar element should be (if I interpret your examples correctly):

^.*\$(Id|DateTime|Author|Change):.*$

This will ignore any line that contains $Id:, $DateTime: etc.

If you only want to ignore lines that start with # $..., use

^\s*#s*\$(Id|DateTime|Author|Change):.*$

And if you only want to ignore stuff between $ (and treat everything else as important), use

\$[^$\r\n]*\$

or

\$(Id|DateTime|Author|Change)[^$\r\n]*\$

depending on whether you care about those keywords or not.

Bulbul answered 6/9, 2010 at 15:12 Comment(4)
I know that there is a small probability to mistake but aren't we supposed to ignore only the text between the $ signs on these lines?Armrest
In your examples, the lines only consist of text between $ signs, preceded by a comment # which you said was not always there (although I can hardly imagine that). Can you provide more examples?Bulbul
OK. I edited the answer. Hope I understand your requirements now.Bulbul
I cannot get this to work. It seems that the comment grammar rule picks it up before the custom grammar. Is it possible to mark SCM element changes inside a comment as unimportant, while comment changes in general are still important?Boycie
S
5

Beyond Compare's parser doesn't currently (v3/v4) support nested elements, so file formats grammars can't be used to mark an SCM sequence as unimportant for a specific file type if the text is already classified as a comment, string, etc.

Beyond Compare 4.0 added support for marking arbitrary text as unimportant across an entire comparison, separate from the grammar.

  1. Load the files you're interested in
  2. Click the Session Settings button (aka Rules w/ umpire icon) or use the Session->Session Settings menu item.
  3. Switch to the Importance tab
  4. Click the + button at the bottom of the Unimportant text list.
  5. Add the plain text or regular expression to Text to find edit and check the Regular Expression checkbox if necessary. In this case the regular expression would be:
    \$(Id|DateTime|Author|Change):.*\$
  6. Click Ok.
  7. By default these changes will only affect the current comparison. You can change the combobox at the bottom of the Session Settings dialog from Use for this view only to Also update session defaults to make it affect all future comparisons for all file types.
Seesaw answered 29/4, 2016 at 21:59 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.