From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#66113: Apply the entire diff buffer Date: Sun, 24 Sep 2023 04:34:33 +0300 Message-ID: <095e4596-7c67-21e2-a69f-c0b7945773a3@gutov.dev> References: <86o7hx4a11.fsf@mail.linkov.net> <86v8c2u34b.fsf@mail.linkov.net> <9cb6c329-8a81-414a-00e0-b3d8aa73d037@gutov.dev> <86msxep69i.fsf@mail.linkov.net> <86lecwvjw4.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="28707"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Cc: 66113@debbugs.gnu.org To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sun Sep 24 03:36:15 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qkE2f-0007GB-6d for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 24 Sep 2023 03:36:14 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qkE2L-0000Dg-Fz; Sat, 23 Sep 2023 21:35:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qkE2J-0000Bk-9H for bug-gnu-emacs@gnu.org; Sat, 23 Sep 2023 21:35:51 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qkE2J-0000e7-1J for bug-gnu-emacs@gnu.org; Sat, 23 Sep 2023 21:35:51 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qkE2U-0004VG-5y for bug-gnu-emacs@gnu.org; Sat, 23 Sep 2023 21:36:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 24 Sep 2023 01:36:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66113 X-GNU-PR-Package: emacs Original-Received: via spool by 66113-submit@debbugs.gnu.org id=B66113.169551931317238 (code B ref 66113); Sun, 24 Sep 2023 01:36:02 +0000 Original-Received: (at 66113) by debbugs.gnu.org; 24 Sep 2023 01:35:13 +0000 Original-Received: from localhost ([127.0.0.1]:40776 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qkE1R-0004TH-UE for submit@debbugs.gnu.org; Sat, 23 Sep 2023 21:35:13 -0400 Original-Received: from wout4-smtp.messagingengine.com ([64.147.123.20]:53809) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qkE1P-0004T3-0u for 66113@debbugs.gnu.org; Sat, 23 Sep 2023 21:34:56 -0400 Original-Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 72139320093D; Sat, 23 Sep 2023 21:34:37 -0400 (EDT) Original-Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Sat, 23 Sep 2023 21:34:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to; s=fm1; t= 1695519276; x=1695605676; bh=invZc5kVhrKokuvOpOkbOMZV74PGeRsB888 cyJ4Ne88=; b=OEk+jG4peQp4LSEVeTG5dVMvZ/T8nDXdnoQUVGTPLH8Pl4Zxfck JbbTNkDSSDJSIy9arMXEiUOqEB48/f4cv0a7Q6lb7b9Pqx/K3wIdGOpHaH9vGEU4 Wr6UoP/87IdFnfzLTZPihuM/tV5iNYEdwrepo2r8GLCzaOmEhNR0WxBDkH4MHvkx UYlebe8J/WUylwZeLq+fcLFa3LGyLQqqUpiWb7EUiO8/wFM9VHBqxdF3uOT3ViH7 pVuNbBekArXAszs5T2Tf15uWO8iiMQ6CUIGaGFpOIbc3TDBUSauW4gwL13dzOcrc XI4Tyxhj6csaSxBKVHCfCX3y+0+XzNGbzjQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:sender:subject:subject:to:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1695519276; x=1695605676; bh=invZc5kVhrKokuvOpOkbOMZV74PGeRsB888 cyJ4Ne88=; b=L0qzafbnuYwLR2pScBAUJQUPTnr3w/amYMyDvupdSB8qrp4E3YW 2S45vpq/1EwN1gD4iXFVwHVkaamAgMObhtCx/StWmt6qk497/Po1cvIB/wj7ZekZ T9p3LdiAiNmwH/wLg1juZnDZ2mL0KndfhxsREXP0OnW3VoFG4laLPWnjZpbISrDl JGOV7LvV9lUFzacv6m1Um8N/pmiv5jbLhv7Oo354Rd+1mbvVSQZUMT3eTRq341lA xesFbkdHufEofkBfu2U9FQ+5uly5RT1x7t1eqwCP8ruDggTnfQQbLcX3XEMmwn8K +m7dxidwHK5u9xRIUcrLUwDSAH+X6Yy+oDg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedviedrudeluddggeelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepkfffgggfuffvvehfhfgjtgfgsehtjeertddtfeejnecuhfhrohhmpeffmhhi thhrhicuifhuthhovhcuoegumhhithhrhiesghhuthhovhdruggvvheqnecuggftrfgrth htvghrnhepiefgteevheevveffheeltdeukeeiieekueefgedugfefgefhudelgfefveel vdevnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepug hmihhtrhihsehguhhtohhvrdguvghv X-ME-Proxy: Feedback-ID: i0e71465a:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 23 Sep 2023 21:34:35 -0400 (EDT) Content-Language: en-US In-Reply-To: <86lecwvjw4.fsf@mail.linkov.net> X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:271204 Archived-At: On 23/09/2023 20:52, Juri Linkov wrote: > +(defun diff-apply-buffer () > + "Apply the diff in the entire diff buffer. > +When applying all hunks was successful, then save the changed buffers." > + (interactive) > + (let ((buffer-edits nil) > + (failures 0) > + (diff-refine nil)) > + (save-excursion > + (goto-char (point-min)) > + (diff-beginning-of-hunk t) > + (while (pcase-let ((`(,buf ,line-offset ,pos ,_src ,dst ,switched) > + (diff-find-source-location nil nil))) > + (cond ((and line-offset (not switched)) > + (push (cons pos dst) > + (alist-get buf buffer-edits))) > + (t (setq failures (1+ failures)))) > + (not (or (eq (prog1 (point) (diff-hunk-next)) (point)) > + (eobp)))))) > + (cond ((zerop failures) > + (dolist (buf-edits (reverse buffer-edits)) > + (with-current-buffer (car buf-edits) > + (dolist (edit (cdr buf-edits)) > + (let ((pos (car edit)) > + (dst (cdr edit)) > + (inhibit-read-only t)) > + (goto-char (car pos)) > + (delete-region (car pos) (cdr pos)) > + (insert (car dst)))) > + (save-buffer))) > + (message "Saved %d buffers" (length buffer-edits))) > + (t > + (message "%d hunks failed; no buffers changed" failures))))) Sorry, was there supposed to be a call to diff-test-hunk here? Or I'm just not following the implementation. I tried testing it out too. There is a patch where the third hunk doesn't apply (errors with "can't find the text to patch" in regular usage). This command ends with cryptic "No next hunk".