View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0005893 | GNUnet | build process | public | 2019-09-13 19:35 | 2022-10-23 03:47 |
Reporter | nikita | Assigned To | willow | ||
Priority | normal | Severity | minor | Reproducibility | have not tried |
Status | feedback | Resolution | open | ||
Target Version | 0.18.1 | ||||
Summary | 0005893: replace /tmp in src and elsewhere with something like GNUNET_TMP, again | ||||
Description | This comes from reading a bug report never filed with us from a rather creative nixpkg. For pkgsrc I am in the same position as nixpkgs, /tmp might not always exist (see previous discussions on and the implementation of GNUNET_TMP for config files). We still hardcode /tmp in some files, and we should use something which is similar to GNUNET_TMP. | ||||
Tags | chore | ||||
|
I've made some progress with this. I pushed a small branch that removed a lot of references to /tmp in the C files, though a lot of what remains is in Python, shell scripts, and configuration files. I know that it's possible to get configuration values for paths in C source code, but is there a standard way to obtain GNUNET_TMP for Python/shell? |
|
Use `gnunet-config` CLI from withing python and parse the output: $ gnunet-config -f -s PATHS -o GNUNET_TMP |
|
Thanks for the command. I'm noticing a lot of duplicated code (sometimes slightly different) to obtain a temporary file path (examples in src/arm/test_gnunet_arm.py.in, src/statistics/test_gnunet_statistics.py.in). I notice that it reads certain environment variables first to find it, then falls back on "/tmp". What is the desired behaviour here? Should the other variables be checked, falling back to GNUNET_TMP, or should we just jump straight to GNUNET_TMP? There are similar checks in a few of the shell files: ${TMPDIR:-/tmp} There's at least one FIXME comment that indicates a desire to break those reused bits of code into a separate module. Where exactly would that go? Tangentially, what does that .in extension specify? I assume it's short for "input" to a macro expander or something similar. |
|
I think the goal was to make everything more portable. I am not sure _how_ exactly this issue is supposed to be fixed, however. ".in" files are files produced by automake. They get converted to the "actual" file then ./configure is run. You can, for example, get build time variables and put them into your script using "sed". Useful sometimes for OS-specific paths or binary locations. |
|
I this done or still in progress? I remember merging your branch a few days ago. |
|
I've pulled everything down to master, ran "rgrep tmp/", and cleaned up and annotated the results for your perusal. The most serious blocker right now is dealing with hardcoded paths in C that mention /tmp/ that are used by functions other than "GNUNET_DISK_directory_create/delete" (which I've found equivalents of that use values in .conf files). temp_locs (15,717 bytes)
(Two hardcoded strings) src/datastore/perf_plugin_datastore.c: GNUNET_snprintf (dir_name, sizeof(dir_name), "/tmp/perf-gnunet-datastore-%s", src/datastore/test_plugin_datastore.c: "/tmp/test-gnunet-datastore-plugin-%s", plugin_name); (Old docs) src/datastore/plugin_datastore_mysql.c: * through socket '/tmp/mysql.sock' (2)" it may be resolvable by src/datastore/plugin_datastore_mysql.c: * "ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock" (More docs) src/include/gnunet_disk_lib.h: * does NOT contain "XXXXXX" or "/tmp/". src/include/gnunet_disk_lib.h: * does NOT contain "XXXXXX" or "/tmp/". (Easily solved by bringing in the top-level configuration) src/testbed-logger/testbed-logger.conf.in:# STATS_DIR = /tmp/load src/testbed-logger/testbed-logger.conf:# STATS_DIR = /tmp/load (Python files with hardcoded tmp: solvable) src/integration-tests/gnunet_testing.py.in: shutil.rmtree("/tmp/" + testname, True) src/fs/test_gnunet_fs_psd.py.in: shutil.rmtree("/tmp/gnunet-test-fs-py-psd", True) src/fs/test_gnunet_fs_psd.py.in: shutil.rmtree("/tmp/gnunet-test-fs-py-psd", True) src/fs/test_gnunet_fs_idx.py.in: shutil.rmtree("/tmp/gnunet-test-fs-py-idx", True) src/fs/test_gnunet_fs_idx.py.in: shutil.rmtree("/tmp/gnunet-test-fs-py-idx", True) (hardcoded strings) src/fs/test_fs.c: fn = GNUNET_malloc (strlen ("/tmp/gnunet-basic_fsui_test/BASIC_FSUI_TEST") src/fs/test_fs.c: strlen ("/tmp/gnunet-basic_fsui_test/BASIC_FSUI_TEST") + 14, src/fs/test_fs.c: "/tmp/gnunet-basic_fsui_test/BASIC_FSUI_TEST%u", i); (more python!) src/fs/test_gnunet_fs_rec.py.in: shutil.rmtree("/tmp/gnunet-test-fs-py-rec", True) src/fs/test_gnunet_fs_rec.py.in: shutil.rmtree("/tmp/gnunet-test-fs-py-rec", True) (conf files can be updated easily) src/testbed/testbed.conf:# STATS_DIR = /tmp/load src/testbed/testbed.conf.in:# STATS_DIR = /tmp/load (I think these could be rewritten to be retrieved from a configuration file, though I'm not sure about which one) src/transport/gnunet-helper-transport-wlan-dummy.c:#define FIFO_FILE1 "/tmp/test-transport/api-wlan-p1/WLAN_FIFO_in" src/transport/gnunet-helper-transport-wlan-dummy.c:#define FIFO_FILE2 "/tmp/test-transport/api-wlan-p1/WLAN_FIFO_out" (More old/vague docs) src/transport/plugin_transport_unix.c: * Path of our unix domain socket (/tmp/unix-plugin) src/abd/test_abd_lookup.conf:#PREFIX = valgrind --leak-check=full --track-origins=yes --log-file=/tmp/credlog src/conversation/displaydot.sh:dot -Tpng `ls -tr1 /tmp/*rec*.dot | tail -1` | display /dev/stdin & src/conversation/displaydot.sh:dot -Tpng `ls -tr1 /tmp/*play*.dot | tail -1` | display /dev/stdin & src/conversation/test.sh:export GST_DEBUG_DUMP_DOT_DIR=/tmp/ src/conversation/test.sh:GST_DEBUG_DUMP_DOT_DIR=/tmp/ ./gnunet-helper-audio-record |GST_DEBUG_DUMP_DOT_DIR=/tmp/ ./gnunet-helper-audio-playback src/scalarproduct/test_scalarproduct.sh:PREFIX=/tmp/test-scalarproduct`date +%H%M%S` src/scalarproduct/test_scalarproduct_negativezero.sh:PREFIX=/tmp/test-scalarproduct`date +%H%M%S` src/scalarproduct/test_scalarproduct_negative.sh:PREFIX=/tmp/test-scalarproduct`date +%H%M%S` src/scalarproduct/perf_scalarproduct.sh:PREFIX=/tmp/test-scalarproduct`date +%H%M%S` (RPS subsystem test and profiler contain a *lot* of hardcoded paths) src/rps/test_rps.c: tofile ("/tmp/rps/peer_ids", src/rps/test_rps.c: file_name = "/tmp/rps/received_ids"; src/rps/test_rps.c: file_name_dh = "/tmp/rps/diehard_input"; src/rps/test_rps.c: key_char = filename + 20; /* Length of "/tmp/rps/sampler_el-" */ src/rps/test_rps.c: if (-1 == GNUNET_DISK_directory_scan ("/tmp/rps/", file_name_cb, NULL)) src/rps/test_rps.c: to_file ("/tmp/rps/view_sizes.txt", src/rps/test_rps.c: to_file ("/tmp/rps/count_in_views.txt", src/rps/test_rps.c: to_file ("/tmp/rps/repr.txt", src/rps/test_rps.c: to_file ("/tmp/rps/final_stats.dat", src/rps/test_rps.c: (void) GNUNET_DISK_directory_remove ("/tmp/rps/"); src/rps/test_rps.c: GNUNET_DISK_directory_create ("/tmp/rps/"); (Most of these are commented out, but might be necessary) src/rps/test_rps.conf:#PREFIX = valgrind --leak-check=full --show-leak-kinds=all --log-file=/tmp/rps/valgrind!gnunet-service-rps!%p src/rps/test_rps.conf:#PREFIX = valgrind --log-file=/tmp/rps/valgrind!gnunet-service-rps!%p src/rps/test_rps.conf:#OPTIONS=-l /tmp/rps_profiler_logs/rps-[]-%Y-%m-%d.log src/rps/test_rps.conf:#OPTIONS=-l /tmp/rps_profiler_logs/cadet-[]-%Y-%m-%d.log src/rps/test_rps.conf:#PREFIX = valgrind --log-file=/tmp/rps/valgrind_gnunet-service-cadet_%p src/rps/test_rps.conf:#GLOBAL_POSTFIX=-l /tmp/rps_profiler_logs/other-[]-%Y-%m-%d.log (RPS profiler's hardcoded paths) src/rps/gnunet-rps-profiler.c: tofile ("/tmp/rps/peer_ids", src/rps/gnunet-rps-profiler.c: "/tmp/rps/received_ids-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/diehard_input-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/diehard_input_raw-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/diehard_input_raw_aligned-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/received_ids-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/diehard_input-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/diehard_input_raw-%u", src/rps/gnunet-rps-profiler.c: "/tmp/rps/diehard_input_raw_aligned-%u", src/rps/gnunet-rps-profiler.c: key_char = filename + 20; /* Length of "/tmp/rps/sampler_el-" */ src/rps/gnunet-rps-profiler.c: if (-1 == GNUNET_DISK_directory_scan ("/tmp/rps/", file_name_cb, NULL)) src/rps/gnunet-rps-profiler.c: to_file ("/tmp/rps/view_sizes.txt", src/rps/gnunet-rps-profiler.c: to_file ("/tmp/rps/count_in_views.txt", src/rps/gnunet-rps-profiler.c: to_file ("/tmp/rps/repr.txt", src/rps/gnunet-rps-profiler.c: to_file ("/tmp/rps/final_stats.csv", src/rps/gnunet-rps-profiler.c: to_file ("/tmp/rps/final_stats.dat", src/rps/gnunet-rps-profiler.c: (void) GNUNET_DISK_directory_remove ("/tmp/rps/"); src/rps/gnunet-rps-profiler.c: GNUNET_DISK_directory_create ("/tmp/rps/"); src/rps/profiler_rps.conf:#PREFIX = valgrind --leak-check=full --show-leak-kinds=all --log-file=/tmp/rps/valgrind!gnunet-service-rps!%p src/rps/profiler_rps.conf:#PREFIX = valgrind --log-file=/tmp/rps/valgrind!gnunet-service-rps!%p src/rps/profiler_rps.conf:#OPTIONS=-l /tmp/rps_profiler_logs/rps-[]-%Y-%m-%d.log src/rps/profiler_rps.conf:OPTIONS=-l /tmp/rps_profiler_logs/cadet-[]-%Y-%m-%d.log src/rps/profiler_rps.conf:#GLOBAL_POSTFIX=-l /tmp/rps_profiler_logs/other-[]-%Y-%m-%d.log src/rps/rps-test_util.c: * @brief Try to ensure that `/tmp/rps` exists. src/rps/rps-test_util.c: GNUNET_DISK_directory_create ("/tmp/rps")) src/rps/rps-test_util.c: "Could not create directory `/tmp/rps'\n"); src/rps/rps-test_util.c: "/tmp/rps/%s-%s", (More python!) src/peerinfo-tool/test_gnunet_peerinfo.py.in: shutil.rmtree("/tmp/gnunet-test-peerinfo", True) src/peerinfo-tool/test_gnunet_peerinfo.py.in:# create hostkey via testing lib # FIXME: The /tmp/ location needs to be adjusted to the TMP variable! src/peerinfo-tool/test_gnunet_peerinfo.py.in: '/tmp/gnunet-test-peerinfo/.hostkey' src/peerinfo-tool/test_gnunet_peerinfo.py.in: shutil.rmtree("/tmp/gnunet-test-peerinfo", True) (Commented out but might be needed at some point) src/namestore/test_namestore_api.conf:#PREFIX = valgrind --track-origins=yes --log-file=/tmp/ns_tx.log src/namestore/test_namestore_api.conf:# PREFIX = valgrind --leak-check=full --track-origins=yes --log-file=/tmp/v_log src/namestore/test_namestore_api_sqlite.conf:# PREFIX = valgrind --leak-check=full --track-origins=yes --log-file=/tmp/v_log (More hardcoded paths in C, or docs) src/testing/testing.c: * Prefix (e.g. "/tmp/gnunet-testing/") we prepend to each src/testing/test_testing_portreservation.c: system = GNUNET_TESTING_system_create ("/tmp/gnunet-testing-new", (Might not be a problem?) src/util/disk.c: * @param t template (without XXXXX or "/tmp/") (Hardcoded path) src/util/test_socks.c: "-o", "UserKnownHostsFile /tmp/gnunet_test_socks_ssh_garbage", (might need updating) src/util/util.conf:# for all users (i.e. by simply using "/tmp/gnunet-system-runtime/"). src/util/util.conf:# GNUNET_TEST_HOME = /tmp/foo/bar (hardcoded preprocessor definition) src/util/test_crypto_edx25519.c:#define KEYFILE "/tmp/test-gnunet-crypto-edx25519.key" (More hardcoded paths) src/util/test_configuration.c: if (GNUNET_OK != GNUNET_CONFIGURATION_write (cfg, "/tmp/gnunet-test.conf")) src/util/test_configuration.c: GNUNET_assert (0 == unlink ("/tmp/gnunet-test.conf")); (hardcoded preprocessor definition) src/util/test_container_bloomfilter.c:#define TESTFILE "/tmp/bloomtest.dat" (hardcoded preprocessor definition) src/util/test_crypto_eddsa.c:#define KEYFILE "/tmp/test-gnunet-crypto-eddsa.key" (Results in autom4te.cache elided: presumably generated by build system) doc/system_specific/outdated-and-old-installation-instructions.txt:$ ./configure --prefix=/tmp/gnunet_build doc/system_specific/outdated-and-old-installation-instructions.txt:GNUnet will be installed in the directory /tmp/gnunet_build (Of course that doc/man/gnunet.conf.5.in:.Pa /tmp/foo doc/man/gnunet.conf.5.in:.Pa /tmp/gnunet/foo . doc/man/gnunet-statistics.1:.Dl $ gnunet-statistics -t /tmp/testbedARtmQv (Doxygen output elided as it's generated from files in src/) (Old docs) doc/handbook/gnunet.info-2:for example ‘/tmp/gnunet.smtp’. You also need to define a filter that doc/handbook/gnunet.info-2: /tmp/gnunet.smtp doc/handbook/gnunet.info-2: "X-mailer: GNUnet" PIPE = /tmp/gnunet.smtp doc/handbook/gnunet.info-1: through socket '/tmp/mysql.sock' (2) doc/handbook/gnunet.info-1: ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock doc/handbook/gnunet.info-1: UNIXPATH = /tmp/gnunet-service-transport.sock doc/old/handbook/chapters/developer.texi:example @code{/tmp/gnunet.smtp}. You also need to define a filter that is doc/old/handbook/chapters/developer.texi:/tmp/gnunet.smtp doc/old/handbook/chapters/developer.texi:"X-mailer: GNUnet" PIPE = /tmp/gnunet.smtp doc/old/handbook/chapters/installation.texi:through socket '/tmp/mysql.sock' (2) doc/old/handbook/chapters/installation.texi:ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock doc/old/handbook/chapters/installation.texi:UNIXPATH = /tmp/gnunet-service-transport.sock (Couple instances in configure.ac) configure.ac:AS_IF([ssh -D 12345 -o "BatchMode Yes" -o "UserKnownHostsFile /tmp/gnunet_test_cosks_ssh_garbage" -o "StrictHostKeyChecking no" 127.0.0.1 echo -n 2>/dev/null], configure.ac:AS_IF([test -f /tmp/gnunet_test_cosks_ssh_garbage], configure.ac: [rm -f /tmp/gnunet_test_cosks_ssh_garbage]) (Those also show up in configure script, so they've been elided) (config.log is a log file and was elided as the use of /tmp/ was not related to GNUnet code) (Can/should we rely on $tmp?) build-aux/config.guess:dummy=$tmp/dummy ; (These scripts used at all?) contrib/scripts/visualize_stats.sh:TMP=/tmp/.gnuplot_error contrib/scripts/gnunet-logread/gnunet-logread-ipc-sdedit.in:my $ipc = $opts{i} || '/tmp/gnunet-logread-ipc.sock'; contrib/scripts/gnunet-logread/gnunet-logread-ipc:ipc=${1:-/tmp/gnunet-logread-ipc.sock} contrib/scripts/gnunet-logread/gnunet-logread.in:my $DEFAULT_SOCKET = '/tmp/gnunet-logread-ipc.sock'; contrib/scripts/revisionary.sh:CMD_PREPARATION="./bootstrap; ./configure --prefix=/tmp/gnb --with-extractor=/usr/local" (AppArmor seems to lean on it) contrib/apparmor/gnunet-service-mesh: /tmp/gnunet-system-runtime/gnunet-service-mesh.sock w, contrib/apparmor/gnunet-service-cadet: /tmp/gnunet-system-runtime/gnunet-service-cadet.sock rw, contrib/apparmor/gnunet-service-identity: /tmp/gnunet-*-runtime/ a, contrib/apparmor/gnunet-service-nse: /tmp/gnunet-system-runtime/gnunet-service-nse.sock rw, contrib/apparmor/gnunet-service-testbed: /tmp/gnunet-system-runtime/ w, contrib/apparmor/gnunet-service-testbed: /tmp/gnunet-system-runtime/gnunet-service-testbed-barrier.sock w, contrib/apparmor/gnunet-service-testbed: /tmp/gnunet-system-runtime/gnunet-service-testbed.sock w, contrib/apparmor/gnunet-service-resolver: /tmp/gnunet-system-runtime/gnunet-service-resolver.sock w, contrib/apparmor/gnunet-service-namestore: /tmp/gnunet-*-runtime/ a, contrib/apparmor/gnunet-service-arm: /tmp/gnunet-*-runtime/ rw, contrib/apparmor/gnunet-service-arm:# /tmp/gnunet-*-runtime/gnunet-service-arm.sock rw, contrib/apparmor/gnunet-service-arm:# /tmp/gnunet-*-runtime/gnunet-service-namestore.sock r, contrib/apparmor/gnunet-service-arm:# /tmp/gnunet-*-runtime/gnunet-service-identity.sock r, contrib/apparmor/gnunet-service-arm:# /tmp/gnunet-*-runtime/gnunet-service-gns.sock r, contrib/apparmor/gnunet-service-arm: /tmp/gnunet-*-runtime/gnunet-service-*.sock rw, contrib/apparmor/gnunet-arm: /tmp/gnunet-*-runtime/ rw, contrib/apparmor/gnunet-arm: /tmp/gnunet-*-runtime/gnunet-service-arm.sock rw, contrib/apparmor/gnunet-service-template: /tmp/gnunet-system-runtime/ w, contrib/apparmor/gnunet-service-template: /tmp/gnunet-system-runtime/gnunet-service-template.sock w, contrib/apparmor/gnunet-service-gns: /tmp/gnunet-*-runtime/gnunet-service-gns.sock rw, contrib/apparmor/gnunet-service-fs: /tmp/gnunet-system-runtime/gnunet-service-fs.sock w, contrib/apparmor/abstractions/gnunet-test: /tmp/testbed*/ rw, contrib/apparmor/abstractions/gnunet-test: /tmp/testbed*/** rwk, contrib/apparmor/abstractions/gnunet-test: /tmp/testbed-helper*/ rw, contrib/apparmor/abstractions/gnunet-test: /tmp/gnunet-testing* rw, contrib/apparmor/abstractions/gnunet-test: /tmp/gnunet_service_test*/ rw, contrib/apparmor/abstractions/gnunet-test: /tmp/gnunet_service_test*/** rw, contrib/apparmor/gnunet-service-testbed-logger: /tmp/archlinux_*.dat w, contrib/apparmor/gnunet-service-testbed-logger: /tmp/gnunet-system-runtime/ w, contrib/apparmor/gnunet-service-testbed-logger: /tmp/gnunet-system-runtime/gnunet-gnunet-testbed-logger.sock w, contrib/apparmor/gnunet-service-revocation: /tmp/gnunet-system-runtime/gnunet-service-revocation.sock rw, contrib/apparmor/gnunet-service-dht: /tmp/gnunet-system-runtime/gnunet-service-dht.sock w, contrib/apparmor/gnunet-service-dht: /tmp/gnunet-datacachebloom* rw, (Where are these folders generated?) contrib/services/openrc/gnunet.initd: rm -rf /tmp/gnunet-gnunet-runtime >/dev/null 2>&1 contrib/services/openrc/gnunet.initd: rm -rf /tmp/gnunet-system-runtime >/dev/null 2>&1 (Don't know enoguh about Docker to know if these are a problem) contrib/docker/Dockerfile: /tmp/* contrib/docker/Dockerfile:RUN wget -O /tmp/gnurl.tar.xz https://ftpmirror.gnu.org/gnu/gnunet/gnurl-${GNURL_VERSION}.tar.xz contrib/docker/Dockerfile: rm -rf /tmp/gnurl* (these are probably fine, right?) debian/rules: mkdir -p debian/tmp/etc debian/rules: cp debian/etc/gnunet.conf debian/tmp/etc/ debian/rules: rm -f debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/*.la \ debian/rules: debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/gnunet/*.la \ debian/rules: debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/gnunet/nss/*.la \ debian/rules: debian/tmp/usr/share/doc/gnunet/COPYING \ debian/rules: debian/tmp/usr/bin/gnunet-service-template \ debian/rules: debian/tmp/usr/bin/gnunet-template \ debian/rules: debian/tmp/usr/bin/gnunet-helper-transport-wlan-dummy (Build string seems to use /tmp/ too) .buildbot/build.sh:rm -rf /tmp/gnunet .buildbot/build.sh:./bootstrap && ./configure --prefix=/tmp/gnunet --enable-experimental && make -j16 |
|
Ok. I think most of the C files don't have any business hard coding the /tmp locations if they could be calling GNUNET_CONFIGURATION. But, this was just to do some bug housekeeping to I will bump this to 0.18.1 for now |
Date Modified | Username | Field | Change |
---|---|---|---|
2019-09-13 19:35 | nikita | New Issue | |
2019-11-16 18:38 | Christian Grothoff | Target Version | 0.12.0 => |
2020-04-29 12:20 | nikita | Relationship added | related to 0006114 |
2020-06-01 00:49 |
|
Issue cloned: 0006303 | |
2020-10-29 11:15 | schanzen | Assigned To | => schanzen |
2020-10-29 11:15 | schanzen | Status | new => acknowledged |
2020-10-29 11:15 | schanzen | Target Version | => 0.15.0 |
2020-11-11 11:03 | schanzen | Target Version | 0.15.0 => 0.14.1 |
2021-02-21 11:00 | schanzen | Tag Attached: chore | |
2021-04-05 11:25 | schanzen | Target Version | 0.14.1 => 0.14.2 |
2021-06-10 19:37 | schanzen | Target Version | 0.14.2 => 0.15.0 |
2021-07-31 10:58 | schanzen | Target Version | 0.15.0 => 0.15.1 |
2022-02-26 23:14 | schanzen | Target Version | 0.15.1 => 0.17.0 |
2022-06-04 23:13 | schanzen | Target Version | 0.17.0 => 0.18.0 |
2022-08-28 22:57 | willow | Note Added: 0019066 | |
2022-08-29 09:05 | schanzen | Note Added: 0019070 | |
2022-08-29 10:33 | schanzen | Target Version | 0.18.0 => 0.17.4 |
2022-08-29 10:34 | schanzen | Target Version | 0.17.4 => 0.17.5 |
2022-08-29 10:35 | schanzen | Assigned To | schanzen => willow |
2022-08-29 20:08 | willow | Note Added: 0019073 | |
2022-08-29 20:08 | willow | Status | acknowledged => assigned |
2022-08-29 20:36 | willow | Note Edited: 0019073 | |
2022-08-29 23:03 | schanzen | Note Added: 0019074 | |
2022-09-04 11:05 | schanzen | Target Version | 0.17.5 => 0.17.6 |
2022-09-26 05:01 | schanzen | Target Version | 0.17.6 => 0.17.7 |
2022-10-21 07:33 | schanzen | Target Version | 0.17.7 => 0.18.0 |
2022-10-22 15:11 | schanzen | Note Added: 0019269 | |
2022-10-22 15:12 | schanzen | Status | assigned => feedback |
2022-10-22 16:49 | willow | Note Added: 0019270 | |
2022-10-22 16:49 | willow | File Added: temp_locs | |
2022-10-23 03:47 | schanzen | Note Added: 0019275 | |
2022-10-23 03:47 | schanzen | Target Version | 0.18.0 => 0.18.1 |