Parallelize multi-repository pull
commitf0c8d52388b3f6dbb5fcc010a090d6c5cc0a09b6
authorKarsten Thoms <karsten.thoms@itemis.de>
Sun, 28 Oct 2018 21:38:05 +0000 (28 22:38 +0100)
committerAndrey Loskutov <loskutov@gmx.de>
Sat, 3 Nov 2018 14:56:01 +0000 (3 15:56 +0100)
tree4d6d1e4622272cca2489c9eeb5c052eae6449250
parent6514644d8f5c3f51c7fa44d4374d1ec43ccd78fd
Parallelize multi-repository pull

For each pulled repository a job is created that performs the pull
operation and refreshes affected projects. Each pull job defines a
scheduling rule for the affected projects. Created new core pull job
rule and configured it to have the same icon as the ui pull rule used by
the parent job.

The overall action waits until all scheduled jobs are
terminated, via job group API. Introduced new egit.core preference
"core_maxPullThreadsCount" (default is 1), which defines how many
parallel pull jobs are allowed, and added a UI for that preference on
the EGit root preferences page.

Changed IndexDiffCacheEntry.waitForWorkspaceLock() to wait for affected
projects only, not for the workspace root lock. This allows git status
recalculation for updated repositories start immediately after pull and
not wait for all jobs to be done.

Bug: 540548
Change-Id: Idc6f498197705d7b2c681dac9536470336b1ded8
Signed-off-by: Karsten Thoms <karsten.thoms@itemis.de>
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferenceInitializer.java
org.eclipse.egit.core/src/org/eclipse/egit/core/GitCorePreferences.java
org.eclipse.egit.core/src/org/eclipse/egit/core/JobFamilies.java
org.eclipse.egit.core/src/org/eclipse/egit/core/internal/indexdiff/IndexDiffCacheEntry.java
org.eclipse.egit.core/src/org/eclipse/egit/core/op/PullOperation.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIIcons.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/UIText.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/preferences/GitPreferenceRoot.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/pull/PullOperationUI.java
org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/uitext.properties