diff options
-rw-r--r-- | bitbake/lib/bb/fetch2/perforce.py | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/bitbake/lib/bb/fetch2/perforce.py b/bitbake/lib/bb/fetch2/perforce.py index f57c2a4f52..83128cdeba 100644 --- a/bitbake/lib/bb/fetch2/perforce.py +++ b/bitbake/lib/bb/fetch2/perforce.py | |||
@@ -17,6 +17,36 @@ from bb.fetch2 import FetchError | |||
17 | from bb.fetch2 import logger | 17 | from bb.fetch2 import logger |
18 | from bb.fetch2 import runfetchcmd | 18 | from bb.fetch2 import runfetchcmd |
19 | 19 | ||
20 | class PerforceProgressHandler (bb.progress.BasicProgressHandler): | ||
21 | """ | ||
22 | Implements basic progress information for perforce, based on the number of | ||
23 | files to be downloaded. | ||
24 | |||
25 | The p4 print command will print one line per file, therefore it can be used | ||
26 | to "count" the number of files already completed and give an indication of | ||
27 | the progress. | ||
28 | """ | ||
29 | def __init__(self, d, num_files): | ||
30 | self._num_files = num_files | ||
31 | self._count = 0 | ||
32 | super(PerforceProgressHandler, self).__init__(d) | ||
33 | |||
34 | # Send an initial progress event so the bar gets shown | ||
35 | self._fire_progress(-1) | ||
36 | |||
37 | def write(self, string): | ||
38 | self._count = self._count + 1 | ||
39 | |||
40 | percent = int(100.0 * float(self._count) / float(self._num_files)) | ||
41 | |||
42 | # In case something goes wrong, we try to preserve our sanity | ||
43 | if percent > 100: | ||
44 | percent = 100 | ||
45 | |||
46 | self.update(percent) | ||
47 | |||
48 | super(PerforceProgressHandler, self).write(string) | ||
49 | |||
20 | class Perforce(FetchMethod): | 50 | class Perforce(FetchMethod): |
21 | """ Class to fetch from perforce repositories """ | 51 | """ Class to fetch from perforce repositories """ |
22 | def supports(self, ud, d): | 52 | def supports(self, ud, d): |
@@ -150,10 +180,12 @@ class Perforce(FetchMethod): | |||
150 | bb.utils.remove(ud.pkgdir, True) | 180 | bb.utils.remove(ud.pkgdir, True) |
151 | bb.utils.mkdirhier(ud.pkgdir) | 181 | bb.utils.mkdirhier(ud.pkgdir) |
152 | 182 | ||
183 | progresshandler = PerforceProgressHandler(d, len(filelist)) | ||
184 | |||
153 | for afile in filelist: | 185 | for afile in filelist: |
154 | p4fetchcmd = self._buildp4command(ud, d, 'print', afile) | 186 | p4fetchcmd = self._buildp4command(ud, d, 'print', afile) |
155 | bb.fetch2.check_network_access(d, p4fetchcmd, ud.url) | 187 | bb.fetch2.check_network_access(d, p4fetchcmd, ud.url) |
156 | runfetchcmd(p4fetchcmd, d, workdir=ud.pkgdir) | 188 | runfetchcmd(p4fetchcmd, d, workdir=ud.pkgdir, log=progresshandler) |
157 | 189 | ||
158 | runfetchcmd('tar -czf %s p4' % (ud.localpath), d, cleanup=[ud.localpath], workdir=ud.pkgdir) | 190 | runfetchcmd('tar -czf %s p4' % (ud.localpath), d, cleanup=[ud.localpath], workdir=ud.pkgdir) |
159 | 191 | ||