Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Discover
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Plasma
Discover
Commits
2fd22c34
Commit
2fd22c34
authored
Jan 24, 2018
by
Aleix Pol Gonzalez
🐧
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fetch all dependencies in a single transaction
PackageKit would choke on big updates otherwise
parent
2c131e8d
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
30 additions
and
13 deletions
+30
-13
libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
+21
-1
libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
...iscover/backends/PackageKitBackend/PackageKitResource.cpp
+8
-12
libdiscover/backends/PackageKitBackend/PackageKitResource.h
libdiscover/backends/PackageKitBackend/PackageKitResource.h
+1
-0
No files found.
libdiscover/backends/PackageKitBackend/PackageKitBackend.cpp
View file @
2fd22c34
...
...
@@ -515,9 +515,29 @@ void PackageKitBackend::fetchDetails(const QString& pkgid)
void
PackageKitBackend
::
performDetailsFetch
()
{
Q_ASSERT
(
!
m_packageNamesToFetchDetails
.
isEmpty
());
PackageKit
::
Transaction
*
transaction
=
PackageKit
::
Daemon
::
getDetails
(
m_packageNamesToFetchDetails
.
toList
());
const
auto
ids
=
m_packageNamesToFetchDetails
.
toList
();
PackageKit
::
Transaction
*
transaction
=
PackageKit
::
Daemon
::
getDetails
(
ids
);
connect
(
transaction
,
&
PackageKit
::
Transaction
::
details
,
this
,
&
PackageKitBackend
::
packageDetails
);
connect
(
transaction
,
&
PackageKit
::
Transaction
::
errorCode
,
this
,
&
PackageKitBackend
::
transactionError
);
QSharedPointer
<
QMap
<
QString
,
int
>>
packageDependencies
(
new
QMap
<
QString
,
int
>
);
auto
trans
=
PackageKit
::
Daemon
::
installPackages
(
ids
,
PackageKit
::
Transaction
::
TransactionFlagSimulate
);
connect
(
trans
,
&
PackageKit
::
Transaction
::
errorCode
,
this
,
&
PackageKitBackend
::
transactionError
);
connect
(
trans
,
&
PackageKit
::
Transaction
::
package
,
this
,
[
packageDependencies
](
PackageKit
::
Transaction
::
Info
/*info*/
,
const
QString
&
packageID
,
const
QString
&
/*summary*/
)
{
(
*
packageDependencies
)[
packageID
]
+=
1
;
});
connect
(
trans
,
&
PackageKit
::
Transaction
::
finished
,
this
,
[
this
,
packageDependencies
](
PackageKit
::
Transaction
::
Exit
/*status*/
)
{
auto
pkgDeps
=
(
*
packageDependencies
);
for
(
auto
it
=
pkgDeps
.
constBegin
(),
itEnd
=
pkgDeps
.
constEnd
();
it
!=
itEnd
;
++
it
)
{
const
auto
resources
=
resourcesByPackageName
(
PackageKit
::
Daemon
::
packageName
(
it
.
key
()));
for
(
auto
resource
:
resources
)
{
auto
pkres
=
qobject_cast
<
PackageKitResource
*>
(
resource
);
pkres
->
setDependenciesCount
(
it
.
value
());
}
}
});
}
void
PackageKitBackend
::
checkDaemonRunning
()
...
...
libdiscover/backends/PackageKitBackend/PackageKitResource.cpp
View file @
2fd22c34
...
...
@@ -169,18 +169,6 @@ void PackageKitResource::fetchDetails()
m_details
.
insert
(
QStringLiteral
(
"fetching"
),
true
);
//we add an entry so it's not re-fetched.
backend
()
->
fetchDetails
(
pkgid
);
auto
trans
=
PackageKit
::
Daemon
::
installPackages
({
pkgid
},
PackageKit
::
Transaction
::
TransactionFlagSimulate
);
connect
(
trans
,
&
PackageKit
::
Transaction
::
package
,
this
,
[
trans
](
PackageKit
::
Transaction
::
Info
/*info*/
,
const
QString
&
/*packageID*/
,
const
QString
&
/*summary*/
)
{
trans
->
setProperty
(
"dependencies"
,
trans
->
property
(
"dependencies"
).
toUInt
()
+
1
);
});
connect
(
trans
,
&
PackageKit
::
Transaction
::
finished
,
this
,
[
this
,
trans
](
PackageKit
::
Transaction
::
Exit
/*status*/
)
{
auto
deps
=
trans
->
property
(
"dependencies"
).
toUInt
();
if
(
deps
!=
m_dependenciesCount
)
{
m_dependenciesCount
=
deps
;
Q_EMIT
sizeChanged
();
}
});
}
void
PackageKitResource
::
failedFetchingDetails
(
PackageKit
::
Transaction
::
Error
,
const
QString
&
msg
)
...
...
@@ -188,6 +176,14 @@ void PackageKitResource::failedFetchingDetails(PackageKit::Transaction::Error, c
qWarning
()
<<
"error fetching details"
<<
msg
;
}
void
PackageKitResource
::
setDependenciesCount
(
uint
deps
)
{
if
(
deps
!=
m_dependenciesCount
)
{
m_dependenciesCount
=
deps
;
Q_EMIT
sizeChanged
();
}
}
void
PackageKitResource
::
setDetails
(
const
PackageKit
::
Details
&
details
)
{
const
bool
ourDetails
=
details
.
packageId
()
==
availablePackageId
();
...
...
libdiscover/backends/PackageKitBackend/PackageKitResource.h
View file @
2fd22c34
...
...
@@ -67,6 +67,7 @@ class PackageKitResource : public AbstractResource
bool
canExecute
()
const
override
{
return
false
;
}
QString
sizeDescription
()
override
;
void
setDependenciesCount
(
uint
count
);
public
Q_SLOTS
:
void
addPackageId
(
PackageKit
::
Transaction
::
Info
info
,
const
QString
&
packageId
,
bool
arch
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment