diff -Nru cockpit-podman-60/cockpit-podman.spec cockpit-podman-61/cockpit-podman.spec --- cockpit-podman-60/cockpit-podman.spec 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/cockpit-podman.spec 2023-01-25 09:16:41.000000000 +0000 @@ -16,10 +16,10 @@ # Name: cockpit-podman -Version: 60 +Version: 61 Release: 1%{?dist} Summary: Cockpit component for Podman containers -License: LGPLv2+ +License: LGPL-2.1-or-later URL: https://github.com/cockpit-project/cockpit-podman Source0: https://github.com/cockpit-project/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz diff -Nru cockpit-podman-60/debian/changelog cockpit-podman-61/debian/changelog --- cockpit-podman-60/debian/changelog 2023-01-17 05:59:11.000000000 +0000 +++ cockpit-podman-61/debian/changelog 2023-01-31 09:08:28.000000000 +0000 @@ -1,8 +1,16 @@ -cockpit-podman (60-1~bpo22.04.1) jammy-backports; urgency=medium +cockpit-podman (61-1~bpo22.04.1) jammy-backports; urgency=medium * No-change backport to jammy - -- Martin Pitt Tue, 17 Jan 2023 06:59:11 +0100 + -- Martin Pitt Tue, 31 Jan 2023 10:08:28 +0100 + +cockpit-podman (61-1) unstable; urgency=medium + + * New upstream release: + - Use container image's default command + - Fix tabular numbers font + + -- Martin Pitt Wed, 25 Jan 2023 16:47:26 +0100 cockpit-podman (60-1) unstable; urgency=medium Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/index.css.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/index.css.gz differ Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/index.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/index.js.gz differ diff -Nru cockpit-podman-60/dist/po.cs.js cockpit-podman-61/dist/po.cs.js --- cockpit-podman-60/dist/po.cs.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.cs.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1==l?0:l>=2&&l<=4?1:2,language:"cs","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.cs.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.cs.js.gz differ diff -Nru cockpit-podman-60/dist/po.de.js cockpit-podman-61/dist/po.de.js --- cockpit-podman-60/dist/po.de.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.de.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1!=l,language:"de","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.de.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.de.js.gz differ diff -Nru cockpit-podman-60/dist/po.es.js cockpit-podman-61/dist/po.es.js --- cockpit-podman-60/dist/po.es.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.es.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1!=l,language:"es","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.es.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.es.js.gz differ diff -Nru cockpit-podman-60/dist/po.fi.js cockpit-podman-61/dist/po.fi.js --- cockpit-podman-60/dist/po.fi.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.fi.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1!=l,language:"fi","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.fi.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.fi.js.gz differ diff -Nru cockpit-podman-60/dist/po.fr.js cockpit-podman-61/dist/po.fr.js --- cockpit-podman-60/dist/po.fr.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.fr.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>l>1,language:"fr","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.fr.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.fr.js.gz differ diff -Nru cockpit-podman-60/dist/po.ja.js cockpit-podman-61/dist/po.ja.js --- cockpit-podman-60/dist/po.ja.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.ja.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":a=>0,language:"ja","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.ja.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.ja.js.gz differ diff -Nru cockpit-podman-60/dist/po.ka.js cockpit-podman-61/dist/po.ka.js --- cockpit-podman-60/dist/po.ka.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.ka.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":a=>1!=a,language:"ka","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.ka.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.ka.js.gz differ diff -Nru cockpit-podman-60/dist/po.ko.js cockpit-podman-61/dist/po.ko.js --- cockpit-podman-60/dist/po.ko.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.ko.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>0,language:"ko","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.ko.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.ko.js.gz differ diff -Nru cockpit-podman-60/dist/po.pl.js cockpit-podman-61/dist/po.pl.js --- cockpit-podman-60/dist/po.pl.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.pl.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1==l?0:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?1:2,language:"pl","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.pl.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.pl.js.gz differ diff -Nru cockpit-podman-60/dist/po.sk.js cockpit-podman-61/dist/po.sk.js --- cockpit-podman-60/dist/po.sk.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.sk.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1==l?0:l>=2&&l<=4?1:2,language:"sk","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.sk.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.sk.js.gz differ diff -Nru cockpit-podman-60/dist/po.sv.js cockpit-podman-61/dist/po.sv.js --- cockpit-podman-60/dist/po.sv.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.sv.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1!=l,language:"sv","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.sv.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.sv.js.gz differ diff -Nru cockpit-podman-60/dist/po.tr.js cockpit-podman-61/dist/po.tr.js --- cockpit-podman-60/dist/po.tr.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.tr.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>1!=l,language:"tr","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.tr.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.tr.js.gz differ diff -Nru cockpit-podman-60/dist/po.uk.js cockpit-podman-61/dist/po.uk.js --- cockpit-podman-60/dist/po.uk.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.uk.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>l%10==1&&l%100!=11?0:l%10>=2&&l%10<=4&&(l%100<10||l%100>=20)?1:2,language:"uk","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.uk.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.uk.js.gz differ diff -Nru cockpit-podman-60/dist/po.zh_CN.js cockpit-podman-61/dist/po.zh_CN.js --- cockpit-podman-60/dist/po.zh_CN.js 1970-01-01 00:00:00.000000000 +0000 +++ cockpit-podman-61/dist/po.zh_CN.js 2023-01-25 09:16:41.000000000 +0000 @@ -0,0 +1 @@ +cockpit.locale({"":{"plural-forms":l=>0,language:"zh_CN","language-direction":"ltr"}}); \ No newline at end of file Binary files /tmp/tmpd3d6swn8/8qEe5h4v4c/cockpit-podman-60/dist/po.zh_CN.js.gz and /tmp/tmpd3d6swn8/Ib8GOl65et/cockpit-podman-61/dist/po.zh_CN.js.gz differ diff -Nru cockpit-podman-60/Makefile cockpit-podman-61/Makefile --- cockpit-podman-60/Makefile 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/Makefile 2023-01-25 09:16:41.000000000 +0000 @@ -39,7 +39,7 @@ $(NULL) COCKPIT_REPO_URL = https://github.com/cockpit-project/cockpit.git -COCKPIT_REPO_COMMIT = e4a1c8a11c1fce7e038d1e2c05b2f35c4472d682 # 282.1 + #18077 +COCKPIT_REPO_COMMIT = 80a7c7cfed9157915067666fe95b298896f2aea8 # 284 $(COCKPIT_REPO_FILES): $(COCKPIT_REPO_STAMP) COCKPIT_REPO_TREE = '$(strip $(COCKPIT_REPO_COMMIT))^{tree}' diff -Nru cockpit-podman-60/package.json cockpit-podman-61/package.json --- cockpit-podman-60/package.json 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/package.json 2023-01-25 09:16:41.000000000 +0000 @@ -54,10 +54,10 @@ "webpack-cli": "^4.6.0" }, "dependencies": { - "@patternfly/patternfly": "4.222.4", - "@patternfly/react-core": "4.268.0", - "@patternfly/react-styles": "4.92.3", - "@patternfly/react-table": "4.112.16", + "@patternfly/patternfly": "4.224.2", + "@patternfly/react-core": "4.276.2", + "@patternfly/react-styles": "4.92.5", + "@patternfly/react-table": "4.112.35", "date-fns": "2.28.0", "docker-names": "1.2.1", "prop-types": "15.8.1", diff -Nru cockpit-podman-60/package-lock.json cockpit-podman-61/package-lock.json --- cockpit-podman-60/package-lock.json 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/package-lock.json 2023-01-25 09:16:41.000000000 +0000 @@ -419,13 +419,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", - "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", + "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", "dev": true, "dependencies": { "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", + "@babel/traverse": "^7.20.13", "@babel/types": "^7.20.7" }, "engines": { @@ -447,9 +447,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", - "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", + "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1219,9 +1219,9 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", - "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", + "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", @@ -1529,9 +1529,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", - "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" @@ -1555,9 +1555,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", - "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", + "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", @@ -1566,7 +1566,7 @@ "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.7", + "@babel/parser": "^7.20.13", "@babel/types": "^7.20.7", "debug": "^4.1.0", "globals": "^11.1.0" @@ -1590,19 +1590,19 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", - "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.0.tgz", + "integrity": "sha512-zJ6hb3FDgBbO8d2e83vg6zq7tNvDqSq9RwdwfzJ8tdm9JHNvANq2fqwyRn6mlpUb7CwTs5ILdUrGwi9Gk4vY5w==", "dev": true, "engines": { - "node": "^12 || ^14 || >=16" + "node": "^14 || ^16 || >=18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/csstools" }, "peerDependencies": { - "postcss": "^8.2", + "postcss": "^8.4", "postcss-selector-parser": "^6.0.10" } }, @@ -1861,18 +1861,18 @@ } }, "node_modules/@patternfly/patternfly": { - "version": "4.222.4", - "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.222.4.tgz", - "integrity": "sha512-+0fk4dzxEbWn+hgaOnR0BjfeUdEeVVrqfH7+GFeFc+RKjEMjIR/BZbWWN8YQDezmDv6A32gHmEKaY3Uwbt06Lw==" + "version": "4.224.2", + "resolved": "https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-4.224.2.tgz", + "integrity": "sha512-HGNV26uyHSIECuhjPg/WGn0mXbAotcs6ODfhAOkfYjIgGylddgiwElxUe1rpEHV5mQJJ2rMn4OdeJIIpzRX61g==" }, "node_modules/@patternfly/react-core": { - "version": "4.268.0", - "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-4.268.0.tgz", - "integrity": "sha512-Tc5mt9/PAI1sZz5f/GCsTGav05VrqYFFlv5Wu6TmJkJd2A9YwauQ1GZ7yY1PqLjeRH523fwseIAAMG/Z/ZwJEQ==", - "dependencies": { - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "@patternfly/react-tokens": "^4.94.3", + "version": "4.276.2", + "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-4.276.2.tgz", + "integrity": "sha512-5xaUHsNKw+C/qM8dIupF0jP8dUELr/co5aBlRitJJ8npaFHCwYptsgKqZxE1ti/QULVAF31/6AoTTPOrfBCr9Q==", + "dependencies": { + "@patternfly/react-icons": "^4.93.5", + "@patternfly/react-styles": "^4.92.5", + "@patternfly/react-tokens": "^4.94.5", "focus-trap": "6.9.2", "react-dropzone": "9.0.0", "tippy.js": "5.1.2", @@ -1884,28 +1884,28 @@ } }, "node_modules/@patternfly/react-icons": { - "version": "4.93.3", - "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-4.93.3.tgz", - "integrity": "sha512-OIEeTc4Noi9XOIRF3OB3sz9dRnxr1h4eNIzIeZwRd8xXWCQxYcrllxPV98F3+RpL4ZCH2QWb/2gG4mHrVyX+0A==", + "version": "4.93.5", + "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-4.93.5.tgz", + "integrity": "sha512-0TRgONPr0C0/wzOjwlOI9WB068m/8VG9sW3Y+4PBDyimVRUg2blSzeQbeAjWu/O1mNMwpGtqSqk9XHjGmAxwJQ==", "peerDependencies": { "react": "^16.8 || ^17 || ^18", "react-dom": "^16.8 || ^17 || ^18" } }, "node_modules/@patternfly/react-styles": { - "version": "4.92.3", - "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-4.92.3.tgz", - "integrity": "sha512-jC8F71trFWVYM7YVTP/3MBLwLZDCY3tgHeAmSKdcw6R607LK4rtCzfw5lt2IHNmAjQ0ggqDlJGWsJAfGMe4iPA==" + "version": "4.92.5", + "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-4.92.5.tgz", + "integrity": "sha512-oV7grkjEw/68Q5+CReaDddgz89He5QkdToIklvcTOCqzI1GmpAACmsfCb3wusqcwROj0hOHBAzf2cRZcRkdqAg==" }, "node_modules/@patternfly/react-table": { - "version": "4.112.16", - "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-4.112.16.tgz", - "integrity": "sha512-+n8AAEW+Z5cAq4Hqapx9sityd821gpdzzM8mzLzOFgQRQH6+e0oEJEDO6NWwtyrlzOzyg/ZBntl7E3FpP8hhgQ==", - "dependencies": { - "@patternfly/react-core": "^4.268.0", - "@patternfly/react-icons": "^4.93.3", - "@patternfly/react-styles": "^4.92.3", - "@patternfly/react-tokens": "^4.94.3", + "version": "4.112.35", + "resolved": "https://registry.npmjs.org/@patternfly/react-table/-/react-table-4.112.35.tgz", + "integrity": "sha512-H9Vm/y80mBQo9jFXsMcS/u/+OaHmFnDXRPaAk/nUNRNn53f3bQmHW1Lqbu75wEHCefa3ANcihmhoVPg70xfv/Q==", + "dependencies": { + "@patternfly/react-core": "^4.276.2", + "@patternfly/react-icons": "^4.93.5", + "@patternfly/react-styles": "^4.92.5", + "@patternfly/react-tokens": "^4.94.5", "lodash": "^4.17.19", "tslib": "^2.0.0" }, @@ -1915,9 +1915,9 @@ } }, "node_modules/@patternfly/react-tokens": { - "version": "4.94.3", - "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-4.94.3.tgz", - "integrity": "sha512-Rq8RMJ/iu/nTDidEb/xQWUMXFW+W4MuoLBonTAFv/Bx8G3gFMHU2JGtv9R5SvAYU6Eux9EkjCG7h3xiLqwH3jg==" + "version": "4.94.5", + "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-4.94.5.tgz", + "integrity": "sha512-IbGIUkt0wL9JRXfQZBm072sFlZBDJMiwJRJ8XrIPrfiQka5OMWOcgM2d8BmExkV+SqnpahbOnHD0wBG0kWdsLg==" }, "node_modules/@trysound/sax": { "version": "0.2.0", @@ -2704,9 +2704,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001442", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz", - "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==", + "version": "1.0.30001446", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001446.tgz", + "integrity": "sha512-fEoga4PrImGcwUUGEol/PoFCSBnSkA9drgdkxXkJLsUBOnJ8rs3zDv6ApqYXGQFOyMPsjh79naWhF4DAxbF8rw==", "dev": true, "funding": [ { @@ -2973,9 +2973,9 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", - "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "version": "3.27.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", + "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", "dev": true, "dependencies": { "browserslist": "^4.21.4" @@ -3213,9 +3213,9 @@ } }, "node_modules/css-minimizer-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -3698,19 +3698,20 @@ } }, "node_modules/es-get-iterator": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz", - "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.0", - "has-symbols": "^1.0.1", - "is-arguments": "^1.1.0", + "get-intrinsic": "^1.1.3", + "has-symbols": "^1.0.3", + "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", - "is-string": "^1.0.5", - "isarray": "^2.0.5" + "is-string": "^1.0.7", + "isarray": "^2.0.5", + "stop-iteration-iterator": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3912,13 +3913,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -3992,23 +3994,25 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.1", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", "tsconfig-paths": "^3.14.1" }, "engines": { @@ -4019,12 +4023,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -4039,16 +4043,10 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.0.tgz", - "integrity": "sha512-EGGRKhzejSzXKtjmEjWNtr4SK/DkMkSzkBH7g7e7moBDXZXrqaUIxkmD7uF93upMysc4dKYEJwupu7Dff+ShwA==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "dependencies": { "@babel/runtime": "^7.20.7", @@ -4117,9 +4115,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.31.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.31.11.tgz", - "integrity": "sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==", + "version": "7.32.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz", + "integrity": "sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www==", "dev": true, "dependencies": { "array-includes": "^3.1.6", @@ -4134,7 +4132,7 @@ "object.hasown": "^1.1.2", "object.values": "^1.1.6", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", + "resolve": "^2.0.0-next.4", "semver": "^6.3.0", "string.prototype.matchall": "^4.0.8" }, @@ -4765,9 +4763,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -5736,9 +5734,9 @@ } }, "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", "dev": true, "engines": { "node": ">= 8" @@ -6324,9 +6322,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7271,9 +7269,9 @@ } }, "node_modules/punycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.2.0.tgz", - "integrity": "sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" @@ -8086,6 +8084,18 @@ "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "dev": true, + "dependencies": { + "internal-slot": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", @@ -8792,9 +8802,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "dependencies": { "randombytes": "^2.1.0" diff -Nru cockpit-podman-60/packaging/arch/PKGBUILD cockpit-podman-61/packaging/arch/PKGBUILD --- cockpit-podman-60/packaging/arch/PKGBUILD 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/packaging/arch/PKGBUILD 2023-01-25 09:16:41.000000000 +0000 @@ -1,12 +1,12 @@ pkgname=cockpit-podman -pkgver=60 +pkgver=61 pkgrel=1 pkgdesc='Cockpit UI for podman containers' arch=('any') url='https://github.com/cockpit-project/cockpit-podman' license=(LGPL) depends=(cockpit podman) -source=("cockpit-podman-60.tar.xz") +source=("cockpit-podman-61.tar.xz") sha256sums=('SKIP') package() { diff -Nru cockpit-podman-60/packaging/debian/changelog cockpit-podman-61/packaging/debian/changelog --- cockpit-podman-60/packaging/debian/changelog 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/packaging/debian/changelog 2023-01-25 09:16:41.000000000 +0000 @@ -1,4 +1,4 @@ -cockpit-podman (60-1) UNRELEASED; urgency=medium +cockpit-podman (61-1) UNRELEASED; urgency=medium * Upstream build diff -Nru cockpit-podman-60/pkg/lib/cockpit-components-file-autocomplete.jsx cockpit-podman-61/pkg/lib/cockpit-components-file-autocomplete.jsx --- cockpit-podman-60/pkg/lib/cockpit-components-file-autocomplete.jsx 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/cockpit-components-file-autocomplete.jsx 2023-01-25 09:16:41.000000000 +0000 @@ -94,7 +94,8 @@ const channel = cockpit.channel({ payload: "fslist1", path, - superuser: this.props.superuser + superuser: this.props.superuser, + watch: false, }); const results = []; diff -Nru cockpit-podman-60/pkg/lib/cockpit-components-shutdown.jsx cockpit-podman-61/pkg/lib/cockpit-components-shutdown.jsx --- cockpit-podman-60/pkg/lib/cockpit-components-shutdown.jsx 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/cockpit-components-shutdown.jsx 2023-01-25 09:16:41.000000000 +0000 @@ -214,7 +214,7 @@ locale={timeformat.dateFormatLang()} weekStart={timeformat.firstDayOfWeek()} onBlur={this.calculate} - onChange={(d, ds) => this.updateDate(d, ds)} + onChange={(_, d, ds) => this.updateDate(d, ds)} placeholder={timeformat.dateShortFormat()} validators={[this.dateRangeValidator]} value={this.state.date} @@ -226,7 +226,7 @@ invalidFormatErrorMessage="" menuAppendTo={() => document.body} onBlur={this.calculate} - onChange={(time, h, m) => this.updateTime(time, h, m) } /> + onChange={(_, time, h, m) => this.updateTime(time, h, m) } /> } diff -Nru cockpit-podman-60/pkg/lib/cockpit-components-table.jsx cockpit-podman-61/pkg/lib/cockpit-components-table.jsx --- cockpit-podman-60/pkg/lib/cockpit-components-table.jsx 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/cockpit-components-table.jsx 2023-01-25 09:16:41.000000000 +0000 @@ -218,16 +218,16 @@ {row.columns.map((cell, cellIndex) => { const { key, ...cellProps } = cell.props || {}; const dataLabel = typeof cells[cellIndex] == 'object' ? cells[cellIndex].title : cells[cellIndex]; - + const colKey = dataLabel || cellIndex; if (cells[cellIndex] && cells[cellIndex].header) return ( - + {typeof cell == 'object' ? cell.title : cell} ); return ( - + {typeof cell == 'object' ? cell.title : cell} ); diff -Nru cockpit-podman-60/pkg/lib/cockpit-components-terminal.jsx cockpit-podman-61/pkg/lib/cockpit-components-terminal.jsx --- cockpit-podman-60/pkg/lib/cockpit-components-terminal.jsx 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/cockpit-components-terminal.jsx 2023-01-25 09:16:41.000000000 +0000 @@ -21,6 +21,7 @@ import PropTypes from "prop-types"; import { Modal, Button } from "@patternfly/react-core"; import { Terminal as Term } from "xterm"; +import { CanvasAddon } from 'xterm-addon-canvas'; import { ContextMenu } from "cockpit-components-context-menu.jsx"; import cockpit from "cockpit"; @@ -136,11 +137,17 @@ if (props.onTitleChanged) term.onTitleChange(props.onTitleChanged); - this.state = { terminal: term }; + this.terminal = term; + this.state = { + showPastingModal: false, + cols: props.cols || 80, + rows: props.rows || 25 + }; } componentDidMount() { - this.state.terminal.open(this.terminalRef.current); + this.terminal.open(this.terminalRef.current); + this.terminal.loadAddon(new CanvasAddon()); this.connectChannel(); if (!this.props.rows) { @@ -148,11 +155,11 @@ this.onWindowResize(); } this.setTerminalTheme(this.props.theme || 'black-theme'); - this.state.terminal.focus(); + this.terminal.focus(); } resizeTerminal(cols, rows) { - this.state.terminal.resize(cols, rows); + this.terminal.resize(cols, rows); this.props.channel.control({ window: { rows: rows, @@ -163,7 +170,7 @@ componentDidUpdate(prevProps, prevState) { if (prevProps.fontSize !== this.props.fontSize) { - this.state.terminal.setOption("fontSize", this.props.fontSize); + this.terminal.options.fontSize = this.props.fontSize; // After font size is changed, resize needs to be triggered const dimensions = this.calculateDimensions(); @@ -182,7 +189,7 @@ this.setTerminalTheme(this.props.theme); if (prevProps.channel !== this.props.channel) { - this.state.terminal.reset(); + this.terminal.reset(); this.disconnectChannel(prevProps.channel); this.connectChannel(); this.props.channel.control({ @@ -192,7 +199,7 @@ } }); } - this.state.terminal.focus(); + this.terminal.focus(); } render() { @@ -211,7 +218,7 @@ {_("Your browser does not allow paste from the context menu. You can use Shift+Insert.")}
this.props.channel.send(text)) .catch(e => this.setState({ showPastingModal: true })) - .finally(() => this.state.terminal.focus()); + .finally(() => this.terminal.focus()); } catch (error) { this.setState({ showPastingModal: true }); } @@ -241,20 +248,20 @@ getText() { try { - navigator.clipboard.writeText(this.state.terminal.getSelection()) + navigator.clipboard.writeText(this.terminal.getSelection()) .catch(e => console.error('Text could not be copied, use Ctrl+Insert ', e ? e.toString() : "")) - .finally(() => this.state.terminal.focus()); + .finally(() => this.terminal.focus()); } catch (error) { console.error('Text could not be copied, use Ctrl+Insert:', error.toString()); } } onChannelMessage(event, data) { - this.state.terminal.write(data); + this.terminal.write(data); } onChannelClose(event, options) { - const term = this.state.terminal; + const term = this.terminal; term.write('\x1b[31m' + (options.problem || 'disconnected') + '\x1b[m\r\n'); term.cursorHidden = true; term.refresh(term.rows, term.rows); @@ -279,19 +286,19 @@ } reset() { - this.state.terminal.reset(); + this.terminal.reset(); this.props.channel.send(String.fromCharCode(12)); // Send SIGWINCH to show prompt on attaching } focus() { - if (this.state.terminal) - this.state.terminal.focus(); + if (this.terminal) + this.terminal.focus(); } calculateDimensions() { const padding = 10; // Leave a bit of space around terminal - const realHeight = this.state.terminal._core._renderService.dimensions.actualCellHeight; - const realWidth = this.state.terminal._core._renderService.dimensions.actualCellWidth; + const realHeight = this.terminal._core._renderService.dimensions.css.cell.height; + const realWidth = this.terminal._core._renderService.dimensions.css.cell.width; if (realHeight && realWidth && realWidth !== 0 && realHeight !== 0) return { rows: Math.floor((this.terminalRef.current.parentElement.clientHeight - padding) / realHeight), @@ -306,7 +313,7 @@ } setTerminalTheme(theme) { - this.state.terminal.setOption("theme", themes[theme]); + this.terminal.options.theme = themes[theme]; } onBeforeUnload(event) { diff -Nru cockpit-podman-60/pkg/lib/cockpit.js cockpit-podman-61/pkg/lib/cockpit.js --- cockpit-podman-60/pkg/lib/cockpit.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/cockpit.js 2023-01-25 09:16:41.000000000 +0000 @@ -2950,12 +2950,6 @@ data: { value: { }, enumerable: false } }); - if (typeof window.$ === "function") { - Object.defineProperty(self, window.$.expando, { - value: { }, writable: true, enumerable: false - }); - } - if (!options) options = { }; @@ -3071,12 +3065,6 @@ } }); - if (typeof window.$ === "function") { - Object.defineProperty(self, window.$.expando, { - value: { }, writable: true, enumerable: false - }); - } - /* Subscribe to signals once for all proxies */ const match = { interface: iface, path_namespace: path_namespace }; diff -Nru cockpit-podman-60/pkg/lib/cockpit-po-plugin.js cockpit-podman-61/pkg/lib/cockpit-po-plugin.js --- cockpit-podman-60/pkg/lib/cockpit-po-plugin.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/cockpit-po-plugin.js 2023-01-25 09:16:41.000000000 +0000 @@ -12,7 +12,6 @@ if (!options) options = {}; this.subdir = options.subdir || ''; - this.reference_patterns = options.reference_patterns; this.wrapper = options.wrapper || 'cockpit.locale(PO_DATA);'; } @@ -64,39 +63,10 @@ return expr; } - build_patterns(compilation, extras) { - const patterns = [ - // all translations for that page, including manifest.json and *.html - `pkg/${this.subdir}.*`, - ]; - - // add translations from libraries outside of page directory - compilation.getStats().compilation.fileDependencies.forEach(path => { - if (path.startsWith(srcdir) && path.indexOf('node_modules/') < 0) - patterns.push(path.slice(srcdir.length + 1)); - }); - - Array.prototype.push.apply(patterns, extras); - - return patterns.map((p) => new RegExp(`^${p}:[0-9]+$`)); - } - - check_reference_patterns(patterns, references) { - for (const reference of references) { - for (const pattern of patterns) { - if (reference.match(pattern)) { - return true; - } - } - } - } - buildFile(po_file, compilation) { compilation.fileDependencies.add(po_file); return new Promise((resolve, reject) => { - const patterns = this.build_patterns(compilation, this.reference_patterns); - const parsed = gettext_parser.po.parse(fs.readFileSync(po_file), 'utf8'); delete parsed.translations[""][""]; // second header copy @@ -116,8 +86,9 @@ const context_prefix = msgctxt ? msgctxt + '\u0004' : ''; /* for cockpit.ngettext */ for (const [msgid, translation] of Object.entries(context)) { + /* Only include msgids which appear in this source directory */ const references = translation.comments.reference.split(/\s/); - if (!this.check_reference_patterns(patterns, references)) + if (!references.some(str => str.startsWith(`pkg/${this.subdir}`))) continue; if (translation.comments.flag && translation.comments.flag.match(/\bfuzzy\b/)) diff -Nru cockpit-podman-60/pkg/lib/console.css cockpit-podman-61/pkg/lib/console.css --- cockpit-podman-60/pkg/lib/console.css 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/console.css 2023-01-25 09:16:41.000000000 +0000 @@ -1,63 +1,10 @@ @import "~xterm/css/xterm.css"; -/* Our terminal or logs */ -.console-ct { - font-family: Menlo, Monaco, Consolas, monospace; - margin-top: 0; - margin-bottom: 0; - font-size: var(--pf-global--FontSize--md); - text-align: center; - line-height: normal; -} - -@media (min-width: 568px) { - .console-ct { - font-size: var(--pf-global--FontSize--sm); - } -} - -.console-ct > pre { - text-align: left; - display: block; - font-family: inherit; - font-size: inherit; - width: 48em; - height: 310px; - overflow-y: scroll; - white-space: pre-wrap; - margin: 0 auto; -} - -.console-ct > .terminal { - display: flex; - height: 100%; - /* Vertically center the terminal to split the extra space between top and bottom */ - align-items: center; - /* Add a touch of space to the left */ - padding-left: var(--pf-global--spacer--xs); -} - -.terminal .terminal-cursor { - border: 1px solid var(--pf-global--palette--black-200); -} - .terminal:focus .terminal-cursor { border: none; animation: blink 1s step-end infinite; } -@keyframes blink { - from { - color: var(--ct-color-text); - background: var(--pf-global--palette--black-200); - } - - 50% { - color: var(--pf-global--palette--black-200); - background: var(--ct-color-text); - } -} - /* Ensure the console fits to its container (and doesn't attempt to go beyond the limits) */ .xterm-screen, .xterm-viewport { width: auto !important; diff -Nru cockpit-podman-60/pkg/lib/credentials.js cockpit-podman-61/pkg/lib/credentials.js --- cockpit-podman-60/pkg/lib/credentials.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/credentials.js 2023-01-25 09:16:41.000000000 +0000 @@ -67,7 +67,7 @@ } if (watch === null) { - watch = cockpit.channel({ payload: "fslist1", path: self.path }); + watch = cockpit.channel({ payload: "fswatch1", path: self.path }); watch.addEventListener("close", on_close); watch.addEventListener("message", on_message); } diff -Nru cockpit-podman-60/pkg/lib/packagekit.js cockpit-podman-61/pkg/lib/packagekit.js --- cockpit-podman-60/pkg/lib/packagekit.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/packagekit.js 2023-01-25 09:16:41.000000000 +0000 @@ -144,8 +144,9 @@ notifyReturn = client.watch(transactionPath); subscriptions.push(notifyReturn); client.addEventListener("notify", reply => { - if (transactionPath in reply.detail && transactionInterface in reply.detail[transactionPath]) - notifyHandler(reply.detail[transactionPath][transactionInterface], transactionPath); + const iface = reply?.detail?.[transactionPath]?.[transactionInterface]; + if (iface) + notifyHandler(iface, transactionPath); }); } @@ -186,30 +187,21 @@ * .catch(ex => { handle exception }); */ export function transaction(method, arglist, signalHandlers, notifyHandler) { - return new Promise((resolve, reject) => { - call("/org/freedesktop/PackageKit", "org.freedesktop.PackageKit", "CreateTransaction", []) - .done(result => { - const transactionPath = result[0]; - let watchPromise; - if (signalHandlers || notifyHandler) - watchPromise = watchTransaction(transactionPath, signalHandlers, notifyHandler); - if (!watchPromise) - watchPromise = cockpit.resolve(); + return call("/org/freedesktop/PackageKit", "org.freedesktop.PackageKit", "CreateTransaction", []) + .then(([transactionPath]) => { + if (!signalHandlers && !notifyHandler) + return transactionPath; - watchPromise - .done(() => { - if (method) { - call(transactionPath, transactionInterface, method, arglist) - .done(() => resolve(transactionPath)) - .fail(reject); - } else { - resolve(transactionPath); - } - }) - .fail(reject); - }) - .fail(reject); - }); + const watchPromise = watchTransaction(transactionPath, signalHandlers, notifyHandler) || Promise.resolve(); + return watchPromise.then(() => { + if (method) { + return call(transactionPath, transactionInterface, method, arglist) + .then(() => transactionPath); + } else { + return transactionPath; + } + }); + }); } export class TransactionError extends Error { diff -Nru cockpit-podman-60/pkg/lib/patternfly/patternfly-4-overrides.scss cockpit-podman-61/pkg/lib/patternfly/patternfly-4-overrides.scss --- cockpit-podman-60/pkg/lib/patternfly/patternfly-4-overrides.scss 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/patternfly/patternfly-4-overrides.scss 2023-01-25 09:16:41.000000000 +0000 @@ -397,3 +397,42 @@ padding-right: 0; } } + +// Patch tabular number 0s to not have the slash inside +// https://github.com/RedHatOfficial/RedHatFont/issues/53 +// https://github.com/patternfly/patternfly/issues/5308 +@font-face { + /* red-hat-text-regular */ + unicode-range: U+0030; + font-family: RedHatText; + font-style: normal; + font-weight: 400; + src: url(data:font/woff2;base64,d09GMgABAAAAAAe8ABAAAAAAHEQAAAdfAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGVA/RkZUTRwaGBuaeBxuBmAAgkIRCAqBAIEICwwAATYCJAMUBCAFk0wHNRsqG1FUjgoEfz9ujIGNa3r1k8ghpztyImrCBYeonxUhtHdiJ+VxOsW1XvMb+MfL1IXbjodirvftJrlLmXk8oXAIGtz3ZWMrDLGtwvP7dO1vUK18MEuOuwr1HGbdxvxtJkjRURZ0AACm/+Q57n/s4iCgJJL8gTb8spMpWXyTfaB1cheGpDVP+q9RXC7EbPF87t79W+ptEWcSRJxLBcrqiyc9mJ/A5OTLl8rkeDKpTCaVSqRSeRKJRCKRJ6lV11TVDu9HyuJ0/Y9TL5b/hy5+R0aejKwkK8mXBOLAMYRbAP/3rn1aYAcsaY7cXWsUktB1QLOX5Gj3FzgHqMqYN5+yBWRFikmVJYERwEKRA5YVBoWr1JXdhjkRb+jfXuUqsphizGjMnud5RoEapc7yJhDeW1SeZtBWnpvP6D8mOcO8dhBSraNojaD2yybgbQPwhjbA2xMCHdEVJEokAu2t9Yp/EWNaoYXAQK3LPs8IEysenyvh2++a4Tsfb0To2HHUVRk68cYrZfpQy05dn0A66VSbbF6hjflJMm9Q4RWVFEBMaI5CFkyaph/NGFGHKzOpeYPeeusrrfoL30CHAjIyjDLJn/GXjQJSMhSG16nl6boWG2QPw4vDk5q39d2BXlhvqrHx5IoCRAZcxvNOMgGQdGa3It3wh0L1cq0yZS93LQasSKAXZKHF5T/jpNed7iewLTa3BLO3HQ1chV4/PqWW5xsv9scjxfLEvg6W66ymBWQLnF4HwG05Qpjl+0Mt3yccNMDFALN63HnhmwhUAJgBUEJ01QXSVgLLZUjnGeAUbel0vddcbCr2SsAlQulrmmtzEqdHsVAOfeWleo/JPLQOamTU66LjeNhzp6KqAKB1MLTQBx8Uae18DIfaBXcA43mTUQeLmrBAwtF8Fy1NAslad5ibzH4kuMkgqErYAITmyx40CQlJ7dTem8p1V1IvnRFDsnzeUQe+aPuhHgG95VfxBtGxZoZJIF8r8p9XmYjEGxId7kNBPkX6ZksLGbHULnNBv5t2vKjt1nwQy2RXecnhRbVxpSMPi83HqMSQdRjE6NC0oEOdCTlVp3RmQebQbDTfd+E4OkYMPkagMB7MMPPbJzLYBXAVDQJYK3WrCOgXKXJ5hgdPgi+g90EfCHrjAAyGAxYFWZXHcGXhJ9Tg7OiH21m2gmfWFKi20Wo8Fn1TaG9iJiMNhT01isE6Qvcm9RoGQS/YLXVkx2XaQv4maOZD2wWPr8rbmZXzhscBbT4r2qJHotccXba3jCDkSZftjYHIKk5GPyXQfSgKNpUYOdkzRxW9rW7DaFEgoHJdZoaGC2BoFF4xMOqN5kS0/PNMJBgD6B4HQxayhVWEIHBcS5MOpQdgb4JQPebjAXMo3pabQwRzohBGV30Go/tBZr+aP5dVaWTQLzQE6snLfFBLG3ktDbDB3oQ4jHosgoyqKDMaRfEYTk7gKBgLbFo3Jg7V1Irfb3Wuo8B9gPiWAENpKFBgIAEWaqFSZiiY6kuBqS2vuH+AaBCASCSFGoe/icLdLQrRYgBUoD1KDAXTAZQASFkXTvv+yB20DbvmmL/ndTqfMVDiT7SITwPFfydBBs3A8LD73aoGzdv55V+pTP9sAhCIvP2w2u7IgN+p+LZo4exWW8+1pJYgkAtG5QiyRQ4LqoD/PmITkA9s5V6sEqh0pYFECCwFwNC4RAD2+YcAoWOMJUBqxioIUBgUVwlQ6hmvAZVOmQI0dM/ZBGjalwNqXYqLEKCdLkUbAdq723oBHfStHhGgo97VF0AndzuEAJ0NaP4EdDdaT9MiynZ4Avgg9I3OkDrHLCjMj01QGhttUOkfX6BhZHaFpidagdrgYo9vu8DL0D6G90voYGp1HDqaWL2CTjF8/IPOZjef/gu6W66bVsgVfikhX4CRupq6TeRZwEUeuRzkksTIPSUXcdkYOVJhgZxSIssCjBVK2wwGX4gFKhadLZcy4LM7L+qOxxOyhaQk6Ejnchm2Atvk4XJp9Wykhn90HbqUvDyHbUGlLZ8X/RB+yEFlzV/sENPhgW+dyD7HbRtnvgK64z9z/WD4IdzyL/vrCb5KUqRgL+V9gGn0v/D+GnY0nbhh2vk9osu2G1CDTZtcqzd2+tEFO4khorWB4FwD7QhObbCD7uVubobyQza9yZpYiWo0ZM6BRlOJ/k62KJ+tiHYGkk+RUutIGj2xdQeb8gqJOq9Tr3dzHPI6XKhEaJ0NeZLzsG+S4qLA/IQTxDHLLORUvlCOrzI5QwlPrpjyThGjIGgmECZItiwss4xT+CKps5O+SKGEZEm4yHduMQitPPLg2zjbRkKQJVtsYxZYSVeC5uvSOZDPcOecCUs5sLfwTQescCutiZZg9H66MvflaXyLncfLRP+Q9s7YYoJBaHRhkz5y+KMHkrxNcmEXqS7LMFm5svK7cxOE8r9LB9albLEE+80Cl7eGlTrlqR0nS1dQgkQ3bYuWJLrmZTiraE+GjP8IPrtDF85Ce3Y081ATaMVR2G+FkHpE1ksdy3WWFgAA); +} + +@font-face { + /* red-hat-text-italic */ + unicode-range: U+0030; + font-family: RedHatText; + font-style: italic; + font-weight: 400; + src: url(data:font/woff2;base64,d09GMgABAAAAAARQAAsAAAAADYwAAAQEAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgkIRCAqBKIE/CwwAATYCJAMUBCAFkz0HIBvTDBGVnFUBfhzYbVYrgpXBW2mcjbMQzKj2CJ7Xi/85N8mCj8I31EGoJLfybs1VZl6ZyBK4Vh2jT3nLs5sj4dUngEuZ1e+dluoRtq0zKIlQcJ/3KFXzHQpsqVVIHAiJKjWtCRXZx1eZiYvUsXGRKq/wZqa/mnANebooLlGQzkvbYH3zQmMn02IhKYosT9HMsus4eAn7YwxsuHz9BsIUU7K//3+D7O+YisshfkyPYohAhgwDBFggExggNwS5XGBKp5Ns77wjgCgJZxAJSUd/+EtkvGcTotPRBgWoIcdUbAJoACBJzValtf/57znl3Xdr570fp36y5XnFPKe8Vz//gw/i1Pe/mp7yyQfnv/fhbu++FwW2/uD992tAS899ft8Trzjx6K1fv+LYrcLjHn6ydsziJQfvs/T+vXbd9uCNvNW7bXOQc2rfHfXM6M2tz2QH3HJDdeOhZ6/bcNr60+5qHVurzlm/8V2ceq8KTOj8lrZLLwhEuvjgRyZds3N7wW+VevYjfH7H+xfAF1/9ejG89NDNSUUCgYkJtRFiwh566jiLuf8msSHpIqvTNiYIFPpLICEElgAYEmcJwLYeEiA0YowASSmWC5AZEGcIkOseLwlQaMZfApR0TeMFKNs2/SRARTvbX4DquPJK1Fyav4G6PsXlaOhVfIymS8s90dK//MXJ3XSvDJeJvIoH8BD6RAtJI2YiMyfWITcqrkehX3yGkmGpjLIH0kJUDMrWS6vK41GLYdmdqJtS7IqGCcVdaMaw4ie0zCrfelfdjCoT/mNmMPqRhFKFoYAn4EN3lRy6ymXQGkHdzZk0qOVSDE28sMpAUpCmwthIibhcJeFtfkk4UoOOS9ucfNVJoSCkBNJCfGRp0GM6WHHSAca2e5XjNc9wTbxfzu6Ea9L+bzesFFy9ku2ECd4U8btM2SS6R3W0Dm7Nvct9MWBCd3CGAGwwMUlgN3wZ49tTAJ/DEwjFDmZ29mJ3cIrNNpFQ8POCMF6hO2OBiJHTJl2hWM1IqAmEdGPw2aecpAiDHtYuOAoWBOgaRC0j30/SgKTns3uMlCTSsaA5LIXzPVMpqbNQ3zXGyb+rCAq66SboZlBgH0TKIZRZb8TDpTTgfRmXZlLpYu2obzb24skIX0S9eU9FapWzKOozbZflzSW6GXkjQoskWjn00StBUChOXManswhawW0pKUkYMcWhCC3HQCq5Tpb2YA+VVMJP/LjFHXYFe5++22b/HhYBgX2DvWDJMKYOJMjwm/C3tCQUO7kgcYS2wn4xVlSi3TUef1ruwTWOT/dsRyfVaLGfUW7bTbBL7u/Spt0zJvsrQ671aEScUIObukdTouZX0C1qsUxUSreOW5fgH/+/9g2dIwMA); +} + +@font-face { + /* red-hat-text-medium */ + unicode-range: U+0030; + font-family: RedHatText; + font-style: normal; + font-weight: 700; + src: url(data:font/woff2;base64,d09GMgABAAAAAARYAAsAAAAADewAAAQLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgkIRCAqBBIEUCwwAATYCJAMUBCAFlEEHIBssDRHF5AH4ceCUZY9pfajQk3kIirq5CjGXcNU3dzw879+/rX1uIKlLfhd0AMukgzVCNamGesTI7ZlyoyVrc1NnSh8mwlFTCbdmKtP+Dit8tlI4uJx+ywNd5wGHgUayB46pjw3cEzAMA9obaA2wrQFmmmYhpw1jFzajZpAvnYxflbQxTcLQpXLM0Ca6k6JAlq87j+w4K3uxFI1geN+hw/TSSqvs7/9fkv0drbEL4rd0DbUEMmSoJkA3mUA1+dRCPvkEWuVy9Wvk3gogChCASEg2jMM3kQFbCpHLeQX5QRHkQwN0AuQDQJKKgBaFvt38Uaz7eMt7a7/Z9PEZ8aON78yfr31ftGdVrYts/HLjRxs+3vR+/avCjj48fmJf0pGHJ47HC07O3LomD7Q8+b81b41tT7+YcqBX76kHP6toeve6uOr7HbdHcPpTA4FI2z6r8ajDzNduv61o9gG+OvXRHvj62x9Z3dxvaeV5iEISCMRN8R8greRLWf67/xgxnHRSmzRJXYH8ykkgIQR6AagXFwRgsnMChLLRQYCkYEwRIFMtDguQT9n4VoD8iqfSAhRQOvUVoKDJWWEBCimZbRCgsJLZWQGK2JHvOwGK0qrU0zRQTIX+TAPF7ShYAw2UUPX+QQOlPK2B0h43qH8Zn1vtTryFcQacQ2iQEpCUyBDIdMocyKdBLkN+VfIbFFDn1ISCzqQTFFLjmYspTNgFRVLn7i4U1ap5UEyz3oPiqfNYGErocG9CKX8rC6U9rcsvKCO/kQYSqRuJuDwMtTW1taAjjw3t2SxoSmBoS0r4bCaGejLMk5AUVORhLKV0NTS4CPNkDHWmRKTxbV7zrA2Hg5iIED5xz1gixkpA9eTYMhodPRv3toVTwYZzfnC4qGIhd21cYi8zNAv28+xKENSUf4kTUDV3CeiKHtmuZ5iVq4VkIvBLjqMuL1k33vskVyY0SJAOHQrQWp1NH+/QrQwsLOn0E/yJTk3V+ls1HV21l+kE5fySUAsfcTET7pUUkoghMeVgReYSIGkgqh/yvZMCCzNqeIwJLkmIVKFwqAij/piFK0VURf4O8Tvu43iIgnSaBx0kHOxCkGz4FBoi5j/kigfE2TnGwkg58w7pYGap20if9/p69PIrmKo/EcXZ83nb778FJJpPOBNISDCEbOjCr5wnOFjXszsvzLpQFCxKMUkkxZQ6hYTqEpKrYWNsCYyvHC4RuAopKPidh9FUe5gtE2nhvsDPoN1DZrBablAY/vtRWGYtRDj3dii4i2KFX/5YnaLQ3Jx/M14CbaSX7fC6iCkQYjcpW2xHgXndGplBaGzmiD8/n4udCiLBhyIarSIVSpzlI9gYQiEnAv1uYLpLNP0kBmgE4daZBPYHprlOLAA=); +} + +@font-face { + /* red-hat-text-medium-italic */ + unicode-range: U+0030; + font-family: RedHatText; + font-style: italic; + font-weight: 700; + src: url(data:font/woff2;base64,d09GMgABAAAAAASEAAsAAAAADlwAAAQ2AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgkIRCAqBFIEsCwwAATYCJAMUBCAFlSEHIBukDRGVnM0Bfh7YtpMt1pMMwRCUu0ZjuTUEq7QbeQVD9K0cz/Ot8btvZnf/YKZJNFnHE01D/RnzSKWKhUyUChVONznY33vvR2dGwQ2aI5GoNmehLcEOiWwABJeyW3OVmVcm8ohUq47RZ7FbwPRAePVny2WpHmHbKIFFSYTiZgv0eNbhCK663oXEgZAouis1niAM8d0RrIJ/++6lfvsW4tlZz+XCcgddeYS86ClXUGEcuZ9pztoaHSVD7Uom1PoYXN4HzmM1HDvo8UJstrl+/duh/ooIdyFfyySwWFBRMV/ALlUwX2cxOp1g8////ez/7wTIYNOHFBRPpuM3UT2dduT/fwTQg7HosBaHAOMBUJSJ41s7f/UIRt8fohuPkYqTk0DjIYx+wDSdIBXHF4dHTScnx41XjWvbCeXg09bl7Kq2spLoZndx7KxpLys+bE+xPzlSvtEU9Kdaw+XrzSFfCjx7S7xYdVVkdxPPNt0V6Tn3pXNM35O5+5Lj8TVY8f+1pJQVQcrNGpprY9Ik7deGqZ/h49BxJ+DT3euFXl45vWgKCHjCmw1FF5wzw5Or//U/Ro5RHsGeErZC0JurgIII9gFYngkI4ITnAmJa5AKKIccFVEvTCwGdufkT0JtQdggYzCr5AkacqAYBzaT6BgLGmFS/CBjrdk8VMM7s/k7AeDMHpoAJbo+kCZhoXuMJmGx828MUE9q1+VPNbbuqdGPwlM8QK4OHYnwOQ3UoSdDZnlXozS1EGGwsFhjxtDRBs7B2yceo12BsltZPGGdzPw7jre+/YEKWDgaYaOfIK0w2u7lgirlNLucvmGpSt7lM7qfkWAGGRgZGhtBDQEM3moI2CEMXpUxIkxiaqrFAplRBDQHGchVPX5/lsEBN6JEyib5sun/VmWE4kkNiintWMinWBKkq1j5mPQKNN61wQ1xoZ4PJlTQWfjfEOg5qkYlI9NKWD4LKvsIBWNs3wdfAg/b9JD/GK04tASqxsZdO7i0AsMW2oxcemJdGiAQY6v2hj4/5jub2DnznuBqjbimBQcMNRmM/O3D5FqNuVZcqy4v1JSg8sy8eXD/7opUqTiaFNzdUr4ltdQWPsnLjOwlH+QU1zSZWiSQ6EEejweUpky0p6SA48swT/xBwKuiT9El+l5vYD1LSkIqGHupwVyFgqz9rKPLSzaGjvds6iLOcPkV66UGKvJMJY/hKQzuzbm7RfuSNODEixDT0CVekwI2Yun7uzTyIAlGRSAvNsUrPEhHr4Wac1Xe2cgCFYQwS3sbkcQPzJRV0vfftYZIvhIHN7j0prlgOThTI+EtwCbhkFD29IrGHWGFLMysqF5fCO59XB/DG+Xle3pOQIjH2k9PYLoHSvy+RUVwIR/xlEFc+BxEXVNQ/eHIo4f1HsH/OR5zIVm52mVCpjKZqyJHY+j1zNf8f/y+v5iopAAAAAA==); +} diff -Nru cockpit-podman-60/pkg/lib/serverTime.js cockpit-podman-61/pkg/lib/serverTime.js --- cockpit-podman-60/pkg/lib/serverTime.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/pkg/lib/serverTime.js 2023-01-25 09:16:41.000000000 +0000 @@ -530,7 +530,7 @@ locale={timeformat.dateFormatLang()} weekStart={timeformat.firstDayOfWeek()} placeholder={timeformat.dateShortFormat()} - onChange={d => change("manual_date", d)} + onChange={(_, d) => change("manual_date", d)} value={manual_date} appendTo={() => document.body} /> @@ -541,7 +541,7 @@ is24Hour menuAppendTo={() => document.body} invalidFormatErrorMessage="" - onChange={(time, h, m, s, valid) => change("manual_time", time, valid) } /> + onChange={(e, time, h, m, s, valid) => change("manual_time", time, valid) } /> diff -Nru cockpit-podman-60/po/cs.po cockpit-podman-61/po/cs.po --- cockpit-podman-60/po/cs.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/cs.po 2023-01-25 09:16:41.000000000 +0000 @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2022-04-15 20:17+0000\n" "Last-Translator: Pavel Borecki \n" "Language-Team: Czech \n" "Language-Team: German \n" "Language-Team: Spanish \n" @@ -55,7 +55,7 @@ msgid "Add volume" msgstr "Añadir volumen" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "Todos" @@ -101,12 +101,12 @@ "prioridad por defecto es 1024. Un número mayor prioriza este contenedor. Un " "número menor reduce la prioridad." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "Cancelar" @@ -134,9 +134,9 @@ msgid "Cockpit component for Podman containers" msgstr "Componente Cockpit para contenedores Podman" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "Comando" @@ -225,8 +225,8 @@ msgid "Create pod" msgstr "Crear pod" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "Creado" @@ -262,8 +262,8 @@ msgid "Decrease timeout" msgstr "Reducir el tiempo de espera" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "Eliminar" @@ -343,7 +343,7 @@ msgid "Error" msgstr "Error" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "Mensaje de error" @@ -359,7 +359,7 @@ msgid "Example: $0" msgstr "Por ejemplo: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "Finalizado" @@ -460,10 +460,8 @@ msgstr "Fallo al comprobar el estado de salud del contenedor $0" #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 -#, fuzzy -#| msgid "Failed to search for images: $0" msgid "Failed to search for images." -msgstr "Fallo al buscar las imágenes: $0" +msgstr "Fallo al buscar imágenes." #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 msgid "Failed to search for images: $0" @@ -505,11 +503,11 @@ msgid "Force delete pod $0?" msgstr "¿Forzar la eliminación del pod $0?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "Forzar el reinicio" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "Forzar la parada" @@ -570,7 +568,7 @@ msgid "Host port help" msgstr "Ayuda sobre el puerto del anfitrión" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "ID" @@ -606,7 +604,7 @@ msgid "Ignore MAC address if set statically" msgstr "Ignorar la dirección MAC si se ha configurado de forma estática" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "Imagen" @@ -832,9 +830,9 @@ msgid "Options" msgstr "Opciones" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "Propietario" @@ -849,7 +847,7 @@ "Pegue una o más líneas de pares clave=valor en cualquier campo para importar " "en masa" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "Pausar" @@ -885,7 +883,7 @@ msgid "Port mapping" msgstr "Mapeo de puertos" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "Puertos" @@ -901,7 +899,7 @@ msgid "Prune" msgstr "Eliminar" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "Eliminar imágenes no utilizadas" @@ -941,7 +939,7 @@ msgid "Rename container $0" msgstr "Renombrar el contenedor $0" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "Reiniciar" @@ -984,7 +982,7 @@ msgid "Restore with established TCP connections" msgstr "Restaurar con las conexiones TCP establecidas" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "Reanudar" @@ -1000,7 +998,7 @@ msgid "Run health check" msgstr "Ejecutar comprobación de estado de salud" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "Ejecutándose" @@ -1064,7 +1062,7 @@ msgid "Size" msgstr "Tamaño" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "Iniciar" @@ -1092,7 +1090,7 @@ msgid "Status" msgstr "Estado" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "Parar" @@ -1104,7 +1102,7 @@ msgid "Support preserving established TCP connections" msgstr "Habilitar la preservación de las conexiones TCP establecidas" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "Sistema" @@ -1263,7 +1261,7 @@ msgid "select all" msgstr "seleccionar todas" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "sistema" diff -Nru cockpit-podman-60/po/fi.po cockpit-podman-61/po/fi.po --- cockpit-podman-60/po/fi.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/fi.po 2023-01-25 09:16:41.000000000 +0000 @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" -"PO-Revision-Date: 2022-12-26 07:20+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" +"PO-Revision-Date: 2023-01-13 20:20+0000\n" "Last-Translator: Jan Kuparinen \n" "Language-Team: Finnish \n" @@ -56,7 +56,7 @@ msgid "Add volume" msgstr "Lisää taltio" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "Kaikki" @@ -102,12 +102,12 @@ "Oletusprioriteetti on 1024. Suurempi numero priorisoi tätä konttia. Pienempi " "numero laskee prioriteettia." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "Peru" @@ -135,9 +135,9 @@ msgid "Cockpit component for Podman containers" msgstr "Cockpit-komponentti Podman-konteille" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "Komento" @@ -226,8 +226,8 @@ msgid "Create pod" msgstr "Luo podi" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "Luotu" @@ -263,8 +263,8 @@ msgid "Decrease timeout" msgstr "Pienennä aikakatkaisua" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "Poista" @@ -343,7 +343,7 @@ msgid "Error" msgstr "Virhe" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "Virheviesti" @@ -359,7 +359,7 @@ msgid "Example: $0" msgstr "Esimerkki: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "Päättyi" @@ -460,10 +460,8 @@ msgstr "Kontin $0 eheystarkastus epäonnistui" #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 -#, fuzzy -#| msgid "Failed to search for images: $0" msgid "Failed to search for images." -msgstr "Levykuvien etsintä epäonnistui: $0" +msgstr "Levykuvien etsintä epäonnistui." #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 msgid "Failed to search for images: $0" @@ -505,11 +503,11 @@ msgid "Force delete pod $0?" msgstr "Pakota podin $0 poisto?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "Pakota uudelleenkäynnistys" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "Pakota pysäytys" @@ -569,7 +567,7 @@ msgid "Host port help" msgstr "Ohjeita koneen portista" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "TUNNISTE" @@ -605,7 +603,7 @@ msgid "Ignore MAC address if set statically" msgstr "Ohita MAC-osoite, jos se on asetettu staattisesti" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "Levykuva" @@ -831,9 +829,9 @@ msgid "Options" msgstr "Valinnat" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "omistaja" @@ -848,7 +846,7 @@ "Liitä yksi tai useampi rivi avain=arvo-pareja mihin tahansa kenttään " "joukkotuontia varten" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "Keskeytä" @@ -884,7 +882,7 @@ msgid "Port mapping" msgstr "Porttiassosiaatio" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "Portit" @@ -900,7 +898,7 @@ msgid "Prune" msgstr "Karsi" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "Karsi käyttämättömät levykuvat" @@ -940,7 +938,7 @@ msgid "Rename container $0" msgstr "Nimeä kontti $0 uudelleen" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "Käynnistä uudelleen" @@ -983,7 +981,7 @@ msgid "Restore with established TCP connections" msgstr "Palauta käyttäen luotuja TCP-yhteyksiä" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "Jatka" @@ -999,7 +997,7 @@ msgid "Run health check" msgstr "Aja eheystarkistus" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "Käynnissä" @@ -1063,7 +1061,7 @@ msgid "Size" msgstr "Koko" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "Käynnistä" @@ -1091,7 +1089,7 @@ msgid "Status" msgstr "Tila" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "Pysäytä" @@ -1103,7 +1101,7 @@ msgid "Support preserving established TCP connections" msgstr "Tue jo luotujen TCP -yhteyksien säilyttämistä" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "Järjestelmä" @@ -1262,7 +1260,7 @@ msgid "select all" msgstr "valitse kaikki" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "järjestelmä" diff -Nru cockpit-podman-60/po/fr.po cockpit-podman-61/po/fr.po --- cockpit-podman-60/po/fr.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/fr.po 2023-01-25 09:16:41.000000000 +0000 @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2022-11-13 09:19+0000\n" "Last-Translator: blutch112 \n" "Language-Team: French \n" "Language-Team: Japanese \n" "Language-Team: Georgian \n" @@ -56,7 +56,7 @@ msgid "Add volume" msgstr "საცავის დამატება" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "ყველა" @@ -102,12 +102,12 @@ "პრიორიტეტი 1024-ის ტოლია. რაც მეტია რიცხვი, მით მეტია პრიორიტეტი; რაც " "ნაკლები -ნაკლები." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "გაუქმება" @@ -135,9 +135,9 @@ msgid "Cockpit component for Podman containers" msgstr "Cockpit-ის კომპონენტი Podman-ის კონტეინერებისთვის" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "ბრძანება" @@ -226,8 +226,8 @@ msgid "Create pod" msgstr "pod-ის შექმნა" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "შექმნილია" @@ -263,8 +263,8 @@ msgid "Decrease timeout" msgstr "მოლოდინის დროის შემცირება" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "წაშლა" @@ -343,7 +343,7 @@ msgid "Error" msgstr "შეცდომა" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "შეცდომის შეტყობინება" @@ -359,7 +359,7 @@ msgid "Example: $0" msgstr "მაგალითად: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "გამოსული" @@ -460,10 +460,8 @@ msgstr "კონტეინერის ($0) ჯანმრთელობის შემოწმების შეცდომა" #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 -#, fuzzy -#| msgid "Failed to search for images: $0" msgid "Failed to search for images." -msgstr "გამოსახულების ძებნის შეცდომა: $0" +msgstr "გამოსახულებების ძებნის შეცდომა." #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 msgid "Failed to search for images: $0" @@ -505,11 +503,11 @@ msgid "Force delete pod $0?" msgstr "წავშლო ძალით პოდი $0?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "ძალით რესტარტი" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "ძალით გაჩერება" @@ -569,7 +567,7 @@ msgid "Host port help" msgstr "დახმარება ჰოსტის პორტის შესახებ" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "ID" @@ -605,7 +603,7 @@ msgid "Ignore MAC address if set statically" msgstr "სტატიკურად მინიჭებული MAC მისამართის იგნორი" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "გამოსახულება" @@ -831,9 +829,9 @@ msgid "Options" msgstr "მორგება" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "მფლობელი" @@ -848,7 +846,7 @@ "მრავალი შემოტანისთვის ველებში ჩასვით ერთი ან მეტი გასაღები=მნიშვნელობა-ის " "ტიპის წყვილები" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "პაუზა" @@ -884,7 +882,7 @@ msgid "Port mapping" msgstr "პორტების ასახვა" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "პორტები" @@ -900,7 +898,7 @@ msgid "Prune" msgstr "შეკვეცა" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "გამოუყენებელი გამოსახულებების წაკვეთა" @@ -940,7 +938,7 @@ msgid "Rename container $0" msgstr "კონტეინერის სახელის გადარქმევა ($0)" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "გადატვირთვა" @@ -983,7 +981,7 @@ msgid "Restore with established TCP connections" msgstr "დამყარებული TCP კავშირებით აღდგენა" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "გაგრძელება" @@ -999,7 +997,7 @@ msgid "Run health check" msgstr "ჯანმრთელობის შემოწმების გაშვება" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "გაშვებულია" @@ -1063,7 +1061,7 @@ msgid "Size" msgstr "ზომა" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "დაწყება" @@ -1091,7 +1089,7 @@ msgid "Status" msgstr "სტატუსი" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "გაჩერება" @@ -1103,7 +1101,7 @@ msgid "Support preserving established TCP connections" msgstr "დამყარებული TCP კავშირების შენარჩუნების მხარდაჭერა" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "სისტემა" @@ -1261,7 +1259,7 @@ msgid "select all" msgstr "ყველას მონიშვნა" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "სისტემა" diff -Nru cockpit-podman-60/po/ko.po cockpit-podman-61/po/ko.po --- cockpit-podman-60/po/ko.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/ko.po 2023-01-25 09:16:41.000000000 +0000 @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" -"PO-Revision-Date: 2022-12-26 07:20+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" +"PO-Revision-Date: 2023-01-13 20:20+0000\n" "Last-Translator: 김인수 \n" "Language-Team: Korean \n" @@ -52,7 +52,7 @@ msgid "Add volume" msgstr "볼륨 추가" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "모두" @@ -98,12 +98,12 @@ "니다. 숫자가 클 수록 이 컨테이너 우선순위를 갖습니다. 낮은 번호는 우선 순위" "가 낮아집니다." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "취소" @@ -131,9 +131,9 @@ msgid "Cockpit component for Podman containers" msgstr "포드맨 컨테이너를 위한 cockpit 구성요소" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "명령" @@ -222,8 +222,8 @@ msgid "Create pod" msgstr "포드 생성" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "생성일" @@ -259,8 +259,8 @@ msgid "Decrease timeout" msgstr "시간종료 감소" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "삭제" @@ -338,7 +338,7 @@ msgid "Error" msgstr "오류" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "오류 메시지" @@ -354,7 +354,7 @@ msgid "Example: $0" msgstr "예제: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "종료됨" @@ -455,10 +455,8 @@ msgstr "컨테이너 $0에서 상태를 점검하는데 실패함" #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 -#, fuzzy -#| msgid "Failed to search for images: $0" msgid "Failed to search for images." -msgstr "이미지를 위한 검색 실패: $0" +msgstr "이미지 검색을 실패함." #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 msgid "Failed to search for images: $0" @@ -500,11 +498,11 @@ msgid "Force delete pod $0?" msgstr "pod $0 강제 삭제?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "강제 재시작" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "강제 멈춤" @@ -564,7 +562,7 @@ msgid "Host port help" msgstr "호스트 포트 도움말" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "ID" @@ -600,7 +598,7 @@ msgid "Ignore MAC address if set statically" msgstr "정적인 상태라면 맥 주소 무시" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "이미지" @@ -823,9 +821,9 @@ msgid "Options" msgstr "옵션" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "소유자" @@ -839,7 +837,7 @@ msgstr "" "대량으로 가져오기 위해 키=값 쌍의 하나 이상의 행에 입력부분에 붙여 넣습니다" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "일시정지" @@ -875,7 +873,7 @@ msgid "Port mapping" msgstr "포트 대응" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "포트" @@ -891,7 +889,7 @@ msgid "Prune" msgstr "프룬" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "프룬 사용하지 않은 이미지" @@ -931,7 +929,7 @@ msgid "Rename container $0" msgstr "컨테이너 $0 이름변경" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "재시작" @@ -973,7 +971,7 @@ msgid "Restore with established TCP connections" msgstr "설정된 TCP 연결로 복구" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "다시 시작" @@ -989,7 +987,7 @@ msgid "Run health check" msgstr "상태 점검을 실행" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "작동중" @@ -1053,7 +1051,7 @@ msgid "Size" msgstr "크기" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "시작" @@ -1081,7 +1079,7 @@ msgid "Status" msgstr "상태" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "중지" @@ -1093,7 +1091,7 @@ msgid "Support preserving established TCP connections" msgstr "설정된 TCP 연결 유지 지원" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "시스템" @@ -1249,7 +1247,7 @@ msgid "select all" msgstr "모두 선택" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "systemd" diff -Nru cockpit-podman-60/po/pl.po cockpit-podman-61/po/pl.po --- cockpit-podman-60/po/pl.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/pl.po 2023-01-25 09:16:41.000000000 +0000 @@ -7,11 +7,11 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2023-01-10 21:48+0000\n" "Last-Translator: Piotr Drąg \n" -"Language-Team: Polish \n" +"Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -60,7 +60,7 @@ msgid "Add volume" msgstr "Dodaj wolumin" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "Wszystko" @@ -106,12 +106,12 @@ "priorytet to 1024. Wyższa liczba zwiększa priorytet danego kontenera. " "Mniejsza liczba zmniejsza priorytet." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "Anuluj" @@ -139,9 +139,9 @@ msgid "Cockpit component for Podman containers" msgstr "Składnik Cockpit do kontenerów Podman" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "Polecenie" @@ -230,8 +230,8 @@ msgid "Create pod" msgstr "Utwórz pojemnik" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "Utworzono" @@ -267,8 +267,8 @@ msgid "Decrease timeout" msgstr "Zmniejsz czas oczekiwania" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "Usuń" @@ -350,7 +350,7 @@ msgid "Error" msgstr "Błąd" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "Komunikat o błędzie" @@ -366,7 +366,7 @@ msgid "Example: $0" msgstr "Przykład: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "Zakończono" @@ -510,11 +510,11 @@ msgid "Force delete pod $0?" msgstr "Wymusić usunięcie pojemnika $0?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "Wymuś ponowne uruchomienie" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "Wymuś zatrzymanie" @@ -574,7 +574,7 @@ msgid "Host port help" msgstr "Pomoc portu gospodarza" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "Identyfikator" @@ -610,7 +610,7 @@ msgid "Ignore MAC address if set statically" msgstr "Ignorowanie adresu MAC, jeśli jest ustawiony statycznie" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "Obraz" @@ -836,9 +836,9 @@ msgid "Options" msgstr "Opcje" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "Właściciel" @@ -853,7 +853,7 @@ "Należy wkleić jeden lub więcej wierszy par klucz=wartość do dowolnego pola, " "aby zaimportować hurtowo" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "Wstrzymaj" @@ -889,7 +889,7 @@ msgid "Port mapping" msgstr "Mapowanie portów" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "Porty" @@ -905,7 +905,7 @@ msgid "Prune" msgstr "Wyczyść" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "Wyczyść nieużywane obrazy" @@ -945,7 +945,7 @@ msgid "Rename container $0" msgstr "Zmień nazwę kontenera $0" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "Uruchom ponownie" @@ -988,7 +988,7 @@ msgid "Restore with established TCP connections" msgstr "Przywróć z nawiązanymi połączeniami TCP" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "Wznów" @@ -1004,7 +1004,7 @@ msgid "Run health check" msgstr "Wykonaj sprawdzanie zdrowia" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "Uruchomione" @@ -1068,7 +1068,7 @@ msgid "Size" msgstr "Rozmiar" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "Uruchom" @@ -1096,7 +1096,7 @@ msgid "Status" msgstr "Stan" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "Zatrzymaj" @@ -1108,7 +1108,7 @@ msgid "Support preserving established TCP connections" msgstr "Obsługa zachowywania nawiązanych połączeń TCP" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "System" @@ -1267,7 +1267,7 @@ msgid "select all" msgstr "zaznacz wszystko" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "systemowa" diff -Nru cockpit-podman-60/po/sk.po cockpit-podman-61/po/sk.po --- cockpit-podman-60/po/sk.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/sk.po 2023-01-25 09:16:41.000000000 +0000 @@ -4,7 +4,7 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2022-03-31 18:17+0000\n" "Last-Translator: Matej Marusak \n" "Language-Team: Slovak \n" "Language-Team: Swedish \n" @@ -18,7 +18,7 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1\n" -"X-Generator: Weblate 4.14.1\n" +"X-Generator: Weblate 4.15\n" #: src/Images.jsx:87 msgid "$0 container" @@ -56,7 +56,7 @@ msgid "Add volume" msgstr "Lägg till volym" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "Alla" @@ -102,12 +102,12 @@ "1024. Ett högre tal prioriterar denna behållare. Ett lägre tal sänker " "prioriteten." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "Avbryt" @@ -135,9 +135,9 @@ msgid "Cockpit component for Podman containers" msgstr "Cockpit komponent för Podman-behållare" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "Kommando" @@ -226,8 +226,8 @@ msgid "Create pod" msgstr "Skapa pod" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "Skapad" @@ -263,8 +263,8 @@ msgid "Decrease timeout" msgstr "Minska timeout" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "Radera" @@ -273,16 +273,12 @@ msgstr "Radera $0" #: src/ContainerDeleteModal.jsx:30 src/ForceRemoveModal.jsx:17 -#, fuzzy -#| msgid "Delete $0" msgid "Delete $0?" -msgstr "Radera $0" +msgstr "Radera $0?" #: src/PodActions.jsx:39 -#, fuzzy -#| msgid "Delete $0" msgid "Delete pod $0?" -msgstr "Radera $0" +msgstr "Radera podd $0?" #: src/ImageDeleteModal.jsx:89 msgid "Delete tagged images" @@ -301,10 +297,8 @@ msgstr "När en behållare raderas försvinner även all data i den." #: src/Containers.jsx:70 -#, fuzzy -#| msgid "Deleting a container will erase all data in it." msgid "Deleting a running container will erase all data in it." -msgstr "När en behållare raderas försvinner även all data i den." +msgstr "När en behållare som körs raderas försvinner även all data i den." #: src/PodActions.jsx:59 msgid "Deleting this pod will remove the following containers:" @@ -335,7 +329,7 @@ #: src/PodActions.jsx:55 msgid "Empty pod $0 will be permanently removed." -msgstr "" +msgstr "Tom podd $0 kommer att tas bort permanent." #: src/ImageDetails.jsx:21 msgid "Entrypoint" @@ -349,7 +343,7 @@ msgid "Error" msgstr "Fel" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "Felmeddelande" @@ -365,7 +359,7 @@ msgid "Example: $0" msgstr "Exempel: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "Avslutats" @@ -466,10 +460,8 @@ msgstr "Misslyckades att köra hälsokontrollen på behållare $0" #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 -#, fuzzy -#| msgid "Failed to search for images: $0" msgid "Failed to search for images." -msgstr "Misslyckades att söka efter avbilder: $0" +msgstr "Misslyckades att söka efter avbilder." #: src/ImageSearchModal.jsx:113 src/ImageRunModal.jsx:426 msgid "Failed to search for images: $0" @@ -508,16 +500,14 @@ msgstr "Framtvinga borttagande" #: src/PodActions.jsx:38 -#, fuzzy -#| msgid "Force delete" msgid "Force delete pod $0?" -msgstr "Framtvinga borttagande" +msgstr "Framtvinga borttagande av podd $0?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "Framtvinga omstart" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "Framtvinga stopp" @@ -577,7 +567,7 @@ msgid "Host port help" msgstr "Värdport hjälp" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "ID" @@ -613,19 +603,17 @@ msgid "Ignore MAC address if set statically" msgstr "Ignorera MAC-adressen om den är statiskt satt" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "Avbild" #: src/ContainerCommitModal.jsx:43 msgid "Image name is not unique" -msgstr "" +msgstr "Avbildsnamn är inte unikt" #: src/ContainerCommitModal.jsx:34 -#, fuzzy -#| msgid "Container name is required." msgid "Image name is required" -msgstr "Behållarnamn krävs." +msgstr "Avbildsnamn krävs" #: src/ImageRunModal.jsx:685 msgid "Image selection help" @@ -841,9 +829,9 @@ msgid "Options" msgstr "Alternativ" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "Ägare" @@ -858,7 +846,7 @@ "Klistra in en eller flera rader med nyckel=värdepar i valfritt fält för " "massimport" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "Pausa" @@ -894,7 +882,7 @@ msgid "Port mapping" msgstr "Portkartering" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "Portar" @@ -910,7 +898,7 @@ msgid "Prune" msgstr "Rensa" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "Rensa oanvända avbilder" @@ -950,7 +938,7 @@ msgid "Rename container $0" msgstr "Byt namn på behållaren $0" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "Starta om" @@ -978,10 +966,8 @@ "för ett användarkonto." #: src/util.js:9 -#, fuzzy -#| msgid "Restart" msgid "Restarting" -msgstr "Starta om" +msgstr "Startar om" #: src/Containers.jsx:249 src/ContainerRestoreModal.jsx:46 msgid "Restore" @@ -995,7 +981,7 @@ msgid "Restore with established TCP connections" msgstr "Återställ med etablerade TCP-förbindelser" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "Återuppta" @@ -1011,7 +997,7 @@ msgid "Run health check" msgstr "Kör hälsokontroll" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "Kör" @@ -1075,7 +1061,7 @@ msgid "Size" msgstr "Storlek" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "Starta" @@ -1103,7 +1089,7 @@ msgid "Status" msgstr "Status" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "Stoppa" @@ -1115,7 +1101,7 @@ msgid "Support preserving established TCP connections" msgstr "Stöd att bevara etablerade TCP-förbindelser" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "System" @@ -1273,7 +1259,7 @@ msgid "select all" msgstr "välj alla" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "system" diff -Nru cockpit-podman-60/po/tr.po cockpit-podman-61/po/tr.po --- cockpit-podman-60/po/tr.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/tr.po 2023-01-25 09:16:41.000000000 +0000 @@ -7,11 +7,11 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2023-01-10 21:48+0000\n" "Last-Translator: Oğuz Ersen \n" -"Language-Team: Turkish \n" +"Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -55,7 +55,7 @@ msgid "Add volume" msgstr "Birim ekle" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "Tümü" @@ -101,12 +101,12 @@ "Varsayılan öncelik 1024'dür. Daha yüksek bir sayı bu kapsayıcıya öncelik " "verir. Daha düşük bir sayı önceliği azaltır." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "İptal" @@ -134,9 +134,9 @@ msgid "Cockpit component for Podman containers" msgstr "Podman kapsayıcıları için Cockpit bileşeni" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "Komut" @@ -225,8 +225,8 @@ msgid "Create pod" msgstr "Bölme oluştur" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "Oluşturuldu" @@ -262,8 +262,8 @@ msgid "Decrease timeout" msgstr "Zaman aşımını azalt" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "Sil" @@ -341,7 +341,7 @@ msgid "Error" msgstr "Hata" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "Hata iletisi" @@ -357,7 +357,7 @@ msgid "Example: $0" msgstr "Örnek: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "Çıkıldı" @@ -501,11 +501,11 @@ msgid "Force delete pod $0?" msgstr "$0 bölmesi silmeye zorlansın mı?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "Yeniden başlatmaya zorla" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "Durdurmaya zorla" @@ -565,7 +565,7 @@ msgid "Host port help" msgstr "Anamakine b.noktası yardım" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "Kimlik" @@ -601,7 +601,7 @@ msgid "Ignore MAC address if set statically" msgstr "Sabit olarak ayarlanmışsa MAC adresini yoksay" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "Kalıp" @@ -827,9 +827,9 @@ msgid "Options" msgstr "Seçenekler" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "Sahibi" @@ -844,7 +844,7 @@ "Toplu içe aktarma için herhangi bir alana bir veya daha fazla anahtar=değer " "çifti satırı yapıştırın" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "Duraklat" @@ -880,7 +880,7 @@ msgid "Port mapping" msgstr "Bağlantı noktası eşleme" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "Bağlantı noktaları" @@ -896,7 +896,7 @@ msgid "Prune" msgstr "Ayıkla" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "Kullanılmayan kalıpları ayıkla" @@ -936,7 +936,7 @@ msgid "Rename container $0" msgstr "$0 kapsayıcısını yeniden adlandır" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "Yeniden başlat" @@ -979,7 +979,7 @@ msgid "Restore with established TCP connections" msgstr "Kurulu TCP bağlantıları ile geri yükle" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "Sürdür" @@ -995,7 +995,7 @@ msgid "Run health check" msgstr "Sağlık denetimini çalıştır" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "Çalışıyor" @@ -1059,7 +1059,7 @@ msgid "Size" msgstr "Boyut" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "Başlat" @@ -1087,7 +1087,7 @@ msgid "Status" msgstr "Durum" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "Durdur" @@ -1099,7 +1099,7 @@ msgid "Support preserving established TCP connections" msgstr "Kurulu TCP bağlantılarını korumayı destekle" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "Sistem" @@ -1258,7 +1258,7 @@ msgid "select all" msgstr "tümünü seç" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "sistem" diff -Nru cockpit-podman-60/po/uk.po cockpit-podman-61/po/uk.po --- cockpit-podman-60/po/uk.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/uk.po 2023-01-25 09:16:41.000000000 +0000 @@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2023-01-10 21:48+0000\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian =2 && " -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.15\n" #: src/Images.jsx:87 @@ -60,7 +60,7 @@ msgid "Add volume" msgstr "Додати том" -#: src/Containers.jsx:689 src/ImageRunModal.jsx:622 src/ContainerHeader.jsx:22 +#: src/Containers.jsx:689 src/ContainerHeader.jsx:22 src/ImageRunModal.jsx:622 msgid "All" msgstr "Усі" @@ -106,12 +106,12 @@ "пріоритетністю є 1024. Більші числа роблять контейнер пріоритетнішим. Менші " "числа зменшують пріоритетність." -#: src/ImageSearchModal.jsx:240 src/ContainerCommitModal.jsx:156 -#: src/ImageRunModal.jsx:1013 src/ImageDeleteModal.jsx:91 -#: src/ContainerRenameModal.jsx:96 src/PodActions.jsx:48 -#: src/ContainerRestoreModal.jsx:50 src/PruneUnusedImagesModal.jsx:93 -#: src/ContainerDeleteModal.jsx:33 src/PodCreateModal.jsx:156 -#: src/ContainerCheckpointModal.jsx:47 src/ForceRemoveModal.jsx:24 +#: src/ImageSearchModal.jsx:240 src/PodActions.jsx:48 +#: src/ContainerRenameModal.jsx:96 src/ContainerDeleteModal.jsx:33 +#: src/PruneUnusedImagesModal.jsx:93 src/ImageDeleteModal.jsx:91 +#: src/ForceRemoveModal.jsx:24 src/ImageRunModal.jsx:1013 +#: src/ContainerRestoreModal.jsx:50 src/PodCreateModal.jsx:156 +#: src/ContainerCommitModal.jsx:156 src/ContainerCheckpointModal.jsx:47 msgid "Cancel" msgstr "Скасувати" @@ -139,9 +139,9 @@ msgid "Cockpit component for Podman containers" msgstr "Компонент Cockpit для контейнерів Podman" -#: src/ContainerCommitModal.jsx:111 src/ImageRunModal.jsx:734 -#: src/ImageRunModal.jsx:884 src/ImageDetails.jsx:15 -#: src/ContainerDetails.jsx:39 src/ContainerHealthLogs.jsx:61 +#: src/ImageRunModal.jsx:734 src/ImageRunModal.jsx:884 +#: src/ContainerHealthLogs.jsx:61 src/ImageDetails.jsx:15 +#: src/ContainerDetails.jsx:39 src/ContainerCommitModal.jsx:111 msgid "Command" msgstr "Команда" @@ -230,8 +230,8 @@ msgid "Create pod" msgstr "Створити стручок" -#: src/ImageHistory.jsx:31 src/Images.jsx:181 src/ContainerDetails.jsx:63 -#: src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageHistory.jsx:31 +#: src/ContainerDetails.jsx:63 src/Images.jsx:181 msgid "Created" msgstr "Створено" @@ -267,8 +267,8 @@ msgid "Decrease timeout" msgstr "Зменшити час очікування" -#: src/Containers.jsx:282 src/Images.jsx:418 src/PodActions.jsx:44 -#: src/PodActions.jsx:177 src/ContainerDeleteModal.jsx:32 +#: src/PodActions.jsx:44 src/PodActions.jsx:177 src/Containers.jsx:282 +#: src/ContainerDeleteModal.jsx:32 src/Images.jsx:418 msgid "Delete" msgstr "Вилучити" @@ -351,7 +351,7 @@ msgid "Error" msgstr "Помилка" -#: src/Notification.jsx:42 src/Images.jsx:58 +#: src/Images.jsx:58 src/Notification.jsx:42 msgid "Error message" msgstr "Повідомлення про помилку" @@ -367,7 +367,7 @@ msgid "Example: $0" msgstr "Приклад: $0" -#: src/ContainerDetails.jsx:13 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ContainerDetails.jsx:13 msgid "Exited" msgstr "Вийшов" @@ -511,11 +511,11 @@ msgid "Force delete pod $0?" msgstr "Примусово вилучити кокон $0?" -#: src/Containers.jsx:203 src/PodActions.jsx:117 +#: src/PodActions.jsx:117 src/Containers.jsx:203 msgid "Force restart" msgstr "Примусовий перезапуск" -#: src/Containers.jsx:195 src/PodActions.jsx:95 +#: src/PodActions.jsx:95 src/Containers.jsx:195 msgid "Force stop" msgstr "Примусово зупинити" @@ -575,7 +575,7 @@ msgid "Host port help" msgstr "Довідка щодо порту в основній системі" -#: src/Images.jsx:182 src/ContainerDetails.jsx:31 +#: src/ContainerDetails.jsx:31 src/Images.jsx:182 msgid "ID" msgstr "Ід." @@ -612,7 +612,7 @@ msgid "Ignore MAC address if set statically" msgstr "Ігнорувати MAC-адресу, якщо її встановлено статично" -#: src/ImageRunModal.jsx:683 src/Images.jsx:179 src/ContainerDetails.jsx:35 +#: src/ImageRunModal.jsx:683 src/ContainerDetails.jsx:35 src/Images.jsx:179 msgid "Image" msgstr "Образ" @@ -838,9 +838,9 @@ msgid "Options" msgstr "Параметри" -#: src/Containers.jsx:548 src/ImageSearchModal.jsx:157 -#: src/ImageRunModal.jsx:668 src/ContainerHeader.jsx:16 src/Images.jsx:180 -#: src/PodCreateModal.jsx:106 +#: src/ImageSearchModal.jsx:157 src/Containers.jsx:548 +#: src/ContainerHeader.jsx:16 src/ImageRunModal.jsx:668 +#: src/PodCreateModal.jsx:106 src/Images.jsx:180 msgid "Owner" msgstr "Власник" @@ -855,7 +855,7 @@ "Вставте один або декілька рядків у форматі парт «ключ=значення» до будь-" "якого поля для пакетного імпортування" -#: src/Containers.jsx:211 src/PodActions.jsx:162 +#: src/PodActions.jsx:162 src/Containers.jsx:211 msgid "Pause" msgstr "Призупинити" @@ -891,7 +891,7 @@ msgid "Port mapping" msgstr "Прив'язка портів" -#: src/ImageDetails.jsx:39 src/ContainerIntegration.jsx:105 +#: src/ContainerIntegration.jsx:105 src/ImageDetails.jsx:39 msgid "Ports" msgstr "Порти" @@ -907,7 +907,7 @@ msgid "Prune" msgstr "Позбутися" -#: src/Images.jsx:358 src/PruneUnusedImagesModal.jsx:84 +#: src/PruneUnusedImagesModal.jsx:84 src/Images.jsx:358 msgid "Prune unused images" msgstr "Позбутися невикористаних образів" @@ -947,7 +947,7 @@ msgid "Rename container $0" msgstr "Перейменувати контейнер $0" -#: src/Containers.jsx:199 src/PodActions.jsx:106 +#: src/PodActions.jsx:106 src/Containers.jsx:199 msgid "Restart" msgstr "Перезапустити" @@ -990,7 +990,7 @@ msgid "Restore with established TCP connections" msgstr "Відновити із встановленими з'єднаннями TCP" -#: src/Containers.jsx:218 src/PodActions.jsx:147 +#: src/PodActions.jsx:147 src/Containers.jsx:218 msgid "Resume" msgstr "Продовжити" @@ -1006,7 +1006,7 @@ msgid "Run health check" msgstr "Виконати перевірку працездатності" -#: src/ImageUsedBy.jsx:32 src/util.js:9 src/util.js:12 +#: src/util.js:9 src/util.js:12 src/ImageUsedBy.jsx:32 msgid "Running" msgstr "Запущено" @@ -1070,7 +1070,7 @@ msgid "Size" msgstr "Розмір" -#: src/Containers.jsx:238 src/PodActions.jsx:132 src/app.jsx:714 +#: src/PodActions.jsx:132 src/Containers.jsx:238 src/app.jsx:714 msgid "Start" msgstr "Запустити" @@ -1098,7 +1098,7 @@ msgid "Status" msgstr "Стан" -#: src/Containers.jsx:191 src/PodActions.jsx:84 +#: src/PodActions.jsx:84 src/Containers.jsx:191 msgid "Stop" msgstr "Зупинити" @@ -1110,7 +1110,7 @@ msgid "Support preserving established TCP connections" msgstr "Підтримка збереження встановлених з'єднань TCP" -#: src/ImageRunModal.jsx:670 src/ContainerHeader.jsx:21 +#: src/ContainerHeader.jsx:21 src/ImageRunModal.jsx:670 #: src/PodCreateModal.jsx:108 msgid "System" msgstr "Система" @@ -1269,7 +1269,7 @@ msgid "select all" msgstr "вибрати все" -#: src/Containers.jsx:395 src/ImageSearchModal.jsx:158 src/Images.jsx:132 +#: src/ImageSearchModal.jsx:158 src/Containers.jsx:395 src/Images.jsx:132 msgid "system" msgstr "система" diff -Nru cockpit-podman-60/po/zh_CN.po cockpit-podman-61/po/zh_CN.po --- cockpit-podman-60/po/zh_CN.po 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/po/zh_CN.po 2023-01-25 09:16:41.000000000 +0000 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE_VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-10 04:47+0000\n" +"POT-Creation-Date: 2023-01-16 02:58+0000\n" "PO-Revision-Date: 2022-09-05 11:54+0000\n" "Last-Translator: Transtats \n" "Language-Team: Chinese (Simplified) { + // Reset command if it was prefilled + let command = this.state.command; + if (this.state.command === utils.quote_cmdline(this.state.selectedImage?.Command)) + command = ""; + this.setState({ selectedImage: "", image: "", @@ -470,6 +480,8 @@ imageResults: {}, searchText: "", searchFinished: false, + command: command, + entrypoint: "", }); } @@ -483,9 +495,17 @@ if (event === undefined) return; + let command = this.state.command; + if (value.Command && !command) + command = utils.quote_cmdline(value.Command); + + const entrypoint = utils.quote_cmdline(value?.Entrypoint); + this.setState({ selectedImage: value, isImageSelectOpen: false, + command: command, + entrypoint: entrypoint, }); } @@ -731,6 +751,12 @@ } + {dialogValues.entrypoint && + + {dialogValues.entrypoint} + + } + 0) @@ -290,7 +290,7 @@ b.set_input_text('#containers-filter', '') self.machine.execute("podman pod create --infra=false --name pod-2") self.waitPodContainer("pod-2", []) - containerId = self.machine.execute("podman run -d --pod pod-2 --name test-pod-2-system alpine sleep 100").strip() + containerId = self.machine.execute("podman run -d --pod pod-2 --name test-pod-2-system --stop-timeout 0 alpine sleep 100").strip() self.waitPodContainer("pod-2", [{"name": "test-pod-2-system", "image": "alpine", "command": "sleep 100", "state": "Running", "id": containerId}]) self.machine.execute("podman rm --force -t0 test-pod-2-system") self.waitPodContainer("pod-2", []) @@ -425,6 +425,33 @@ # Checking images is harder but if there would be more than one this would fail b.wait_visible("#containers-images:contains('quay.io/cockpit/registry:2')") + # Check showing of entrypoint + b.click("#containers-containers-create-container-btn") + b.click("#create-image-image-select-typeahead") + b.click('button.pf-c-select__menu-item:contains("registry:2")') + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yml') + b.wait_text("#run-image-dialog-entrypoint", '/entrypoint.sh') + + # Deleting image will cleanup both command and entrypoint + b.click("button.pf-c-select__toggle-clear") + b.wait_val("#run-image-dialog-command", '') + b.wait_not_present("#run-image-dialog-entrypoint") + + # Edited command will not be cleared + b.click("#create-image-image-select-typeahead") + b.click('button.pf-c-select__menu-item:contains("registry:2")') + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yml') + b.set_input_text("#run-image-dialog-command", '/etc/docker/registry/config.yaml') + b.click("button.pf-c-select__toggle-clear") + b.wait_not_present("#run-image-dialog-entrypoint") + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yaml') + + # Setting a new image will still keep the old command and not prefill it + b.click("#create-image-image-select-typeahead") + b.click('button.pf-c-select__menu-item:contains("alpine")') + b.wait_visible("#run-image-dialog-pull-latest-image") + b.wait_val("#run-image-dialog-command", '/etc/docker/registry/config.yaml') + b.logout() if self.machine.ostree_image: @@ -449,6 +476,7 @@ # https://github.com/cockpit-project/cockpit-podman/pull/891 b.click("#containers-containers-create-container-btn") b.set_input_text("#create-image-image-select-typeahead", "registry") + b.wait_visible('button.pf-c-select__menu-item:contains("registry")') @testlib.nondestructive def testBasicUser(self): @@ -504,7 +532,9 @@ # Show history b.click("#containers-images tbody.pf-m-expanded .pf-c-tabs__list li:nth-child(2) button") b.wait_in_text("#containers-images .pf-c-table__expandable-row.pf-m-expanded td[data-label=\"ID\"]:first", images['quay.io/libpod/busybox:latest'][:12]) - b.assert_pixels('#containers-images .pf-c-table__expandable-row.pf-m-expanded', "history", ignore=[".ignore-pixels"]) + b.assert_pixels('#containers-images .pf-c-table__expandable-row.pf-m-expanded', "history", + ignore=[".ignore-pixels"], + skip_layouts=["rtl"]) b.click(busybox_sel + " td.pf-c-table__toggle button") # make sure no running containers shown; on CoreOS there's the cockpit/ws container @@ -516,12 +546,12 @@ if auth: # Run two containers as system (first exits immediately) - self.execute(auth, "podman run -d --name test-sh-system alpine:latest sh") - self.execute(auth, "podman run -d --name swamped-crate-system busybox:latest sleep 1000") + self.execute(auth, "podman run -d --name test-sh-system --stop-timeout 0 alpine:latest sh") + self.execute(auth, "podman run -d --name swamped-crate-system --stop-timeout 0 busybox:latest sleep 1000") # Run two containers as admin (first exits immediately) - self.execute(False, "podman run -d --name test-sh-user alpine:latest sh") - self.execute(False, "podman run -d --name swamped-crate-user busybox:latest sleep 1000") + self.execute(False, "podman run -d --name test-sh-user --stop-timeout 0 alpine:latest sh") + self.execute(False, "podman run -d --name swamped-crate-user --stop-timeout 0 busybox:latest sleep 1000") # Test owner filtering if auth: @@ -679,7 +709,7 @@ # Check that we correctly show networking information # Rootless don't have this info if auth: - self.execute(auth, "podman run -dt --name net_check alpine") + self.execute(auth, "podman run -dt --name net_check --stop-timeout 0 alpine") self.toggleExpandedContainer("net_check") b.wait_in_text(".pf-m-expanded .container-details-networking", self.execute(auth, "podman inspect --format '{{.NetworkSettings.Gateway}}' net_check").strip()) b.wait_in_text(".pf-m-expanded .container-details-networking", self.execute(auth, "podman inspect --format '{{.NetworkSettings.IPAddress}}' net_check").strip()) @@ -689,10 +719,10 @@ self.toggleExpandedContainer("net_check") # delete image alpine that has been used by a container - self.execute(auth, "podman run -d --name test-sh4 alpine sh") + self.execute(auth, "podman run -d --name test-sh4 --stop-timeout 0 alpine sh") self.waitContainerRow("test-sh4") if auth: - b.assert_pixels('#app', "overview", ignore=[".ignore-pixels"]) + b.assert_pixels('#app', "overview", ignore=[".ignore-pixels"], skip_layouts=["rtl"]) alpine_sel = f"#containers-images tbody tr[data-row-id={images['quay.io/libpod/alpine:latest']}{auth}]".lower() b.wait_visible(alpine_sel) b.click(alpine_sel + " td.pf-c-table__toggle button") @@ -703,15 +733,15 @@ b.wait_not_in_text("#containers-images", alpine_sel) b.wait_collected_text("#containers-containers .container-name", expected_ws) - self.execute(auth, "podman run -d --name c quay.io/cockpit/registry:2 sh") + self.execute(auth, "podman run -d --name c --stop-timeout 0 quay.io/cockpit/registry:2 sh") b.wait_collected_text("#containers-containers .container-name", "c" + expected_ws) - self.execute(auth, "podman run -d --name a quay.io/cockpit/registry:2 sh") + self.execute(auth, "podman run -d --name a --stop-timeout 0 quay.io/cockpit/registry:2 sh") b.wait_collected_text("#containers-containers .container-name", "ac" + expected_ws) - self.execute(False, "podman run -d --name b quay.io/cockpit/registry:2 sh") + self.execute(False, "podman run -d --name b --stop-timeout 0 quay.io/cockpit/registry:2 sh") if auth: b.wait_collected_text("#containers-containers .container-name", "bac" + expected_ws) - self.execute(False, "podman run -d --name doremi quay.io/cockpit/registry:2 sh") + self.execute(False, "podman run -d --name doremi --stop-timeout 0 quay.io/cockpit/registry:2 sh") b.wait_collected_text("#containers-containers .container-name", "bdoremiac" + expected_ws) b.wait(lambda: self.getContainerAttr("doremi", "State") in NOT_RUNNING) else: @@ -752,7 +782,7 @@ self.login(auth) # run a container (will exit immediately) and test the display of commit modal - self.execute(auth, "podman run -d --name test-sh0 alpine sh -c 'ls -a'") + self.execute(auth, "podman run -d --name test-sh0 --stop-timeout 0 alpine sh -c 'ls -a'") self.filter_containers("all") self.waitContainerRow("test-sh0") @@ -826,7 +856,7 @@ b.set_input_text("#commit-dialog-command", "sh -c 'ps'") if auth: - b.assert_pixels(".pf-c-modal-box", "commit") + b.assert_pixels(".pf-c-modal-box", "commit", skip_layouts=["rtl"]) self.confirm_modal("Commit") @@ -836,7 +866,7 @@ self.assertIn("vnd.oci.image.manifest", self.execute(auth, "podman inspect --format '{{.ManifestType}}' newname:24").strip()) # Test commit of running container - self.execute(auth, "podman run -d --name test-sh2 busybox sleep 1000") + self.execute(auth, "podman run -d --name test-sh2 --stop-timeout 0 busybox sleep 1000") self.performContainerAction("test-sh2", "Commit") b.wait_visible(".pf-c-modal-box") b.set_input_text("#commit-dialog-image-name", "newname") @@ -862,8 +892,8 @@ def prepare(): # Create and start registry containers - self.execute(True, "podman run -d -p 5000:5000 --name registry quay.io/cockpit/registry:2") - self.execute(True, "podman run -d -p 6000:5000 --name registry_alt quay.io/cockpit/registry:2") + self.execute(True, "podman run -d -p 5000:5000 --name registry --stop-timeout 0 quay.io/cockpit/registry:2") + self.execute(True, "podman run -d -p 6000:5000 --name registry_alt --stop-timeout 0 quay.io/cockpit/registry:2") # Add local insecure registry into registries conf self.machine.write("/etc/containers/registries.conf", REGISTRIES_CONF) self.execute(True, "systemctl stop podman.service") @@ -976,7 +1006,7 @@ b.wait_visible(".pf-c-data-list .image-name:contains('localhost:5000/my-busybox')") b.wait_visible(".pf-c-data-list .image-name:contains('localhost:6000/my-busybox')") - b.assert_pixels(".podman-search", "download") + b.assert_pixels(".podman-search", "download", skip_layouts=["rtl"]) b.set_val('#registry-select', "localhost:6000") b.wait_not_present(".pf-c-data-list .image-name:contains('localhost:5000/my-busybox')") @@ -1035,7 +1065,7 @@ self.filter_containers('all') # run a container - self.execute(auth, "podman run -dit --name swamped-crate busybox:latest sh; podman stop swamped-crate") + self.execute(auth, "podman run -d --name swamped-crate --stop-timeout 0 busybox:latest sh -c 'echo 123; sleep infinity'; podman stop swamped-crate") b.wait(lambda: self.execute(auth, "podman ps --all | grep -e swamped-crate -e Exited")) b.wait_visible("#containers-containers") @@ -1058,7 +1088,7 @@ container_sha = self.execute(auth, "podman inspect --format '{{.Id}}' swamped-crate").strip() with b.wait_timeout(5): - self.waitContainer(container_sha, auth, name='swamped-crate', image='busybox:latest', cmd='sh', + self.waitContainer(container_sha, auth, name='swamped-crate', image='busybox:latest', state='Running', owner="system" if auth else "admin") def get_cpu_usage(sel): @@ -1095,7 +1125,7 @@ b.wait(lambda: old_pid != self.execute(auth, "podman inspect --format '{{.State.Pid}}' swamped-crate".strip())) with b.wait_timeout(5): - self.waitContainer(container_sha, auth, name='swamped-crate', image='busybox:latest', cmd='sh', state='Running') + self.waitContainer(container_sha, auth, name='swamped-crate', image='busybox:latest', state='Running') self.filter_containers('all') b.wait_visible("#containers-containers") @@ -1109,11 +1139,38 @@ # Stop the container self.performContainerAction("busybox:latest", "Force stop") - self.waitContainer(container_sha, auth, name='swamped-crate', image='busybox:latest', cmd='sh') + self.waitContainer(container_sha, auth, name='swamped-crate', image='busybox:latest') b.wait(lambda: self.getContainerAttr("swamped-crate", "State") in NOT_RUNNING) b.wait(lambda: self.getContainerAttr("swamped-crate", "CPU") == "") b.wait(lambda: self.getContainerAttr("swamped-crate", "Memory") == "") + # Check that console reconnects when container starts + self.toggleExpandedContainer("swamped-crate") + b.click(".pf-m-expanded button:contains('Console')") + b.wait_text(".pf-m-expanded .pf-c-title", "Container is not running") + self.performContainerAction("swamped-crate", "Start") + b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(1)", "/ # ") + b.focus(".pf-m-expanded .xterm-helper-textarea") + b.key_press('echo hello\r') + b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(2)", "hello") + b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(3)", "/ # ") + self.performContainerAction("swamped-crate", "Stop") + b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(3)", "/ # disconnected ") + sha = self.execute(auth, "podman inspect --format '{{.Id}}' swamped-crate").strip() + self.waitContainer(sha, auth, name='swamped-crate', image='busybox:latest', state=NOT_RUNNING) + self.performContainerAction("swamped-crate", "Start") + self.waitContainer(sha, auth, state='Running') + b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(1)", "/ # ") + b.wait_not_in_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(2)", "hello") + + # Check that logs reconnect when container starts + b.click(".pf-m-expanded button:contains('Logs')") + self.performContainerAction("swamped-crate", "Stop") + self.waitContainer(sha, auth, state=NOT_RUNNING) + b.wait_in_text(".pf-m-expanded .container-logs .xterm-accessibility-tree", "Streaming disconnected") + self.performContainerAction("swamped-crate", "Start") + b.wait_in_text(".pf-m-expanded .container-logs .xterm-accessibility-tree", "Streaming disconnected123") + @testlib.nondestructive def testCheckpointRestoreCGroupsV2(self): b = self.browser @@ -1130,7 +1187,7 @@ self.filter_containers('all') # Run a container - self.execute(True, "podman run -dit --name swamped-crate busybox:latest sh") + self.execute(True, "podman run -dit --name swamped-crate --stop-timeout 0 busybox:latest sh") b.wait(lambda: self.execute(True, "podman ps --all | grep -e swamped-crate")) # Checkpoint the container @@ -1163,7 +1220,7 @@ self.filter_containers('all') # Run a container - self.execute(True, "podman run -dit --name swamped-crate busybox:latest sh; podman stop swamped-crate") + self.execute(True, "podman run -dit --name swamped-crate --stop-timeout 0 busybox:latest sh; podman stop swamped-crate") b.wait(lambda: self.execute(True, "podman ps --all | grep -e swamped-crate -e Exited")) # Check that the restore option is not present (i.e. start is a regular button) @@ -1349,12 +1406,12 @@ def _testCreateContainer(self, auth): new_container = 'new-container' - self.execute(True, f"podman run -d --name {new_container} quay.io/libpod/busybox touch /latest") + self.execute(True, f"podman run -d --name {new_container} --stop-timeout 0 quay.io/libpod/busybox touch /latest") self.execute(True, f"podman commit {new_container} newimage") new_image_sha = self.execute(True, "podman inspect --format '{{.Id}}' newimage").strip() - self.execute(True, "podman run -d -p 5000:5000 --name registry quay.io/cockpit/registry:2") - self.execute(True, "podman run -d -p 6000:5000 --name registry_alt quay.io/cockpit/registry:2") + self.execute(True, "podman run -d -p 5000:5000 --name registry --stop-timeout 0 quay.io/cockpit/registry:2") + self.execute(True, "podman run -d -p 6000:5000 --name registry_alt --stop-timeout 0 quay.io/cockpit/registry:2") # Add local insecure registry into registries conf self.machine.write("/etc/containers/registries.conf", REGISTRIES_CONF) self.execute(True, "systemctl stop podman.service") @@ -1381,7 +1438,7 @@ # Local results found b.set_input_text("#create-image-image-select-typeahead", "registry") if auth: - b.assert_pixels(".pf-c-modal-box", "image-select") + b.assert_pixels(".pf-c-modal-box", "image-select", skip_layouts=["rtl"]) b.click('button.pf-c-toggle-group__button:contains("Local")') b.wait_text("button.pf-c-select__menu-item", "quay.io/cockpit/registry:2") @@ -1604,7 +1661,9 @@ b.click('.volume-form .btn-add') if auth: - b.assert_pixels(".pf-c-modal-box", "integration", ignore=["#run-image-dialog-volume-0 input.pf-c-select__toggle-typeahead"]) + b.assert_pixels(".pf-c-modal-box", "integration", + ignore=["#run-image-dialog-volume-0 input.pf-c-select__toggle-typeahead"], + skip_layouts=["rtl"]) if self.has_selinux: b.set_val('#run-image-dialog-volume-1-selinux', "Z") @@ -1768,25 +1827,6 @@ b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(2)", "hello") b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(3)", "/ # ") b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(1)", "/ # echo hello") - self.performContainerAction("busybox-without-publish", "Stop") - b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(3)", "/ # disconnected ") - sha = self.execute(auth, "podman inspect --format '{{.Id}}' busybox-without-publish").strip() - self.waitContainer(sha, auth, name='busybox-without-publish', image='busybox:latest', state=NOT_RUNNING) - self.performContainerAction("busybox-without-publish", "Start") - self.waitContainer(sha, auth, state='Running') - b.wait_text(".pf-m-expanded .xterm-accessibility-tree > div:nth-child(1)", "/ # ") - - # Check that logs reconnect when container starts - b.click(".pf-m-expanded button:contains('Logs')") - b.wait_in_text(".pf-m-expanded .container-logs .xterm-accessibility-tree", "2") - self.performContainerAction("busybox-without-publish", "Stop") - self.waitContainer(sha, auth, state=NOT_RUNNING) - b.wait_in_text(".pf-m-expanded .container-logs .xterm-accessibility-tree", "Streaming disconnected") - self.performContainerAction("busybox-without-publish", "Start") - b.wait_in_text(".pf-m-expanded .container-logs .xterm-accessibility-tree", "Streaming disconnected1") - - self.performContainerAction("busybox-without-publish", "Stop") - b.click('#containers-containers tr:contains("busybox-without-publish")') b.go("#/?name=tty") self.check_containers(["busybox-with-tty"], ["busybox-without-publish"]) @@ -1809,15 +1849,8 @@ self.check_images(["busybox:latest", "alpine:latest", "registry:2"], []) b.wait_js_cond('window.location.hash === "#/"') - b.set_val("#containers-containers-filter", "all") - self.waitContainer(sha, auth, name='busybox-without-publish', image='busybox:latest', state=NOT_RUNNING) - b.click(".pf-m-expanded button:contains('Console')") - b.wait_text(".pf-m-expanded .pf-c-title", "Container is not running") - self.filter_containers("running") - b.wait_not_in_text("#containers-containers", "busybox-without-publish") id_with_tty = self.execute(auth, "podman inspect --format '{{.Id}}' busybox-with-tty").strip() - id_without_publish = self.execute(auth, "podman inspect --format '{{.Id}}' busybox-without-publish").strip() b.click('#containers-images tbody tr:contains("busybox:latest") td.pf-c-table__toggle button') # running container, just selects it, but leaves "Only running" alone @@ -1827,17 +1860,9 @@ # FIXME: expanding running container details does not actually work right now # b.wait_in_text("#containers-containers tr.pf-m-expanded .container-details", "sleep infinity") # stopped container, switches to showing all containers - b.click("#containers-images tbody tr:contains('busybox:latest') + tr div.ct-listing-panel-body dt:contains('Used by') + dd button:contains('busybox-without-publish')") - b.wait_js_cond('window.location.hash === "#' + id_without_publish + '"') - b.wait_val("#containers-containers-filter", "all") - b.wait_in_text("#containers-containers", "busybox-without-publish") - # auto-expands container details - b.wait_in_text("#containers-containers tr.pf-m-expanded .container-details-basic", "sleep infinity") - - b.click('#containers-images tbody tr:contains("alpine:latest") td.pf-c-table__toggle button') - b.wait_in_text("#containers-images tbody tr:contains('alpine:latest') td[data-label='Used by']", 'unused') # Create a container without starting it + self.filter_containers("all") container_name = "busybox-not-started" b.wait_visible('#containers-images td[data-label="Image"]:contains("busybox:latest")') b.click('#containers-images tbody tr:contains("busybox:latest") .ct-container-create') @@ -1845,20 +1870,36 @@ b.wait_val("#create-image-image-select-typeahead", "quay.io/libpod/busybox:latest") b.set_input_text("#run-image-dialog-name", container_name) + b.set_input_text("#run-image-dialog-command", "sh -c sleep infinity") b.click('.pf-c-modal-box__footer #create-image-create-btn') b.wait_not_present("div.pf-c-modal-box") - b.wait_val("#containers-containers-filter", "all") sha = self.execute(auth, "podman inspect --format '{{.Id}}' " + container_name).strip() self.waitContainer(sha, auth, name=container_name, image='busybox:latest', state=['Configured', 'Created']) + self.filter_containers("running") + b.wait_not_in_text("#containers-containers", "busybox-not-started") + b.click("#containers-images tbody tr:contains('busybox:latest') + tr div.ct-listing-panel-body dt:contains('Used by') + dd button:contains('busybox-not-started')") + b.wait_js_cond(f"window.location.hash === '#{sha}'") + b.wait_val("#containers-containers-filter", "all") + b.wait_in_text("#containers-containers", "busybox-not-started") + # auto-expands container details + b.wait_in_text("#containers-containers tbody tr:contains('busybox-not-started') + tr", "sleep infinity") + + b.click('#containers-images tbody tr:contains("alpine:latest") td.pf-c-table__toggle button') + b.wait_in_text("#containers-images tbody tr:contains('alpine:latest') td[data-label='Used by']", 'unused') + b.set_input_text('#containers-filter', 'foobar') b.wait_in_text('#containers-containers .pf-c-empty-state', 'No containers that match the current filter') b.wait_in_text('#containers-images .pf-c-empty-state', 'No images that match the current filter') b.set_input_text('#containers-filter', '') if not auth or not self.machine.ostree_image: # don't kill ws container + # Ubuntu has old podman that does not know about --time + if not m.image.startswith("ubuntu"): + # Remove all containers first as it is not possible to set --time 0 to rmi command + self.execute(auth, "podman rm --all --force --time 0") self.execute(auth, "podman rmi -af") b.wait_in_text('#containers-containers .pf-c-empty-state', 'No containers') b.set_val("#containers-containers-filter", "running") @@ -1939,7 +1980,7 @@ leftover_images += 1 # By default we have 3 unused images, start one. - self.execute(auth or root, "podman run -d --name used_image alpine:latest sh") + self.execute(auth or root, "podman run -d --name used_image --stop-timeout 0 alpine:latest sh") b.click("#image-actions-dropdown") b.click("button:contains(Prune unused images)") @@ -1966,6 +2007,7 @@ b.click("#image-actions-dropdown") b.wait_visible("button:contains(Prune unused images).pf-m-disabled") + @testlib.nondestructive def testPruneUnusedImagesSystemSelections(self): ''' Test the prune unused images selection options''' b = self.browser @@ -2005,6 +2047,7 @@ b.click("#image-actions-dropdown") b.wait_visible("button:contains(Prune unused images).pf-m-disabled") + @testlib.nondestructive def testCreateContainerValidation(self): ''' Test the validation errors''' b = self.browser @@ -2012,7 +2055,7 @@ container_name = 'portused' # Start a podman container which uses a port - self.execute(False, "podman run -d -p 5000:5000 --name registry quay.io/cockpit/registry:2") + self.execute(False, "podman run -d -p 5000:5000 --name registry --stop-timeout 0 quay.io/cockpit/registry:2") b.click("#containers-images button.pf-c-expandable-section__toggle") b.wait_visible('#containers-images td[data-label="Image"]:contains("busybox:latest")') @@ -2059,7 +2102,7 @@ b.click('#run-image-healthcheck-retries button:nth-child(1)') b.wait_val("#run-image-healthcheck-retries input", 2) if auth: - b.assert_pixels('.pf-c-modal-box', "healthcheck-modal") + b.assert_pixels('.pf-c-modal-box', "healthcheck-modal", skip_layouts=["rtl"]) b.click('.pf-c-modal-box__footer #create-image-create-run-btn') self.waitContainerRow("healthy") @@ -2112,19 +2155,24 @@ b.assert_pixels(".pf-m-expanded .pf-c-table__expandable-row-content", "healthcheck-details", ignore=["thead", "#container-details-healthcheck dt:contains('Failing streak') + dd", - "td[data-label='Started at']"]) + "td[data-label='Started at']"], + skip_layouts=["rtl"]) + @testlib.nondestructive def testHealthcheckSystem(self): self._testHealthcheck(True) @testlib.skipImage("Ubuntu-stable does not get health check run signals", "ubuntu-stable") + @testlib.nondestructive def testHealthcheckUser(self): self._testHealthcheck(False) @testlib.skipImage("podman-restart not available in debian/ubuntu", *DISTROS_WITHOUT_PODMAN_USER_RESTART) + @testlib.nondestructive def testPodmanRestartEnabledUser(self): self._testPodmanRestartEnabled(False) + @testlib.nondestructive def testPodmanRestartEnabledSystem(self): self._testPodmanRestartEnabled(True) @@ -2207,15 +2255,19 @@ b.wait_visible("#run-image-dialog-owner-user:disabled") b.wait_visible("#run-image-dialog-owner-system:disabled") + @testlib.nondestructive def testCreateContainerInPodSystem(self): self._testCreateContainerInPod(True) + @testlib.nondestructive def testCreateContainerInPodUser(self): self._testCreateContainerInPod(False) + @testlib.nondestructive def testPauseResumeContainerSystem(self): self._testPauseResumeContainer(True) + @testlib.nondestructive def testPauseResumeContainerUser(self): # rootless cgroupv1 containers do not support pausing if not self.has_cgroupsV2: @@ -2226,7 +2278,7 @@ b = self.browser container_name = "pauseresume" - self.execute(auth, f"podman run -dt --name {container_name} alpine") + self.execute(auth, f"podman run -dt --name {container_name} --stop-timeout 0 alpine") self.login(auth) self.waitContainerRow(container_name) @@ -2242,9 +2294,11 @@ self.performContainerAction(container_name, "Resume") b.wait(lambda: self.getContainerAttr(container_name, "State") == "Running") + @testlib.nondestructive def testRenameContainerSystem(self): self._testRenameContainer(True) + @testlib.nondestructive def testRenameContainerUser(self): self._testRenameContainer(False) @@ -2272,12 +2326,13 @@ self.execute(auth, f"podman inspect --format '{{{{.Id}}}}' {container_name_new}").strip() self.waitContainerRow(container_name_new) + @testlib.nondestructive def testMultipleContainers(self): self.login() # Create 31 containers for i in range(31): - self.execute(True, f"podman run -dt --name container{i} quay.io/libpod/busybox:latest") + self.execute(True, f"podman run -dt --name container{i} --stop-timeout 0 quay.io/libpod/busybox:latest") self.waitContainerRow("container30") @@ -2285,12 +2340,11 @@ for i in range(31): self.execute(True, f"podman rm -f container{i}") + @testlib.nondestructive def testCreatePodSystem(self): self._createPod(True) - # HACK: give podman time to kill the pod containers, can be removed if we - # have podman 4.0 everywhere and can use podman pod rm -t0 - @testlib.timeout(300) + @testlib.nondestructive def testCreatePodUser(self): self._createPod(False) @@ -2346,7 +2400,7 @@ self.waitPodContainer(pod_name, []) container_name = 'test-pod-1-system' if auth else 'test-pod-1' - containerId = self.execute(auth, f"podman run -d --pod {pod_name} --name {container_name} alpine sleep 500").strip() + containerId = self.execute(auth, f"podman run -d --pod {pod_name} --name {container_name} --stop-timeout 0 alpine sleep 500").strip() self.waitPodContainer(pod_name, [{"name": container_name, "image": "alpine", "command": "sleep 500", "state": "Running", "id": containerId}], auth) self.toggleExpandedContainer(container_name) diff -Nru cockpit-podman-60/test/common/chromium-cdp-driver.js cockpit-podman-61/test/common/chromium-cdp-driver.js --- cockpit-podman-60/test/common/chromium-cdp-driver.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/test/common/chromium-cdp-driver.js 2023-01-25 09:16:41.000000000 +0000 @@ -66,7 +66,6 @@ let logPromiseResolver; let nReportedLogMessages = 0; const unhandledExceptions = []; -const shownMessages = []; // Show every message just once, keep here seen messages function clearExceptions() { unhandledExceptions.length = 0; @@ -78,13 +77,8 @@ client.Runtime.consoleAPICalled(info => { const msg = info.args.map(v => (v.value || "").toString()).join(" "); - messages.push([info.type, msg]); - if (shownMessages.indexOf(msg) == -1) { - if (!enable_debug) // disable message de-duplication in --trace mode - shownMessages.push(msg); - process.stderr.write("> " + info.type + ": " + msg + "\n"); - } + process.stderr.write("> " + info.type + ": " + msg + "\n"); resolveLogPromise(); }); @@ -124,15 +118,7 @@ messages.push(["cdp", msg]); /* Ignore authentication failure log lines that don't denote failures */ if (!(msg.url || "").endsWith("/login") || (msg.text || "").indexOf("401") === -1) { - const orig = { ...msg }; - delete msg.timestamp; - delete msg.args; - const msgstr = JSON.stringify(msg); - if (shownMessages.indexOf(msgstr) == -1) { - if (!enable_debug) // disable message de-duplication in --trace mode - shownMessages.push(msgstr); - process.stderr.write("CDP: " + JSON.stringify(orig) + "\n"); - } + process.stderr.write("CDP: " + JSON.stringify(msg) + "\n"); } resolveLogPromise(); }); diff -Nru cockpit-podman-60/test/common/firefox-cdp-driver.js cockpit-podman-61/test/common/firefox-cdp-driver.js --- cockpit-podman-60/test/common/firefox-cdp-driver.js 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/test/common/firefox-cdp-driver.js 2023-01-25 09:16:41.000000000 +0000 @@ -82,7 +82,6 @@ let logPromiseResolver; let nReportedLogMessages = 0; const unhandledExceptions = []; -const shownMessages = []; // Show every message just once, keep here seen messages function clearExceptions() { unhandledExceptions.length = 0; @@ -95,11 +94,7 @@ client.Runtime.consoleAPICalled(info => { const msg = info.args.map(v => (v.value || "").toString()).join(" "); messages.push([info.type, msg]); - if (shownMessages.indexOf(msg) == -1) { - if (!enable_debug) // disable message de-duplication in --trace mode - shownMessages.push(msg); - process.stderr.write("> " + info.type + ": " + msg + "\n"); - } + process.stderr.write("> " + info.type + ": " + msg + "\n"); resolveLogPromise(); }); @@ -160,15 +155,7 @@ messages.push(["cdp", msg]); /* Ignore authentication failure log lines that don't denote failures */ if (!(msg.url || "").endsWith("/login") || (text || "").indexOf("401") === -1) { - const orig = { ...msg }; - delete msg.timestamp; - delete msg.args; - const msgstr = JSON.stringify(msg); - if (shownMessages.indexOf(msgstr) == -1) { - if (!enable_debug) // disable message de-duplication in --trace mode - shownMessages.push(msgstr); - process.stderr.write("CDP: " + JSON.stringify(orig) + "\n"); - } + process.stderr.write("CDP: " + JSON.stringify(msg) + "\n"); } resolveLogPromise(); } diff -Nru cockpit-podman-60/test/common/packagelib.py cockpit-podman-61/test/common/packagelib.py --- cockpit-podman-60/test/common/packagelib.py 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/test/common/packagelib.py 2023-01-25 09:16:41.000000000 +0000 @@ -383,6 +383,9 @@ xml += '\n' return xml + def addPackageSet(self, name): + self.machine.execute(f"mkdir -p {self.repo_dir}; cp /var/lib/package-sets/{name}/* {self.repo_dir}") + def enableRepo(self): if self.backend == "apt": self.createAptChangelogs() diff -Nru cockpit-podman-60/test/common/storagelib.py cockpit-podman-61/test/common/storagelib.py --- cockpit-podman-60/test/common/storagelib.py 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/test/common/storagelib.py 2023-01-25 09:16:41.000000000 +0000 @@ -329,7 +329,7 @@ def dialog_wait_close(self): # file system operations often take longer than 10s - with self.browser.wait_timeout(60): + with self.browser.wait_timeout(max(self.browser.cdp.timeout, 60)): self.browser.wait_not_present('#dialog') def dialog_check(self, expect): @@ -490,19 +490,24 @@ self.content_tab_wait_in_info(row, col, "Mount point", cond=lambda cell: "The filesystem is not mounted" not in self.browser.text(cell)) + def wait_not_mounted(self, row, col): + with self.browser.wait_timeout(30): + self.content_tab_wait_in_info(row, col, "Mount point", + cond=lambda cell: "The filesystem is not mounted" in self.browser.text(cell)) + def setup_systemd_password_agent(self, password): # This sets up a systemd password agent that replies to all # queries with the given password. self.write_file("/usr/local/bin/test-password-agent", f"""#!/bin/sh +# Sleep a bit to avoid starting this agent too quickly over and over, +# and so that other agents get a chance as well. +sleep 30 + for s in $(grep -h ^Socket= /run/systemd/ask-password/ask.* | sed 's/^Socket=//'); do printf '%s' '{password}' | /usr/lib/systemd/systemd-reply-password 1 $s done - -# Sleep a bit to avoid starting this agent too quickly over and over, -# which would be wasteful and also cause systemd to block us. -sleep 2 """, perm="0755") self.write_file("/etc/systemd/system/test-password-agent.service", @@ -529,6 +534,83 @@ """) self.machine.execute("ln -s ../test-password-agent.path /etc/systemd/system/sysinit.target.wants/") + def encrypt_root(self, passphrase): + m = self.machine + + # Set up a password agent in the old root and then arrange for + # it to be included in the initrd. This will unlock the new + # encrypted root during boot. + # + # The password agent and its initrd configuration will be + # copied to the new root, so it will stay in place also when + # the initrd is regenerated again from within the new root. + + self.setup_systemd_password_agent(passphrase) + m.write("/etc/dracut.conf.d/01-askpass.conf", + 'install_items+=" /usr/local/bin/test-password-agent ' + + '/etc/systemd/system/test-password-agent.service ' + + '/etc/systemd/system/test-password-agent.path ' + + '/etc/systemd/system/sysinit.target.wants/test-password-agent.path "') + + # The first step is to move /boot to a new unencrypted + # partition on the new disk but keep it mounted at /boot. + # This helps when running grub2-install and grub2-mkconfig, + # which will look at /boot and do the right thing. + # + # Then we copy (most of) the old root to the new disk, into a + # LUKS container. + # + # The kernel command line is changed to use the new root + # filesystem, and grub is installed on the new disk. The boot + # configuration of the VM has been changed to boot from the + # new disk. + # + # At that point the new root can be booted by the existing + # initrd, but the initrd will prompt for the passphrase (as + # expected). Thus, the initrd is regenerated to include the + # password agent from above. + # + # Before the reboot, we destroy the original disk to make + # really sure that it wont be used anymore. + + info = m.add_disk("4G", serial="NEWROOT", boot_disk=True) + dev = "/dev/" + info["dev"] + wait(lambda: m.execute(f"test -b {dev} && echo present").strip() == "present") + m.execute(f""" +parted -s {dev} mktable msdos +parted -s {dev} mkpart primary ext4 1M 300M +parted -s {dev} mkpart primary ext4 300M 100% +echo {passphrase} | cryptsetup luksFormat {dev}2 +echo {passphrase} | cryptsetup luksOpen {dev}2 dm-test +luks_uuid=$(blkid -p {dev}2 -s UUID -o value) +mkfs.ext4 /dev/mapper/dm-test +mkdir /new-root +mount /dev/mapper/dm-test /new-root +mkfs.ext4 {dev}1 +mkdir /new-root/boot +mount {dev}1 /new-root/boot +tar --one-file-system -cf - --exclude /boot --exclude='/var/tmp/*' --exclude='/var/cache/*' --exclude='/var/lib/mock/*' --exclude='/var/lib/containers/*' / | tar -C /new-root -xf - +touch /new-root/.autorelabel +tar --one-file-system -C /boot -cf - . | tar -C /new-root/boot -xf - +umount /new-root/boot +mount {dev}1 /boot +echo "(hd0) {dev}" >/boot/grub2/device.map +sed -i -e 's,/boot/,/,' /boot/loader/entries/* +uuid=$(blkid -p /dev/mapper/dm-test -s UUID -o value) +buuid=$(blkid -p {dev}1 -s UUID -o value) +echo "UUID=$uuid / auto defaults 0 0" >/new-root/etc/fstab +echo "UUID=$buuid /boot auto defaults 0 0" >>/new-root/etc/fstab +dracut --regenerate-all --force +grub2-install {dev} +grub2-mkconfig -o /boot/grub2/grub.cfg +grubby --update-kernel=ALL --args="root=UUID=$uuid rootflags=defaults rd.luks.uuid=$luks_uuid" +! test -f /etc/kernel/cmdline || cp /etc/kernel/cmdline /new-root/etc/kernel/cmdline +""", timeout=300) + luks_uuid = m.execute(f"blkid -p {dev}2 -s UUID -o value").strip() + m.spawn("dd if=/dev/zero of=/dev/vda bs=1M count=100; reboot", "reboot", check=False) + m.wait_reboot(300) + self.assertEqual(m.execute("findmnt -n -o SOURCE /").strip(), f"/dev/mapper/luks-{luks_uuid}") + class StorageCase(MachineCase, StorageHelpers): diff -Nru cockpit-podman-60/test/common/testlib.py cockpit-podman-61/test/common/testlib.py --- cockpit-podman-60/test/common/testlib.py 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/test/common/testlib.py 2023-01-25 09:16:41.000000000 +0000 @@ -146,7 +146,13 @@ "theme": "dark", "shell_size": [1920, 1200], "content_size": [1680, 1130] - } + }, + { + "name": "rtl", + "theme": "light", + "shell_size": [1920, 1200], + "content_size": [1680, 1130] + }, ] @@ -227,6 +233,7 @@ self._set_window_size(size[0], size[1]) if cookie: self.cdp.invoke("Network.setCookie", **cookie) + self.switch_to_top() self.cdp.invoke("Page.navigate", url=href) @@ -409,7 +416,7 @@ :param val: the value of the attribute """ self._wait_present(selector + ':not([disabled]):not([aria-disabled=true])') - self.call_js_func('ph_set_attr', selector, attr, val and 'true' or 'false') + self.call_js_func('ph_set_attr', selector, attr, val) def get_checked(self, selector: str): """Get checked state of a given selector. @@ -971,6 +978,14 @@ if self.cdp.browser.name == "chromium": self.cdp.invoke("Emulation.setEmulatedMedia", features=[{'name': 'prefers-color-scheme', 'value': name}]) + def _set_direction(self, direction: str): + cur_frame = self.cdp.cur_frame + if self.is_present("#shell-page"): + self.switch_to_top() + self.set_attr("#shell-page", "dir", direction) + self.switch_to_frame(cur_frame) + self.set_attr("html", "dir", direction) + def set_layout(self, name: str): layout = [lo for lo in self.layouts if lo["name"] == name][0] if layout != self.current_layout: @@ -999,8 +1014,7 @@ def assert_pixels_in_current_layout(self, selector: str, key: str, ignore: List[str] = [], scroll_into_view: Optional[str] = None, - wait_animations: bool = True, - wait_delay: float = 0.5): + wait_animations: bool = True): """Compare the given element with its reference in the current layout""" if not (Image and self.pixels_label): @@ -1030,7 +1044,6 @@ # But we know that tooltips fade in within 300ms, so we just # wait half a second to and side-step all that complexity. - time.sleep(wait_delay) if wait_animations: self.wait_js_cond('ph_count_animations(%s) == 0' % jsquote(selector)) @@ -1151,15 +1164,21 @@ if not (Image and self.pixels_label): return - previous_layout = self.current_layout["name"] - for layout in self.layouts: - if layout["name"] not in skip_layouts: - self.set_layout(layout["name"]) - self.assert_pixels_in_current_layout(selector, key, ignore=ignore, - scroll_into_view=scroll_into_view, - wait_animations=wait_animations, - wait_delay=wait_delay) - self.set_layout(previous_layout) + if self.current_layout: + previous_layout = self.current_layout["name"] + for layout in self.layouts: + if layout["name"] not in skip_layouts: + self.set_layout(layout["name"]) + time.sleep(wait_delay) + if "rtl" in self.current_layout["name"]: + self._set_direction("rtl") + self.assert_pixels_in_current_layout(selector, key, ignore=ignore, + scroll_into_view=scroll_into_view, + wait_animations=wait_animations) + + if "rtl" in self.current_layout["name"]: + self._set_direction("ltr") + self.set_layout(previous_layout) def assert_no_unused_pixel_test_references(self): """Check whether all reference images in test/reference have been used.""" @@ -1765,7 +1784,7 @@ # HACK: pybridge bugs if os.environ.get("TEST_SCENARIO") == "pybridge": self.allowed_messages += [ - "ERROR:asyncio:Task was destroyed but it is pending!", + "asyncio-ERROR: Task was destroyed but it is pending!", "task:.*Task pending.*cockpit/channels/dbus.py.*"] # Python 3.11 traceback annotation @@ -1774,14 +1793,13 @@ self.allowed_messages += [ r"Exception ignored on calling ctypes callback function: .handler.*", r"asyncio.exceptions.InvalidStateError: invalid state", - r"ERROR:asyncio:Exception in callback _Transport._read_ready.*", + r"asyncio-ERROR: Exception in callback _Transport._read_ready.*", r"handle: ", r"Traceback \(most recent call last\):", r"File .*asyncio/events.py.*", r"self._context.run\(self._callback, \*self._args\)", r"File .*cockpit/transports.py.* _read_ready", - r"data = os.read\(self._in_fd, _Transport.BLOCK_SIZE\)", - r"ConnectionResetError: \[Errno 104\] Connection reset by peer"] + r"data = os.read\(self._in_fd, _Transport.BLOCK_SIZE\)"] self.allowed_messages += [ r"File .*/systemd_ctypes/bus.py.* in handler", @@ -1790,18 +1808,6 @@ r"future.set_result\(message\)"] self.allowed_messages += [ - r"ERROR:asyncio:Exception in callback BusMessage._coroutine_task_complete.*", - r"handle: .*Handle BusMessage._coroutine_task_complete.*", - r"File .*/systemd_ctypes/bus.py.* in _coroutine_task_complete", - r"self.reply_method_function_return_value.*", - r"File .*/cockpit/superuser.py.*", - r"await startup.wait.*", - r"await self.future", - r"File .*/cockpit/transports.py.*", - r"n_bytes = os.write\(self._out_fd, data\)", - r"BrokenPipeError: \[Errno 32\] Broken pipe"] - - self.allowed_messages += [ r"while .*result := self.consume_one_frame.*", r"self._protocol.data_received\(data\)", r"File .*/cockpit/protocol.py.*", @@ -1819,36 +1825,6 @@ r"self.packages.*.serve_file.*", r"KeyError: 'manifests.json'"] - # https://cockpit-logs.us-east-1.linodeobjects.com/pull-18052-20221219-220331-9aa9eeeb-fedora-36-pybridge/log.html#150 - self.allowed_messages += [ - r"self.channel_data_received\(channel, data\)", - r"File .*/cockpit/peer.py.*, in channel_data_received", - r"self.send_channel_data\(channel, data\)", - r"self.router.write_channel_data\(channel, data\)", - r"self.transport.write\(header . payload\)", - r"assert not self._closing", - r"AssertionError", - ] - - self.allowed_messages.append(".* is not in the sudoers file.*") - self.allowed_messages.append("sudo: no valid sudoers sources found, quitting") - - # TestSuperuser.testWrongPasswd, message should go to the caller, not the journal - self.allowed_messages.append("Sorry, try again.") - # likewise for TestAccounts.testBasic; should not go to journal - self.allowed_messages.append("sudo: no password was provided") - self.allowed_messages.append("sudo: .* incorrect password attempt") - - # TestSuperuserOldWebserver.test{,NotAuth} - self.allowed_messages.append("session timed out") - self.allowed_messages.append("cockpit-ssh.*: refusing to connect to unknown host:.*") - - # TestJournal.testAbrtSegv - self.allowed_messages.append("invalid non-UTF8 @data passed as text to web_socket_connection_send.*") - - # TestLogin.testSessionRecordingShell - self.allowed_messages.append(r"future.set_exception\(error\)") - messages = machine.journal_messages(matches, 6, cursor=cursor) if "TEST_AUDIT_NO_SELINUX" not in os.environ: diff -Nru cockpit-podman-60/test/reference-image cockpit-podman-61/test/reference-image --- cockpit-podman-60/test/reference-image 2023-01-12 08:01:05.000000000 +0000 +++ cockpit-podman-61/test/reference-image 2023-01-25 09:16:41.000000000 +0000 @@ -1 +1 @@ -fedora-36 +fedora-37