ispyisail
3521c64ba3
Tell a second person who has a project open, and open it read-only
...
Two people opening the same project on a shared drive could both edit it,
and the last save silently wiped the other's work. A project now has a
hidden lock file beside it (.~plant.qetz.lock, small JSON: user, host,
process, version, since, heartbeat). Opening a project another live session
holds shows who has it, since when and how long ago they were last active,
and offers Open read-only (default), Open anyway, or Cancel.
- The lock is made with an exclusive create, refreshed every minute and
deleted when the project closes. It is not a QLockFile: that treats any
lock from another machine as stale after 30 s. Here only a lock made on
this machine by a process that no longer exists is taken silently.
- A folder the lock cannot be made in, or the setting turned off
(Settings > General > Projects), opens as before.
- Save As and .qet saved as .qetz move the lock to the new file, and refuse
a file someone else has open. A project opened read-only for another's
lock does not save over that file.
- --resave and --set-titleblock refuse a file someone has open unless given
--ignore-lock; the read-only verbs never look at locks and headless runs
never take one. A script's qet.save() refuses the same way.
Checked: 17 new unit tests (5 go red when stale detection and the exclusive
create are broken), full ctest 107/107, the dialog and both choices in the
GUI under Xvfb, and --resave refused/allowed from the command line.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-16 13:01:54 +13:00
..
2026-10-13 11:01:21 +02:00
2026-10-13 11:01:21 +02:00
2026-10-11 05:00:01 +02:00
2026-10-16 06:59:46 +13:00
2026-10-14 07:35:34 +13:00
2026-10-11 05:00:01 +02:00
2026-01-16 15:24:35 +01:00
2026-10-08 12:50:13 +13:00
2026-10-15 17:06:29 +13:00
2026-10-08 12:50:13 +13:00
2026-10-11 05:00:01 +02:00
2026-10-09 23:31:26 +13:00
2026-08-17 10:25:44 +02:00
2026-10-08 12:50:13 +13:00
2026-10-08 12:50:13 +13:00
2026-10-08 12:50:13 +13:00
2026-10-14 23:38:00 +13:00
2026-07-31 09:52:32 +12:00
2026-10-11 14:57:42 +02:00
2026-10-08 12:50:13 +13:00
2026-10-08 12:50:13 +13:00
2026-10-15 21:42:43 +13:00
2026-10-09 05:05:49 +13:00
2026-10-07 10:55:50 +02:00
2026-10-07 10:55:50 +02:00
2026-10-08 12:50:13 +13:00
2026-10-16 13:01:54 +13:00
2026-10-14 18:57:29 +13:00
2026-09-25 23:25:27 +12:00
2026-01-16 15:24:35 +01:00
2026-10-15 16:26:45 +02:00
2026-10-09 08:49:24 +02:00
2026-10-16 13:01:54 +13:00
2026-10-13 23:03:51 +13:00
2026-10-09 22:09:28 +13:00
2026-01-16 15:24:35 +01:00
2026-09-28 09:19:59 +13:00
2026-08-09 09:11:40 +02:00
2026-08-09 09:11:40 +02:00
2026-10-11 05:00:01 +02:00
2026-10-11 05:00:01 +02:00
2026-09-26 08:22:12 +12:00
2026-10-07 23:38:34 +02:00
2026-01-16 15:24:35 +01:00
2026-10-13 23:03:14 +13:00
2026-10-13 23:03:14 +13:00
2026-09-26 21:18:35 +12:00
2026-09-26 21:06:13 +12:00
2026-10-16 13:01:54 +13:00
2026-10-16 13:01:54 +13:00
2026-10-08 12:50:13 +13:00
2026-09-26 21:34:02 +12:00
2026-10-08 12:50:13 +13:00
2026-01-16 15:24:35 +01:00
2026-10-13 20:13:18 +02:00
2026-10-13 23:03:51 +13:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-10-06 17:26:46 +02:00
2026-10-14 18:26:00 +13:00
2026-10-14 18:26:00 +13:00
2026-10-03 08:43:27 +13:00
2026-10-03 08:43:27 +13:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-30 10:31:12 +13:00
2026-01-16 15:24:35 +01:00
2026-09-09 11:45:36 +12:00
2026-10-07 10:12:20 +13:00
2026-10-07 10:12:20 +13:00
2026-10-06 21:09:41 +02:00
2026-10-15 20:26:30 +13:00
2026-10-14 18:57:29 +13:00
2026-10-08 12:50:13 +13:00
2026-10-03 18:09:33 +02:00
2026-10-13 23:03:44 +13:00
2026-10-13 23:03:51 +13:00
2026-10-02 21:04:54 +13:00
2026-09-22 09:07:27 +02:00
2026-09-28 06:16:17 +13:00
2026-09-26 21:40:32 +12:00
2026-10-07 18:38:25 +13:00
2026-10-07 18:38:25 +13:00
2026-09-27 11:16:37 +13:00
2026-01-16 15:24:35 +01:00
2026-09-07 20:54:18 +12:00
2026-10-11 05:00:01 +02:00
2026-10-07 18:34:51 +13:00
2026-10-16 07:18:24 +13:00
2026-10-13 11:01:21 +02:00
2026-10-07 21:17:38 +13:00
2026-09-27 21:54:44 +13:00
2026-09-07 10:44:30 +02:00
2026-09-07 10:44:30 +02:00
2026-10-08 12:50:13 +13:00
2026-04-26 10:48:47 +02:00
2026-10-13 23:03:51 +13:00
2026-10-13 23:03:51 +13:00
2026-10-08 12:50:13 +13:00
2026-01-16 15:24:35 +01:00
2026-09-19 12:22:24 -05:00
2026-01-16 15:24:35 +01:00
2026-10-11 05:00:01 +02:00
2026-10-11 05:00:01 +02:00
2026-10-08 12:50:13 +13:00
2026-05-13 19:42:11 +02:00
2026-10-13 11:01:21 +02:00
2026-08-04 16:36:23 +12:00
2026-10-15 20:07:01 +02:00
2026-10-15 20:07:01 +02:00
2026-10-08 12:50:13 +13:00
2026-09-26 10:22:50 +12:00
2026-10-14 13:12:38 +13:00
2026-09-27 21:54:36 +13:00
2026-10-14 13:12:38 +13:00
2026-10-14 13:12:38 +13:00
2026-10-14 13:12:38 +13:00
2026-10-14 13:12:38 +13:00
2026-10-08 06:04:35 +02:00
2026-10-13 11:01:21 +02:00
2026-04-19 10:44:52 +02:00
2026-10-07 18:38:25 +13:00
2026-10-07 18:38:25 +13:00
2026-10-10 20:27:01 +13:00
2026-10-09 10:00:31 +02:00
2026-09-28 14:55:04 +02:00
2026-09-28 14:55:04 +02:00
2026-09-16 15:40:41 +12:00
2026-09-16 15:40:41 +12:00
2026-10-08 12:50:13 +13:00
2026-06-20 22:31:06 +12:00
2026-10-16 13:01:54 +13:00
2026-10-08 12:50:13 +13:00
2026-01-16 15:24:35 +01:00
2026-10-06 21:09:41 +02:00
2026-10-06 21:09:41 +02:00
2026-10-12 16:02:26 +02:00
2026-10-04 08:54:13 +13:00
2026-10-08 06:03:31 +02:00
2026-10-16 13:01:54 +13:00
2026-10-16 13:01:54 +13:00
2026-10-16 13:01:54 +13:00
2026-10-16 13:01:54 +13:00
2026-10-13 11:01:21 +02:00
2026-10-13 11:01:21 +02:00
2026-10-13 07:44:40 +13:00
2026-10-11 05:00:01 +02:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-10-16 13:01:54 +13:00
2026-10-16 13:01:54 +13:00
2026-10-15 20:07:01 +02:00
2026-10-15 20:07:01 +02:00
2026-10-09 05:05:49 +13:00
2026-10-08 15:29:05 +02:00
2026-10-08 12:50:13 +13:00
2026-10-07 19:31:42 +13:00
2026-08-05 05:26:57 +12:00
2026-08-05 05:26:57 +12:00
2026-10-06 21:09:41 +02:00
2026-10-06 21:09:41 +02:00
2026-10-16 13:01:54 +13:00
2026-10-16 13:01:54 +13:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-09-20 12:45:07 -05:00
2026-09-19 12:26:06 -05:00
2026-08-16 07:16:33 +02:00
2026-01-16 15:24:35 +01:00
2026-10-08 12:50:13 +13:00
2026-07-17 10:25:49 +02:00
2026-10-08 12:50:13 +13:00
2026-01-16 15:24:35 +01:00
2026-09-17 00:07:46 +02:00
2026-09-17 00:07:46 +02:00
2026-08-09 01:34:22 +02:00
2026-01-16 15:24:35 +01:00
2026-10-08 12:50:13 +13:00
2026-01-16 15:24:35 +01:00
2026-07-17 10:29:13 +02:00
2026-07-17 10:29:13 +02:00
2026-10-08 12:50:13 +13:00
2026-09-27 09:09:44 +02:00
2026-10-06 08:17:16 +13:00
2026-10-06 08:17:16 +13:00
2026-10-04 00:07:16 +13:00
2026-10-04 00:07:16 +13:00
2026-09-30 18:12:43 +13:00
2026-09-26 10:22:50 +12:00
2026-10-06 09:53:49 +02:00
2026-10-05 17:53:38 +02:00
2026-10-08 12:50:13 +13:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-01-16 15:24:35 +01:00
2026-10-08 12:50:13 +13:00
2026-10-07 08:13:52 +13:00
2026-10-07 08:13:52 +13:00
2026-10-07 08:13:52 +13:00
2026-10-07 07:05:12 +13:00
2026-10-06 09:14:35 +13:00
2026-10-01 21:18:12 +13:00
2026-10-01 21:18:12 +13:00
2026-10-13 23:03:51 +13:00
2026-10-13 23:03:51 +13:00
2026-10-04 01:43:37 +13:00
2026-10-04 01:43:37 +13:00