GNU bug report logs - #46538
Patch: wrap around smerge-vc-next-conflict if current file still has conflicts

Previous Next

Package: emacs;

Reported by: Konstantin Kharlamov <hi-angel <at> yandex.ru>

Date: Mon, 15 Feb 2021 18:53:01 UTC

Severity: normal

Tags: fixed, patch

Fixed in version 28.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 46538 in the body.
You can then email your comments to 46538 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#46538; Package emacs. (Mon, 15 Feb 2021 18:53:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Konstantin Kharlamov <hi-angel <at> yandex.ru>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Mon, 15 Feb 2021 18:53:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: bug-gnu-emacs <at> gnu.org
Subject: Patch: wrap around smerge-vc-next-conflict if current file still
 has conflicts
Date: Mon, 15 Feb 2021 21:51:41 +0300
[Message part 1 (text/plain, inline)]
Currently, if the buffer has conflict markers above the (point) and it's the last conflicted file, we bail out. A user pointed out¹ that it is a good idea to try to find conflicts in the current file as well. Indeed, it seems like more correct behaviour: going to the next conflict is whole purpose of the function, and current file might still have them.

Attached patch implements additional check for conflicts just for the case when the buffer is the last conflicted file and all conflicts are above current point.

1: https://emacs.stackexchange.com/questions/63413/finding-git-conflict-in-the-same-buffer-if-cursor-is-at-end-of-the-buffer
[0001-vc-make-smerge-vc-next-conflict-wrap-around.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46538; Package emacs. (Mon, 15 Feb 2021 19:16:01 GMT) Full text and rfc822 format available.

Message #8 received at 46538 <at> debbugs.gnu.org (full text, mbox):

From: "Basil L. Contovounesios" <contovob <at> tcd.ie>
To: Konstantin Kharlamov <hi-angel <at> yandex.ru>
Cc: 46538 <at> debbugs.gnu.org
Subject: Re: bug#46538: Patch: wrap around smerge-vc-next-conflict if
 current file still has conflicts
Date: Mon, 15 Feb 2021 19:15:37 +0000
tags 46538 + patch
quit

Konstantin Kharlamov <hi-angel <at> yandex.ru> writes:

> Attached patch implements additional check for conflicts just for the case when
> the buffer is the last conflicted file and all conflicts are above current
> point.

Thanks, just a few nits from me.

> From f8d8f1cbdb94f75765165acacd089f1e3cc4a763 Mon Sep 17 00:00:00 2001
> From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
> Date: Mon, 15 Feb 2021 21:37:33 +0300
> Subject: [PATCH] vc: make smerge-vc-next-conflict wrap around
>
> lisp/vc/smerge-mode.el:
> (smerge-next-safe): a wrapper around smerge-next that doesn't throw
> an error.
> (smerge-vc-next-conflict): make it wrap around a file if it's the last
> conflicted file, and it still has conflicts

Please use proper sentences starting with a capital letter and ending in
a full stop.

> ---
>  lisp/vc/smerge-mode.el | 20 ++++++++++++++------
>  1 file changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
> index 3b09dfe5d2..0558240120 100644
> --- a/lisp/vc/smerge-mode.el
> +++ b/lisp/vc/smerge-mode.el
> @@ -1446,6 +1446,14 @@ smerge-change-buffer-confirm
>    "If non-nil, request confirmation before moving to another buffer."
>    :type 'boolean)
>  
> +(defun smerge-next-safe ()
> +    "Tries to move to next conflict, returns t on success, nil
   ^^^^
Excess indentation.

> +otherwise"

The first line should contain a whole sentence, usually in the
imperative; see (info "(elisp) Documentation Tips").  E.g.:

    "Try moving to next conflict.
  Return non-nil on success; nil otherwise."

> +  (condition-case err
                     ^^^
This variable is unused, so just pass nil instead.

> +      (not (smerge-next))
> +    ('error
        ^^
Conditions are usually unquoted.

> +     nil)))

You can reuse the macro ignore-errors for this:

  (ignore-errors (not (smerge-next)))

>  (defun smerge-vc-next-conflict ()
>    "Go to next conflict, possibly in another file.
>  First tries to go to the next conflict in the current buffer, and if not
> @@ -1469,12 +1477,12 @@ smerge-vc-next-conflict
>           (if (and (buffer-modified-p) buffer-file-name)
>               (save-buffer))
>           (vc-find-conflicted-file)
> -         (if (eq buffer (current-buffer))
> -             ;; Do nothing: presumably `vc-find-conflicted-file' already
> -             ;; emitted a message explaining there aren't any more conflicts.
> -             nil
> -           (goto-char (point-min))
> -           (smerge-next)))))))
> +         (when (eq buffer (current-buffer))
> +           ;; try to find a conflict marker in current file above the point
> +           (let ((prev-pos (point)))
> +             (goto-char (point-min))
> +             (when (not (smerge-next-safe))
                ^^^^^^^^^^
Nit: when + not = unless

> +               (goto-char prev-pos)))))))))

-- 
Basil




Added tag(s) patch. Request was from "Basil L. Contovounesios" <contovob <at> tcd.ie> to control <at> debbugs.gnu.org. (Mon, 15 Feb 2021 19:16:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46538; Package emacs. (Mon, 15 Feb 2021 22:02:01 GMT) Full text and rfc822 format available.

Message #13 received at 46538 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <hi-angel <at> yandex.ru>
To: "Basil L. Contovounesios" <contovob <at> tcd.ie>
Cc: 46538 <at> debbugs.gnu.org
Subject: Re: bug#46538: Patch: wrap around smerge-vc-next-conflict if
 current file still has conflicts
Date: Tue, 16 Feb 2021 01:00:49 +0300
Thank you! I will fix it up.

Nice hint on the `ignore-errors` macro, I didn't know about it

On Mon, 2021-02-15 at 19:15 +0000, Basil L. Contovounesios wrote:
> tags 46538 + patch
> quit
> 
> Konstantin Kharlamov <hi-angel <at> yandex.ru> writes:
> 
> > Attached patch implements additional check for conflicts just for the case
> > when
> > the buffer is the last conflicted file and all conflicts are above current
> > point.
> 
> Thanks, just a few nits from me.
> 
> > From f8d8f1cbdb94f75765165acacd089f1e3cc4a763 Mon Sep 17 00:00:00 2001
> > From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
> > Date: Mon, 15 Feb 2021 21:37:33 +0300
> > Subject: [PATCH] vc: make smerge-vc-next-conflict wrap around
> > 
> > lisp/vc/smerge-mode.el:
> > (smerge-next-safe): a wrapper around smerge-next that doesn't throw
> > an error.
> > (smerge-vc-next-conflict): make it wrap around a file if it's the last
> > conflicted file, and it still has conflicts
> 
> Please use proper sentences starting with a capital letter and ending in
> a full stop.
> 
> > ---
> >  lisp/vc/smerge-mode.el | 20 ++++++++++++++------
> >  1 file changed, 14 insertions(+), 6 deletions(-)
> > 
> > diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
> > index 3b09dfe5d2..0558240120 100644
> > --- a/lisp/vc/smerge-mode.el
> > +++ b/lisp/vc/smerge-mode.el
> > @@ -1446,6 +1446,14 @@ smerge-change-buffer-confirm
> >    "If non-nil, request confirmation before moving to another buffer."
> >    :type 'boolean)
> >  
> > +(defun smerge-next-safe ()
> > +    "Tries to move to next conflict, returns t on success, nil
>    ^^^^
> Excess indentation.
> 
> > +otherwise"
> 
> The first line should contain a whole sentence, usually in the
> imperative; see (info "(elisp) Documentation Tips").  E.g.:
> 
>     "Try moving to next conflict.
>   Return non-nil on success; nil otherwise."
> 
> > +  (condition-case err
>                      ^^^
> This variable is unused, so just pass nil instead.
> 
> > +      (not (smerge-next))
> > +    ('error
>         ^^
> Conditions are usually unquoted.
> 
> > +     nil)))
> 
> You can reuse the macro ignore-errors for this:
> 
>   (ignore-errors (not (smerge-next)))
> 
> >  (defun smerge-vc-next-conflict ()
> >    "Go to next conflict, possibly in another file.
> >  First tries to go to the next conflict in the current buffer, and if not
> > @@ -1469,12 +1477,12 @@ smerge-vc-next-conflict
> >           (if (and (buffer-modified-p) buffer-file-name)
> >               (save-buffer))
> >           (vc-find-conflicted-file)
> > -         (if (eq buffer (current-buffer))
> > -             ;; Do nothing: presumably `vc-find-conflicted-file' already
> > -             ;; emitted a message explaining there aren't any more
> > conflicts.
> > -             nil
> > -           (goto-char (point-min))
> > -           (smerge-next)))))))
> > +         (when (eq buffer (current-buffer))
> > +           ;; try to find a conflict marker in current file above the point
> > +           (let ((prev-pos (point)))
> > +             (goto-char (point-min))
> > +             (when (not (smerge-next-safe))
>                 ^^^^^^^^^^
> Nit: when + not = unless
> 
> > +               (goto-char prev-pos)))))))))
> 






Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46538; Package emacs. (Mon, 15 Feb 2021 22:26:01 GMT) Full text and rfc822 format available.

Message #16 received at 46538 <at> debbugs.gnu.org (full text, mbox):

From: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
To: 46538 <at> debbugs.gnu.org
Cc: contovob <at> tcd.ie
Subject: [PATCH] vc: make smerge-vc-next-conflict wrap around
Date: Tue, 16 Feb 2021 01:25:04 +0300
* lisp/vc/smerge-mode.el:
(smerge-vc-next-conflict): While searching for conflict markers, wrap
search around if current file is the last one with conflicts.
---
 lisp/vc/smerge-mode.el | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/lisp/vc/smerge-mode.el b/lisp/vc/smerge-mode.el
index 3b09dfe5d2..b825fd9837 100644
--- a/lisp/vc/smerge-mode.el
+++ b/lisp/vc/smerge-mode.el
@@ -1469,12 +1469,12 @@ smerge-vc-next-conflict
          (if (and (buffer-modified-p) buffer-file-name)
              (save-buffer))
          (vc-find-conflicted-file)
-         (if (eq buffer (current-buffer))
-             ;; Do nothing: presumably `vc-find-conflicted-file' already
-             ;; emitted a message explaining there aren't any more conflicts.
-             nil
-           (goto-char (point-min))
-           (smerge-next)))))))
+         (when (eq buffer (current-buffer))
+           ;; try to find a conflict marker in current file above the point
+           (let ((prev-pos (point)))
+             (goto-char (point-min))
+             (unless (ignore-errors (not (smerge-next)))
+               (goto-char prev-pos)))))))))
 
 (provide 'smerge-mode)
 
-- 
2.30.1





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#46538; Package emacs. (Tue, 16 Feb 2021 11:51:01 GMT) Full text and rfc822 format available.

Message #19 received at 46538 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Konstantin Kharlamov <Hi-Angel <at> yandex.ru>
Cc: contovob <at> tcd.ie, 46538 <at> debbugs.gnu.org
Subject: Re: bug#46538: [PATCH] vc: make smerge-vc-next-conflict wrap around
Date: Tue, 16 Feb 2021 12:50:18 +0100
Konstantin Kharlamov <Hi-Angel <at> yandex.ru> writes:

> * lisp/vc/smerge-mode.el:
> (smerge-vc-next-conflict): While searching for conflict markers, wrap
> search around if current file is the last one with conflicts.

Looks good to me, so I've applied your patch to Emacs 28.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Added tag(s) fixed. Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Tue, 16 Feb 2021 11:51:02 GMT) Full text and rfc822 format available.

bug marked as fixed in version 28.1, send any further explanations to 46538 <at> debbugs.gnu.org and Konstantin Kharlamov <hi-angel <at> yandex.ru> Request was from Lars Ingebrigtsen <larsi <at> gnus.org> to control <at> debbugs.gnu.org. (Tue, 16 Feb 2021 11:51:02 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Wed, 17 Mar 2021 11:24:05 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 38 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.