On Sun, Jan 02, 2022 at 01:07:29PM +0100, Fabien COELHO wrote:
> One liner doc improvement to tell that creation time is only available on windows.
> It is indeed not available on Linux.
The change is about the "isflag" flag, not creation time.
Returns a record containing the file's size, last access time stamp,
last modification time stamp, last file status change time stamp (Unix
platforms only), file creation time stamp (Windows only), and a flag
- indicating if it is a directory.
+ indicating if it is a directory (or a symbolic link to a directory).
> # part 03
> ISTM that the "if (1) { if (2) continue; } else if(3) { if (4) continue; }" structure"
> may be simplified to "if (1 && 2) continue; if (3 && 4) continue;", at least if
> IS_DIR and IS_REG are incompatible?
No, what you suggested is not the same;
We talked about this before:
https://www.postgresql.org/message-id/20200315212729.GC26184@telsasoft.com
> Otherwise, at least "else if (3 & 4) continue"?
I could write the *final* "else if" like that, but then it would be different
from the previous case. Which would be confusing and prone to mistakes.
If I wrote it like this, I think it'd just provoke suggestions from someone
else to change it differently:
/* Skip dirs or special files? */
if (S_ISDIR(attrib.st_mode) && !(flags & LS_DIR_SKIP_DIRS))
continue;
if (!S_ISDIR(attrib.st_mode) && !S_ISREG(attrib.st_mode) && !(flags & LS_DIR_SKIP_SPECIAL)
continue;
...
<< Why don't you use "else if" instead of "if (a){} if (!a && b){}" >>
I'm going to leave it up to a committer.
> The ifdef WIN32 (which probably detects windows 64 bits…) overwrites values[3]. ISTM
> it could be reordered so that there is no overwrite, and simpler single assignements.
>
> #ifndef WIN32
> v = ...;
> #else
> v = ... ? ... : ...;
> #endif
I changed this but without using nested conditionals.
> Add a new "isdir" column to "pg_ls_tmpdir" output. This is a small behavioral
> change. I'm ok with it, however I'm unsure why we would not jump directly to
> the "type" char column done later in the patch series.
Because that depends on lstat().
> ISTM all such functions
> should be extended the same way for better homogeneity? That would also impact
> "waldir", "archive_status", "logical_*", "replslot" variants. "make check" ok.
I agree that makes sense, however others have expressed the opposite opinion.
https://www.postgresql.org/message-id/CALj2ACWtrt5EkHrY4WAZ4Cv42SidXAwpeQJU021bxaKpjmbGfA%40mail.gmail.com
The original motive for the patch was that pg_ls_tmpdir doesn't show shared
filesets. This fixes that essential problem without immediately dragging
everything else along. I think it's more likely that a committer would merge
them both. But I don't know, and it's easy to combine patches if desired.
> This patch applies my previous advice:-) ISTM that parts 4 and 5 should be one
> single patch. The test changes show that only waldir has a test. Would it be
> possible to add minimal tests to other variants as well? "make check" ok.
I have added tests, although some are duplicative.
> This part extends and adds a test for pg_ls_logdir. ISTM that it should
> be merged with the previous patches. "make check" is ok.
It's seperate to allow writing a separate commit message since it does
something unrelated to the other patches. What other patch would it would be
merged with ?
| v32-0006-pg_ls_logdir-to-ignore-error-if-initial-top-dir-.patch
> ISTM that the documentation should be clear about windows vs unix/cygwin specific
> data provided (change/creation).
I preferred to refer to pg_stat_file rather than repeat it for all 7 functions
currently in v15, (and future functions added for new, toplevel dirs).
> # part 11
>
> This part adds a recurse option. Why not. However, the true value does not
> seem to be tested? "make check" is ok.
WDYM the true value? It's tested like:
+-- Exercise recursion
+select path, filename, type from pg_ls_dir_metadata('.', true, false, true) where
+path in ('base', 'base/pgsql_tmp', 'global', 'global/pg_control', 'global/pg_filenode.map', 'PG_VERSION',
'pg_multixact','pg_multixact/members', 'pg_multixact/offsets', 'pg_wal', 'pg_wal/archive_status')
+-- (type='d' or path~'^(global/.*|PG_VERSION|postmaster\.opts|postmaster\.pid|pg_logical/replorigin_checkpoint)$') and
filename!~'[0-9]'
+order by path collate "C", filename collate "C";
+ path | filename | type
+------------------------+-----------------+------
+ PG_VERSION | PG_VERSION | -
+ base | base | d
+ base/pgsql_tmp | pgsql_tmp | d
...
--
Justin