Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package disomaster for openSUSE:Factory checked in at 2022-09-01 22:10:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/disomaster (Old) and /work/SRC/openSUSE:Factory/.disomaster.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "disomaster" Thu Sep 1 22:10:05 2022 rev:3 rq:1000238 version:5.0.8 Changes: -------- --- /work/SRC/openSUSE:Factory/disomaster/disomaster.changes 2021-06-02 22:11:12.724124193 +0200 +++ /work/SRC/openSUSE:Factory/.disomaster.new.2083/disomaster.changes 2022-09-01 22:10:56.540206621 +0200 @@ -1,0 +2,7 @@ +Sun Aug 28 11:54:08 UTC 2022 - Hillwood Yang <[email protected]> + +- Update version to 5.0.8 + * impl 'dumpISO' + * Fix bugs + +------------------------------------------------------------------- Old: ---- disomaster-5.0.7.tar.gz New: ---- disomaster-5.0.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ disomaster.spec ++++++ --- /var/tmp/diff_new_pack.eO8Sqd/_old 2022-09-01 22:10:57.024207945 +0200 +++ /var/tmp/diff_new_pack.eO8Sqd/_new 2022-09-01 22:10:57.028207956 +0200 @@ -1,7 +1,7 @@ # # spec file for package disomaster # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,7 +19,7 @@ %define sover 1 Name: disomaster -Version: 5.0.7 +Version: 5.0.8 Release: 0 License: GPL-3.0-or-later Summary: A libisoburn wrapper ++++++ disomaster-5.0.7.tar.gz -> disomaster-5.0.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/backup-to-gitlab.yml new/disomaster-5.0.8/.github/workflows/backup-to-gitlab.yml --- old/disomaster-5.0.7/.github/workflows/backup-to-gitlab.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/backup-to-gitlab.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,52 @@ +name: backup to gitlab +on: [push] + +concurrency: + group: ${{ github.workflow }} + cancel-in-progress: true + +jobs: + backup-to-gitlab: + if: github.repository_owner == 'linuxdeepin' + name: backup-to-gitlab + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + repository: "linuxdeepin/jenkins-bridge-client" + path: jenkins-bridge-client + + - name: Install Client + run: | + cd $GITHUB_WORKSPACE/jenkins-bridge-client + go build . + sudo install -Dvm755 jenkins-bridge-client -t /usr/bin/ + - name: Trigger sync + id: generate-runid + run: | + echo "::set-output name=RUN_ID::$(jenkins-bridge-client -triggerSync -token '${{ secrets.BRIDGETOKEN }}')" + - name: Print log + run: | + jenkins-bridge-client -printlog -token "${{ secrets.BRIDGETOKEN }}" -runid "${{ steps.generate-runid.outputs.RUN_ID }}" + + backup-to-gitee: + if: github.repository_owner == 'linuxdeepin' + runs-on: ubuntu-latest + steps: + - name: create-repo + run: | + repo=${{ github.event.repository.name }} + homepage="https://github.com/linuxdeepin/${repo}" + description="mirror of ${homepage}" + # remove '.' prefix + repo=${repo#"."} + curl -X POST --header 'Content-Type: application/json;charset=UTF-8' 'https://gitee.com/api/v5/enterprises/linuxdeepin/repos' -d '{"private": 1,"access_token":"${{ secrets.GITEE_SYNC_TOKEN }}","name":"'"$repo"'","description":"'"$description"'","homepage":"'"$homepage"'","has_issues":"false","has_wiki":"false","can_comment":"false"}' || true + - name: push + run: | + git clone --bare https://github.com/linuxdeepin/${{ github.event.repository.name }}.git .git + repo=${{ github.event.repository.name }} + # remove '.' prefix + repo=${repo#"."} + git remote set-url origin https://myml:${{ secrets.GITEE_SYNC_TOKEN }}@gitee.com/linuxdeepin/${repo}.git + git push -f --all --prune origin + git push --tags origin diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/call-build-deb.yml new/disomaster-5.0.8/.github/workflows/call-build-deb.yml --- old/disomaster-5.0.7/.github/workflows/call-build-deb.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/call-build-deb.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,17 @@ +name: Call build-deb +on: + pull_request_target: + paths-ignore: + - ".github/workflows/**" + types: [ opened, closed, synchronize ] + +concurrency: + group: ${{ github.workflow }}-pull/${{ github.event.number }} + cancel-in-progress: true + +jobs: + check_job: + if: github.event.action != 'closed' || github.event.pull_request.merged + uses: linuxdeepin/.github/.github/workflows/build-deb.yml@master + secrets: + BridgeToken: ${{ secrets.BridgeToken }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/call-chatOps.yml new/disomaster-5.0.8/.github/workflows/call-chatOps.yml --- old/disomaster-5.0.7/.github/workflows/call-chatOps.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/call-chatOps.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,10 @@ +name: chatOps +on: + issue_comment: + types: [created] + +jobs: + chatopt: + uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master + secrets: + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/call-clacheck.yml new/disomaster-5.0.8/.github/workflows/call-clacheck.yml --- old/disomaster-5.0.7/.github/workflows/call-clacheck.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/call-clacheck.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,16 @@ +name: Call CLA check +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened, closed, synchronize] + +concurrency: + group: ${{ github.workflow }}-pull/${{ github.event.number }} + cancel-in-progress: true + +jobs: + clacheck: + uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master + secrets: + APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/call-commitlint.yml new/disomaster-5.0.8/.github/workflows/call-commitlint.yml --- old/disomaster-5.0.7/.github/workflows/call-commitlint.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/call-commitlint.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,11 @@ +name: Call commitlint +on: + pull_request_target: + +concurrency: + group: ${{ github.workflow }}-pull/${{ github.event.number }} + cancel-in-progress: true + +jobs: + check_job: + uses: linuxdeepin/.github/.github/workflows/commitlint.yml@master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/call-license-check.yml new/disomaster-5.0.8/.github/workflows/call-license-check.yml --- old/disomaster-5.0.7/.github/workflows/call-license-check.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/call-license-check.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,16 @@ +name: Call License and README Check +on: + pull_request_target: + types: [opened, synchronize, reopened] + +permissions: + pull-requests: write + contents: read + +concurrency: + group: ${{ github.workflow }}-pull/${{ github.event.number }} + cancel-in-progress: true + +jobs: + license-check: + uses: linuxdeepin/.github/.github/workflows/license-check.yml@master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/.github/workflows/cppcheck.yml new/disomaster-5.0.8/.github/workflows/cppcheck.yml --- old/disomaster-5.0.7/.github/workflows/cppcheck.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/.github/workflows/cppcheck.yml 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,26 @@ +name: cppcheck +on: + pull_request_target: + paths-ignore: + - ".github/workflows/**" + +concurrency: + group: ${{ github.workflow }}-pull/${{ github.event.number }} + cancel-in-progress: true + +jobs: + cppchceck: + name: cppcheck + runs-on: ubuntu-latest + steps: + - run: export + - uses: actions/checkout@v2 + with: + ref: ${{ github.event.pull_request.head.sha }} + persist-credentials: false + - uses: linuxdeepin/action-cppcheck@main + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + repository: ${{ github.repository }} + pull_request_id: ${{ github.event.pull_request.number }} + allow_approve: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/archlinux/PKGBUILD new/disomaster-5.0.8/archlinux/PKGBUILD --- old/disomaster-5.0.7/archlinux/PKGBUILD 1970-01-01 01:00:00.000000000 +0100 +++ new/disomaster-5.0.8/archlinux/PKGBUILD 2022-08-16 10:23:54.000000000 +0200 @@ -0,0 +1,32 @@ +# Maintainer: justforlxz <[email protected]> +pkgname=disomaster-git +pkgver=5.0.7.r2.g157dd8f +pkgrel=1 +pkgdesc='Library to manipulate DISC burning.' +arch=('x86_64' 'aarch64') +url="https://github.com/linuxdeepin/disomaster" +license=('GPL3') +depends=('libisoburn') +makedepends=('git' 'qt5-tools') +groups=('deepin-git') +provides=('disomaster') +conflicts=('disomaster') +source=('source.tar.gz') +sha512sums=('SKIP') + +prepare() { + cd $deepin_source_name +} + +build() { + cd $deepin_source_name + + qmake-qt5 PREFIX=/usr + make +} + +package() { + cd $deepin_source_name + + make INSTALL_ROOT="$pkgdir" install +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/libdisomaster/disomaster.cpp new/disomaster-5.0.8/libdisomaster/disomaster.cpp --- old/disomaster-5.0.7/libdisomaster/disomaster.cpp 2020-12-08 04:28:44.000000000 +0100 +++ new/disomaster-5.0.8/libdisomaster/disomaster.cpp 2022-08-16 10:23:54.000000000 +0200 @@ -22,18 +22,18 @@ #include "xorriso.h" #include <QRegularExpression> -#define PCHAR(s) (char*)(s) +#define PCHAR(s) (char *)(s) -#define XORRISO_OPT(opt, x, ...) \ +#define XORRISO_OPT(opt, x, ...) \ Xorriso_set_problem_status(x, PCHAR(""), 0); \ - r = Xorriso_option_##opt(x, __VA_ARGS__); \ + r = Xorriso_option_##opt(x, __VA_ARGS__); \ r = Xorriso_eval_problem_status(x, r, 0); -#define JOBFAILED_IF(r, x) \ - if (r <= 0) { \ - Xorriso_option_end(x, 1); \ +#define JOBFAILED_IF(r, x) \ + if (r <= 0) { \ + Xorriso_option_end(x, 1); \ Q_EMIT jobStatusChanged(JobStatus::Failed, -1); \ - return false; \ + return false; \ } int XorrisoResultHandler(void *handle, char *text); @@ -44,7 +44,8 @@ class DISOMasterPrivate { private: - DISOMasterPrivate(DISOMaster *q): q_ptr(q) {} + DISOMasterPrivate(DISOMaster *q) + : q_ptr(q) {} XorrisO *xorriso; QHash<QUrl, QUrl> files; QHash<QString, DeviceProperty> dev; @@ -71,9 +72,9 @@ * return until the operation completes. Note the signal is emitted * from a separate thread (while the job is actually running). */ -DISOMaster::DISOMaster(QObject *parent): - QObject(parent), - d_ptr(new DISOMasterPrivate(this)) +DISOMaster::DISOMaster(QObject *parent) + : QObject(parent), + d_ptr(new DISOMasterPrivate(this)) { Q_D(DISOMaster); int r = Xorriso_new(&d->xorriso, PCHAR("xorriso"), 0); @@ -279,7 +280,7 @@ * \param volId volume name of the disc * \return true on success, false on failure */ -bool DISOMaster::commit(const BurnOptions &opts, int speed/* = 0*/, QString volId/* = "ISOIMAGE"*/) +bool DISOMaster::commit(const BurnOptions &opts, int speed /* = 0*/, QString volId /* = "ISOIMAGE"*/) { Q_D(DISOMaster); Q_EMIT jobStatusChanged(JobStatus::Stalled, 0); @@ -309,11 +310,10 @@ for (auto it = d->files.begin(); it != d->files.end(); ++it) { XORRISO_OPT( - map, d->xorriso, - it.key().toString().toUtf8().data(), - it.value().toString().toUtf8().data(), - 0 - ); + map, d->xorriso, + it.key().toString().toUtf8().data(), + it.value().toString().toUtf8().data(), + 0); JOBFAILED_IF(r, d->xorriso); } @@ -326,7 +326,6 @@ return true; } - /*! * \brief Burn all staged files to the disc. * \param speed desired writing speed in kilobytes per second @@ -367,11 +366,10 @@ for (auto it = d->files.begin(); it != d->files.end(); ++it) { XORRISO_OPT( - map, d->xorriso, - it.key().toString().toUtf8().data(), - it.value().toString().toUtf8().data(), - 0 - ); + map, d->xorriso, + it.key().toString().toUtf8().data(), + it.value().toString().toUtf8().data(), + 0); JOBFAILED_IF(r, d->xorriso); } @@ -466,13 +464,34 @@ } /*! - * \brief Dump the content of the disc to a file. (unimplemented) + * \brief Dump the content of the disc to a file + * xorriso -outdev /dev/sr[?] -check_media use=outdev data_to=[path] + * \param isopath the image file to be dumped + * \return true on success, false on failure */ -void DISOMaster::dumpISO(const QUrl isopath) +bool DISOMaster::dumpISO(const QUrl isopath) { Q_D(DISOMaster); - //use osirrox - //unimplemented + Q_EMIT jobStatusChanged(JobStatus::Running, 0); + d->xorrisomsg.clear(); + + Q_ASSERT(!isopath.isEmpty()); + Q_ASSERT(isopath.isValid()); + + int r; + char **av = new char *[2]; + int dummy = 0; + av[0] = strdup((QString("use=outdev")).toUtf8().data()); + av[1] = strdup((QString("data_to=") + isopath.path()).toUtf8().data()); + XORRISO_OPT(check_media, d->xorriso, 2, av, &dummy, 0); + + for (int i = 0; i < 2; ++i) + free(av[i]); + delete[] av; + + JOBFAILED_IF(r, d->xorriso); + + return true; } /*! @@ -511,7 +530,7 @@ for (int i = 0; i < 6; ++i) { free(av[i]); } - delete []av; + delete[] av; return true; } @@ -528,24 +547,24 @@ char **av; Xorriso_sieve_get_result(xorriso, PCHAR("Media current:"), &ac, &av, &avail, 0); if (ac < 1) { - Xorriso__dispose_words(&ac, &av); + Xorriso__dispose_words(&ac, &av); return; } QString mt = av[0]; const static QHash<QString, MediaType> typemap = { - {"CD-ROM", MediaType::CD_ROM}, - {"CD-R", MediaType::CD_R}, - {"CD-RW", MediaType::CD_RW}, - {"DVD-ROM", MediaType::DVD_ROM}, - {"DVD-R", MediaType::DVD_R}, - {"DVD-RW", MediaType::DVD_RW}, - {"DVD+R", MediaType::DVD_PLUS_R}, - {"DVD+R/DL", MediaType::DVD_PLUS_R_DL}, - {"DVD-RAM", MediaType::DVD_RAM}, - {"DVD+RW", MediaType::DVD_PLUS_RW}, - {"BD-ROM", MediaType::BD_ROM}, - {"BD-R", MediaType::BD_R}, - {"BD-RE", MediaType::BD_RE} + { "CD-ROM", MediaType::CD_ROM }, + { "CD-R", MediaType::CD_R }, + { "CD-RW", MediaType::CD_RW }, + { "DVD-ROM", MediaType::DVD_ROM }, + { "DVD-R", MediaType::DVD_R }, + { "DVD-RW", MediaType::DVD_RW }, + { "DVD+R", MediaType::DVD_PLUS_R }, + { "DVD+R/DL", MediaType::DVD_PLUS_R_DL }, + { "DVD-RAM", MediaType::DVD_RAM }, + { "DVD+RW", MediaType::DVD_PLUS_RW }, + { "BD-ROM", MediaType::BD_ROM }, + { "BD-R", MediaType::BD_R }, + { "BD-RE", MediaType::BD_RE } }; mt = mt.left(mt.indexOf(' ')); if (typemap.find(mt) != typemap.end()) { @@ -554,7 +573,7 @@ dev[curdev].media = MediaType::NoMedia; } Xorriso__dispose_words(&ac, &av); - + Xorriso_sieve_get_result(xorriso, PCHAR("Media summary:"), &ac, &av, &avail, 0); if (ac == 4) { const QString units = "kmg"; @@ -634,7 +653,7 @@ //check media r = QRegularExpression("([0-9]*) blocks read in ([0-9]*) seconds , ([0-9.]*)x"); m = r.match(msg); - if (m.hasMatch()) { + if (m.hasMatch() && dev[curdev].datablocks != 0) { double percentage = 100. * m.captured(1).toDouble() / dev[curdev].datablocks; Q_EMIT q->jobStatusChanged(DISOMaster::JobStatus::Running, percentage); } @@ -649,8 +668,7 @@ } //operation complete - if (msg.contains("Blanking done") || - msg.contains(QRegularExpression("Writing to .* completed successfully."))) { + if (msg.contains("Blanking done") || msg.contains(QRegularExpression("Writing to .* completed successfully."))) { Q_EMIT q->jobStatusChanged(DISOMaster::JobStatus::Finished, 0); } } @@ -659,7 +677,7 @@ int XorrisoResultHandler(void *handle, char *text) { - ((DISOMasterNS::DISOMasterPrivate*)handle)->messageReceived(0, text); + ((DISOMasterNS::DISOMasterPrivate *)handle)->messageReceived(0, text); return 1; } int XorrisoInfoHandler(void *handle, char *text) @@ -668,7 +686,7 @@ if (strstr(text, "DEBUG : Concurrent message watcher")) { return 1; } - ((DISOMasterNS::DISOMasterPrivate*)handle)->messageReceived(1, text); + ((DISOMasterNS::DISOMasterPrivate *)handle)->messageReceived(1, text); return 1; } /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/libdisomaster/disomaster.h new/disomaster-5.0.8/libdisomaster/disomaster.h --- old/disomaster-5.0.7/libdisomaster/disomaster.h 2020-12-08 04:28:44.000000000 +0100 +++ new/disomaster-5.0.8/libdisomaster/disomaster.h 2022-08-16 10:23:54.000000000 +0200 @@ -114,8 +114,7 @@ Q_DECL_DEPRECATED_X("Suggest use commit with BurnOptions instead") bool commit(int speed = 0, bool closeSession = false, QString volId = "ISOIMAGE"); bool erase(); bool checkmedia(double *qgood, double *qslow, double *qbad); - - void dumpISO(const QUrl isopath); + bool dumpISO(const QUrl isopath); bool writeISO(const QUrl isopath, int speed = 0); Q_SIGNALS: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/tests/testdisomaster.cpp new/disomaster-5.0.8/tests/testdisomaster.cpp --- old/disomaster-5.0.7/tests/testdisomaster.cpp 2020-12-08 04:28:44.000000000 +0100 +++ new/disomaster-5.0.8/tests/testdisomaster.cpp 2022-08-16 10:23:54.000000000 +0200 @@ -150,4 +150,27 @@ delete x; } +void TestDISOMaster::test_dumpISO() +{ + Q_ASSUME(qEnvironmentVariableIsSet("DISOMASTERTEST_DEVICE")); + Q_ASSUME(qEnvironmentVariableIsSet("DISOMASTERTEST_DEVICE")); + const QString dev = QString(qgetenv("DISOMASTERTEST_DEVICE")); + const QString iso = QString(qgetenv("DISOMASTERTEST_ISOFILE")); + + DISOMaster *x = new DISOMaster; + TestSignalReceiver *r = new TestSignalReceiver(x, this); + connect(x, &DISOMaster::jobStatusChanged, r, &TestSignalReceiver::updateJobStatus); + + QFuture<void> f = QtConcurrent::run([=] { + x->acquireDevice(dev); + x->dumpISO(QUrl::fromLocalFile(iso)); + x->releaseDevice(); + }); + + QTRY_VERIFY_WITH_TIMEOUT(st == DISOMaster::JobStatus::Finished, 300000); + f.waitForFinished(); + delete r; + delete x; +} + QTEST_MAIN(TestDISOMaster) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/disomaster-5.0.7/tests/testdisomaster.h new/disomaster-5.0.8/tests/testdisomaster.h --- old/disomaster-5.0.7/tests/testdisomaster.h 2020-12-08 04:28:44.000000000 +0100 +++ new/disomaster-5.0.8/tests/testdisomaster.h 2022-08-16 10:23:54.000000000 +0200 @@ -53,6 +53,7 @@ void test_erase(); void test_isoWrite(); void test_checkMedia(); + void test_dumpISO(); };
