Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL5W6-0000Qd-I6 for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Jan 2023 16:54:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pL5W4-0003H5-IB for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Jan 2023 16:54:24 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL5W4-0003Gw-8Q for pgsql-hackers@lists.postgresql.org; Thu, 26 Jan 2023 16:54:24 +0000 Received: from relay3-d.mail.gandi.net ([217.70.183.195]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pL5W0-0002j2-Vu for pgsql-hackers@postgresql.org; Thu, 26 Jan 2023 16:54:23 +0000 Received: (Authenticated sender: adsend@dunslane.net) by mail.gandi.net (Postfix) with ESMTPSA id 5051060003; Thu, 26 Jan 2023 16:54:12 +0000 (UTC) Message-ID: <8a58ec86-8a0d-1023-87f8-2aa47a860698@dunslane.net> Date: Thu, 26 Jan 2023 11:54:11 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: run pgindent on a regular basis / scripted manner Content-Language: en-US To: Jelte Fennema Cc: Tom Lane , Andres Freund , Peter Geoghegan , Bruce Momjian , Magnus Hagander , Alvaro Herrera , Stephen Frost , Noah Misch , Jesse Zhang , PostgreSQL-development References: <1097305.1674334785@sss.pgh.pa.us> <20230121224312.qmwpagrebidr6hi7@awork3.anarazel.de> <20230122094957.x542ojaqgi4lalq4@awork3.anarazel.de> <20230122223806.3sgew6qswhsczae7@awork3.anarazel.de> <1495023.1674430107@sss.pgh.pa.us> <20230123001518.6hxyiczhn4kadvmf@awork3.anarazel.de> <1502504.1674433722@sss.pgh.pa.us> <20230123011002.fzcaa3krql3mqsfn@awork3.anarazel.de> <1509591.1674437376@sss.pgh.pa.us> From: Andrew Dunstan In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk On 2023-01-26 Th 11:16, Jelte Fennema wrote: > On Thu, 26 Jan 2023 at 15:40, Andrew Dunstan wrote: >> I didn't really like your hook, as it forces a reindent, and many people >> won't want that (for reasons given elsewhere in this thread). > I'm not sure what you mean by "forces a reindent". Like I explained > you can simply run "git commit" again to ignore the changes and > commit anyway. As long as the files are indented on your filesystem > the hook doesn't care if you actually included the indentation changes > in the changes that you're currently committing. Your hook does this: +git diff --cached --name-only --diff-filter=ACMR | grep '\.[ch]$' |\ +    xargs src/tools/pgindent/pgindent --silent-diff \ +    || { +        echo ERROR: Aborting commit because pgindent was not run +        git diff --cached --name-only --diff-filter=ACMR | grep '\.[ch]$' | xargs src/tools/pgindent/pgindent +        exit 1 +    } At this stage the files are now indented, so if it failed and you run `git commit` again it will commit with the indention changes. > > So to be completely clear you can do the following with my hook: > git commit # runs pgindent and fails > git commit # commits changes anyway > git commit -am 'Run pgindent' # commit indentation changes separately > > Or what I usually do: > git commit # runs pgindent and fails > git add --patch # choose relevant changes to add to commit > git commit # commit the changes > git checkout -- . # undo irrelevant changes on filesystem > > Honestly PGAUTOINDENT=no seems stricter, since the only > way to bypass the failure is now to run manually run pgindent > or git commit with the --no-verify flag. > >> files=$(git diff --cached --name-only --diff-filter=ACMR) >> src/tools/pgindent/pgindent $files > That seems like it would fail if there's any files or directories with > spaces in them. Maybe this isn't something we care about though. We don't have any, and the filenames git produces are relative to the git root. I don't think this is an issue. > >> # no need to filter files - pgindent ignores everything that isn't a >> # .c or .h file > If the first argument is a non .c or .h file, then pgindent interprets > it as the typedefs file. So it's definitely important to filter non .c > and .h files out. Because now if you commit a single > non .c or .h file this hook messes up the indentation in all of > your files. You can reproduce by running: > src/tools/pgindent/pgindent README I have a patch at [1] to remove this misfeature. > >> # only do this on master >> test "$branch" = "master" || return 0 > I would definitely want a way to disable this check. As a normal > submitter I never work directly on master. Sure, that's your choice. My intended audience here is committers, who of course do work on master. cheers andrew [1]  https://postgr.es/m/21bb8573-9e56-812b-84cf-1e4f3c4c2a7b@dunslane.net -- Andrew Dunstan EDB: https://www.enterprisedb.com