diff options
author | Matt Madison <matt@madison.systems> | 2016-08-10 10:08:16 -0700 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2016-08-20 16:08:59 +0100 |
commit | ab09541d5517da9b1a23923ea8f5c26ddf745084 (patch) | |
tree | b0b81a809ec783b7481c012b430b9f6618e87a73 /bitbake/lib | |
parent | eefb4b66c8628fbf366ebc5c23cfe013c8fa3756 (diff) | |
download | poky-ab09541d5517da9b1a23923ea8f5c26ddf745084.tar.gz |
bitbake: fetch2: preserve current working directory
Fix the methods in all fetchers so they don't change
the current working directory of the calling process, which
could lead to "changed cwd" warnings from bitbake.
(Bitbake rev: 6aa78bf3bd1f75728209e2d01faef31cb8887333)
Signed-off-by: Matt Madison <matt@madison.systems>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/fetch2/__init__.py | 21 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/bzr.py | 11 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/clearcase.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/cvs.py | 15 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/git.py | 45 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/gitannex.py | 25 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/gitsm.py | 23 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/hg.py | 28 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/npm.py | 22 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/osc.py | 10 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/perforce.py | 6 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/repo.py | 13 | ||||
-rw-r--r-- | bitbake/lib/bb/fetch2/svn.py | 13 |
13 files changed, 101 insertions, 137 deletions
diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 9054b2ec18..7a3eb3c5ab 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py | |||
@@ -779,7 +779,7 @@ def localpath(url, d): | |||
779 | fetcher = bb.fetch2.Fetch([url], d) | 779 | fetcher = bb.fetch2.Fetch([url], d) |
780 | return fetcher.localpath(url) | 780 | return fetcher.localpath(url) |
781 | 781 | ||
782 | def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None): | 782 | def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None, workdir=None): |
783 | """ | 783 | """ |
784 | Run cmd returning the command output | 784 | Run cmd returning the command output |
785 | Raise an error if interrupted or cmd fails | 785 | Raise an error if interrupted or cmd fails |
@@ -821,7 +821,7 @@ def runfetchcmd(cmd, d, quiet=False, cleanup=None, log=None): | |||
821 | error_message = "" | 821 | error_message = "" |
822 | 822 | ||
823 | try: | 823 | try: |
824 | (output, errors) = bb.process.run(cmd, log=log, shell=True, stderr=subprocess.PIPE) | 824 | (output, errors) = bb.process.run(cmd, log=log, shell=True, stderr=subprocess.PIPE, cwd=workdir) |
825 | success = True | 825 | success = True |
826 | except bb.process.NotFoundError as e: | 826 | except bb.process.NotFoundError as e: |
827 | error_message = "Fetch command %s" % (e.command) | 827 | error_message = "Fetch command %s" % (e.command) |
@@ -1436,17 +1436,11 @@ class FetchMethod(object): | |||
1436 | if not cmd: | 1436 | if not cmd: |
1437 | return | 1437 | return |
1438 | 1438 | ||
1439 | # Change to unpackdir before executing command | ||
1440 | save_cwd = os.getcwd(); | ||
1441 | os.chdir(unpackdir) | ||
1442 | |||
1443 | path = data.getVar('PATH', True) | 1439 | path = data.getVar('PATH', True) |
1444 | if path: | 1440 | if path: |
1445 | cmd = "PATH=\"%s\" %s" % (path, cmd) | 1441 | cmd = "PATH=\"%s\" %s" % (path, cmd) |
1446 | bb.note("Unpacking %s to %s/" % (file, os.getcwd())) | 1442 | bb.note("Unpacking %s to %s/" % (file, unpackdir)) |
1447 | ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True) | 1443 | ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True, cwd=unpackdir) |
1448 | |||
1449 | os.chdir(save_cwd) | ||
1450 | 1444 | ||
1451 | if ret != 0: | 1445 | if ret != 0: |
1452 | raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), urldata.url) | 1446 | raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), urldata.url) |
@@ -1559,6 +1553,8 @@ class Fetch(object): | |||
1559 | network = self.d.getVar("BB_NO_NETWORK", True) | 1553 | network = self.d.getVar("BB_NO_NETWORK", True) |
1560 | premirroronly = (self.d.getVar("BB_FETCH_PREMIRRORONLY", True) == "1") | 1554 | premirroronly = (self.d.getVar("BB_FETCH_PREMIRRORONLY", True) == "1") |
1561 | 1555 | ||
1556 | save_cwd = os.getcwd() | ||
1557 | |||
1562 | for u in urls: | 1558 | for u in urls: |
1563 | ud = self.ud[u] | 1559 | ud = self.ud[u] |
1564 | ud.setup_localpath(self.d) | 1560 | ud.setup_localpath(self.d) |
@@ -1633,6 +1629,7 @@ class Fetch(object): | |||
1633 | raise | 1629 | raise |
1634 | 1630 | ||
1635 | finally: | 1631 | finally: |
1632 | os.chdir(save_cwd) | ||
1636 | if ud.lockfile: | 1633 | if ud.lockfile: |
1637 | bb.utils.unlockfile(lf) | 1634 | bb.utils.unlockfile(lf) |
1638 | 1635 | ||
@@ -1641,6 +1638,8 @@ class Fetch(object): | |||
1641 | Check all urls exist upstream | 1638 | Check all urls exist upstream |
1642 | """ | 1639 | """ |
1643 | 1640 | ||
1641 | save_cwd = os.getcwd() | ||
1642 | |||
1644 | if not urls: | 1643 | if not urls: |
1645 | urls = self.urls | 1644 | urls = self.urls |
1646 | 1645 | ||
@@ -1664,6 +1663,8 @@ class Fetch(object): | |||
1664 | if not ret: | 1663 | if not ret: |
1665 | raise FetchError("URL %s doesn't work" % u, u) | 1664 | raise FetchError("URL %s doesn't work" % u, u) |
1666 | 1665 | ||
1666 | os.chdir(save_cwd) | ||
1667 | |||
1667 | def unpack(self, root, urls=None): | 1668 | def unpack(self, root, urls=None): |
1668 | """ | 1669 | """ |
1669 | Check all urls exist upstream | 1670 | Check all urls exist upstream |
diff --git a/bitbake/lib/bb/fetch2/bzr.py b/bitbake/lib/bb/fetch2/bzr.py index ce11ee7c20..72264afb5a 100644 --- a/bitbake/lib/bb/fetch2/bzr.py +++ b/bitbake/lib/bb/fetch2/bzr.py | |||
@@ -88,19 +88,15 @@ class Bzr(FetchMethod): | |||
88 | bzrcmd = self._buildbzrcommand(ud, d, "update") | 88 | bzrcmd = self._buildbzrcommand(ud, d, "update") |
89 | logger.debug(1, "BZR Update %s", ud.url) | 89 | logger.debug(1, "BZR Update %s", ud.url) |
90 | bb.fetch2.check_network_access(d, bzrcmd, ud.url) | 90 | bb.fetch2.check_network_access(d, bzrcmd, ud.url) |
91 | os.chdir(os.path.join (ud.pkgdir, os.path.basename(ud.path))) | 91 | runfetchcmd(bzrcmd, d, workdir=os.path.join(ud.pkgdir, os.path.basename(ud.path))) |
92 | runfetchcmd(bzrcmd, d) | ||
93 | else: | 92 | else: |
94 | bb.utils.remove(os.path.join(ud.pkgdir, os.path.basename(ud.pkgdir)), True) | 93 | bb.utils.remove(os.path.join(ud.pkgdir, os.path.basename(ud.pkgdir)), True) |
95 | bzrcmd = self._buildbzrcommand(ud, d, "fetch") | 94 | bzrcmd = self._buildbzrcommand(ud, d, "fetch") |
96 | bb.fetch2.check_network_access(d, bzrcmd, ud.url) | 95 | bb.fetch2.check_network_access(d, bzrcmd, ud.url) |
97 | logger.debug(1, "BZR Checkout %s", ud.url) | 96 | logger.debug(1, "BZR Checkout %s", ud.url) |
98 | bb.utils.mkdirhier(ud.pkgdir) | 97 | bb.utils.mkdirhier(ud.pkgdir) |
99 | os.chdir(ud.pkgdir) | ||
100 | logger.debug(1, "Running %s", bzrcmd) | 98 | logger.debug(1, "Running %s", bzrcmd) |
101 | runfetchcmd(bzrcmd, d) | 99 | runfetchcmd(bzrcmd, d, workdir=ud.pkgdir) |
102 | |||
103 | os.chdir(ud.pkgdir) | ||
104 | 100 | ||
105 | scmdata = ud.parm.get("scmdata", "") | 101 | scmdata = ud.parm.get("scmdata", "") |
106 | if scmdata == "keep": | 102 | if scmdata == "keep": |
@@ -109,7 +105,8 @@ class Bzr(FetchMethod): | |||
109 | tar_flags = "--exclude='.bzr' --exclude='.bzrtags'" | 105 | tar_flags = "--exclude='.bzr' --exclude='.bzrtags'" |
110 | 106 | ||
111 | # tar them up to a defined filename | 107 | # tar them up to a defined filename |
112 | runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, os.path.basename(ud.pkgdir)), d, cleanup = [ud.localpath]) | 108 | runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, os.path.basename(ud.pkgdir)), |
109 | d, cleanup=[ud.localpath], workdir=ud.pkgdir) | ||
113 | 110 | ||
114 | def supports_srcrev(self): | 111 | def supports_srcrev(self): |
115 | return True | 112 | return True |
diff --git a/bitbake/lib/bb/fetch2/clearcase.py b/bitbake/lib/bb/fetch2/clearcase.py index ba83e7cb60..70e280a8dd 100644 --- a/bitbake/lib/bb/fetch2/clearcase.py +++ b/bitbake/lib/bb/fetch2/clearcase.py | |||
@@ -202,11 +202,10 @@ class ClearCase(FetchMethod): | |||
202 | 202 | ||
203 | def _remove_view(self, ud, d): | 203 | def _remove_view(self, ud, d): |
204 | if os.path.exists(ud.viewdir): | 204 | if os.path.exists(ud.viewdir): |
205 | os.chdir(ud.ccasedir) | ||
206 | cmd = self._build_ccase_command(ud, 'rmview'); | 205 | cmd = self._build_ccase_command(ud, 'rmview'); |
207 | logger.info("cleaning up [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname) | 206 | logger.info("cleaning up [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname) |
208 | bb.fetch2.check_network_access(d, cmd, ud.url) | 207 | bb.fetch2.check_network_access(d, cmd, ud.url) |
209 | output = runfetchcmd(cmd, d) | 208 | output = runfetchcmd(cmd, d, workdir=ud.ccasedir) |
210 | logger.info("rmview output: %s", output) | 209 | logger.info("rmview output: %s", output) |
211 | 210 | ||
212 | def need_update(self, ud, d): | 211 | def need_update(self, ud, d): |
@@ -241,11 +240,10 @@ class ClearCase(FetchMethod): | |||
241 | raise e | 240 | raise e |
242 | 241 | ||
243 | # Set configspec: Setting the configspec effectively fetches the files as defined in the configspec | 242 | # Set configspec: Setting the configspec effectively fetches the files as defined in the configspec |
244 | os.chdir(ud.viewdir) | ||
245 | cmd = self._build_ccase_command(ud, 'setcs'); | 243 | cmd = self._build_ccase_command(ud, 'setcs'); |
246 | logger.info("fetching data [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname) | 244 | logger.info("fetching data [VOB=%s label=%s view=%s]", ud.vob, ud.label, ud.viewname) |
247 | bb.fetch2.check_network_access(d, cmd, ud.url) | 245 | bb.fetch2.check_network_access(d, cmd, ud.url) |
248 | output = runfetchcmd(cmd, d) | 246 | output = runfetchcmd(cmd, d, workdir=ud.viewdir) |
249 | logger.info("%s", output) | 247 | logger.info("%s", output) |
250 | 248 | ||
251 | # Copy the configspec to the viewdir so we have it in our source tarball later | 249 | # Copy the configspec to the viewdir so we have it in our source tarball later |
diff --git a/bitbake/lib/bb/fetch2/cvs.py b/bitbake/lib/bb/fetch2/cvs.py index 43a234f590..5ff70ba921 100644 --- a/bitbake/lib/bb/fetch2/cvs.py +++ b/bitbake/lib/bb/fetch2/cvs.py | |||
@@ -123,22 +123,23 @@ class Cvs(FetchMethod): | |||
123 | pkg = d.getVar('PN', True) | 123 | pkg = d.getVar('PN', True) |
124 | pkgdir = os.path.join(d.getVar('CVSDIR', True), pkg) | 124 | pkgdir = os.path.join(d.getVar('CVSDIR', True), pkg) |
125 | moddir = os.path.join(pkgdir, localdir) | 125 | moddir = os.path.join(pkgdir, localdir) |
126 | workdir = None | ||
126 | if os.access(os.path.join(moddir, 'CVS'), os.R_OK): | 127 | if os.access(os.path.join(moddir, 'CVS'), os.R_OK): |
127 | logger.info("Update " + ud.url) | 128 | logger.info("Update " + ud.url) |
128 | bb.fetch2.check_network_access(d, cvsupdatecmd, ud.url) | 129 | bb.fetch2.check_network_access(d, cvsupdatecmd, ud.url) |
129 | # update sources there | 130 | # update sources there |
130 | os.chdir(moddir) | 131 | workdir = moddir |
131 | cmd = cvsupdatecmd | 132 | cmd = cvsupdatecmd |
132 | else: | 133 | else: |
133 | logger.info("Fetch " + ud.url) | 134 | logger.info("Fetch " + ud.url) |
134 | # check out sources there | 135 | # check out sources there |
135 | bb.utils.mkdirhier(pkgdir) | 136 | bb.utils.mkdirhier(pkgdir) |
136 | os.chdir(pkgdir) | 137 | workdir = pkgdir |
137 | logger.debug(1, "Running %s", cvscmd) | 138 | logger.debug(1, "Running %s", cvscmd) |
138 | bb.fetch2.check_network_access(d, cvscmd, ud.url) | 139 | bb.fetch2.check_network_access(d, cvscmd, ud.url) |
139 | cmd = cvscmd | 140 | cmd = cvscmd |
140 | 141 | ||
141 | runfetchcmd(cmd, d, cleanup = [moddir]) | 142 | runfetchcmd(cmd, d, cleanup=[moddir], workdir=workdir) |
142 | 143 | ||
143 | if not os.access(moddir, os.R_OK): | 144 | if not os.access(moddir, os.R_OK): |
144 | raise FetchError("Directory %s was not readable despite sucessful fetch?!" % moddir, ud.url) | 145 | raise FetchError("Directory %s was not readable despite sucessful fetch?!" % moddir, ud.url) |
@@ -150,15 +151,15 @@ class Cvs(FetchMethod): | |||
150 | tar_flags = "--exclude='CVS'" | 151 | tar_flags = "--exclude='CVS'" |
151 | 152 | ||
152 | # tar them up to a defined filename | 153 | # tar them up to a defined filename |
154 | workdir = None | ||
153 | if 'fullpath' in ud.parm: | 155 | if 'fullpath' in ud.parm: |
154 | os.chdir(pkgdir) | 156 | workdir = pkgdir |
155 | cmd = "tar %s -czf %s %s" % (tar_flags, ud.localpath, localdir) | 157 | cmd = "tar %s -czf %s %s" % (tar_flags, ud.localpath, localdir) |
156 | else: | 158 | else: |
157 | os.chdir(moddir) | 159 | workdir = os.path.dirname(os.path.realpath(moddir)) |
158 | os.chdir('..') | ||
159 | cmd = "tar %s -czf %s %s" % (tar_flags, ud.localpath, os.path.basename(moddir)) | 160 | cmd = "tar %s -czf %s %s" % (tar_flags, ud.localpath, os.path.basename(moddir)) |
160 | 161 | ||
161 | runfetchcmd(cmd, d, cleanup = [ud.localpath]) | 162 | runfetchcmd(cmd, d, cleanup=[ud.localpath], workdir=workdir) |
162 | 163 | ||
163 | def clean(self, ud, d): | 164 | def clean(self, ud, d): |
164 | """ Clean CVS Files and tarballs """ | 165 | """ Clean CVS Files and tarballs """ |
diff --git a/bitbake/lib/bb/fetch2/git.py b/bitbake/lib/bb/fetch2/git.py index fd8f3fdf4d..1bec60ab71 100644 --- a/bitbake/lib/bb/fetch2/git.py +++ b/bitbake/lib/bb/fetch2/git.py | |||
@@ -219,9 +219,8 @@ class Git(FetchMethod): | |||
219 | def need_update(self, ud, d): | 219 | def need_update(self, ud, d): |
220 | if not os.path.exists(ud.clonedir): | 220 | if not os.path.exists(ud.clonedir): |
221 | return True | 221 | return True |
222 | os.chdir(ud.clonedir) | ||
223 | for name in ud.names: | 222 | for name in ud.names: |
224 | if not self._contains_ref(ud, d, name): | 223 | if not self._contains_ref(ud, d, name, ud.clonedir): |
225 | return True | 224 | return True |
226 | if ud.write_tarballs and not os.path.exists(ud.fullmirror): | 225 | if ud.write_tarballs and not os.path.exists(ud.fullmirror): |
227 | return True | 226 | return True |
@@ -242,8 +241,7 @@ class Git(FetchMethod): | |||
242 | # If the checkout doesn't exist and the mirror tarball does, extract it | 241 | # If the checkout doesn't exist and the mirror tarball does, extract it |
243 | if not os.path.exists(ud.clonedir) and os.path.exists(ud.fullmirror): | 242 | if not os.path.exists(ud.clonedir) and os.path.exists(ud.fullmirror): |
244 | bb.utils.mkdirhier(ud.clonedir) | 243 | bb.utils.mkdirhier(ud.clonedir) |
245 | os.chdir(ud.clonedir) | 244 | runfetchcmd("tar -xzf %s" % (ud.fullmirror), d, workdir=ud.clonedir) |
246 | runfetchcmd("tar -xzf %s" % (ud.fullmirror), d) | ||
247 | 245 | ||
248 | repourl = self._get_repo_url(ud) | 246 | repourl = self._get_repo_url(ud) |
249 | 247 | ||
@@ -258,34 +256,32 @@ class Git(FetchMethod): | |||
258 | progresshandler = GitProgressHandler(d) | 256 | progresshandler = GitProgressHandler(d) |
259 | runfetchcmd(clone_cmd, d, log=progresshandler) | 257 | runfetchcmd(clone_cmd, d, log=progresshandler) |
260 | 258 | ||
261 | os.chdir(ud.clonedir) | ||
262 | # Update the checkout if needed | 259 | # Update the checkout if needed |
263 | needupdate = False | 260 | needupdate = False |
264 | for name in ud.names: | 261 | for name in ud.names: |
265 | if not self._contains_ref(ud, d, name): | 262 | if not self._contains_ref(ud, d, name, ud.clonedir): |
266 | needupdate = True | 263 | needupdate = True |
267 | if needupdate: | 264 | if needupdate: |
268 | try: | 265 | try: |
269 | runfetchcmd("%s remote rm origin" % ud.basecmd, d) | 266 | runfetchcmd("%s remote rm origin" % ud.basecmd, d, workdir=ud.clonedir) |
270 | except bb.fetch2.FetchError: | 267 | except bb.fetch2.FetchError: |
271 | logger.debug(1, "No Origin") | 268 | logger.debug(1, "No Origin") |
272 | 269 | ||
273 | runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d) | 270 | runfetchcmd("%s remote add --mirror=fetch origin %s" % (ud.basecmd, repourl), d, workdir=ud.clonedir) |
274 | fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl) | 271 | fetch_cmd = "LANG=C %s fetch -f --prune --progress %s refs/*:refs/*" % (ud.basecmd, repourl) |
275 | if ud.proto.lower() != 'file': | 272 | if ud.proto.lower() != 'file': |
276 | bb.fetch2.check_network_access(d, fetch_cmd, ud.url) | 273 | bb.fetch2.check_network_access(d, fetch_cmd, ud.url) |
277 | progresshandler = GitProgressHandler(d) | 274 | progresshandler = GitProgressHandler(d) |
278 | runfetchcmd(fetch_cmd, d, log=progresshandler) | 275 | runfetchcmd(fetch_cmd, d, log=progresshandler, workdir=ud.clonedir) |
279 | runfetchcmd("%s prune-packed" % ud.basecmd, d) | 276 | runfetchcmd("%s prune-packed" % ud.basecmd, d, workdir=ud.clonedir) |
280 | runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d) | 277 | runfetchcmd("%s pack-redundant --all | xargs -r rm" % ud.basecmd, d, workdir=ud.clonedir) |
281 | try: | 278 | try: |
282 | os.unlink(ud.fullmirror) | 279 | os.unlink(ud.fullmirror) |
283 | except OSError as exc: | 280 | except OSError as exc: |
284 | if exc.errno != errno.ENOENT: | 281 | if exc.errno != errno.ENOENT: |
285 | raise | 282 | raise |
286 | os.chdir(ud.clonedir) | ||
287 | for name in ud.names: | 283 | for name in ud.names: |
288 | if not self._contains_ref(ud, d, name): | 284 | if not self._contains_ref(ud, d, name, ud.clonedir): |
289 | raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name])) | 285 | raise bb.fetch2.FetchError("Unable to find revision %s in branch %s even from upstream" % (ud.revisions[name], ud.branches[name])) |
290 | 286 | ||
291 | def build_mirror_data(self, ud, d): | 287 | def build_mirror_data(self, ud, d): |
@@ -295,10 +291,9 @@ class Git(FetchMethod): | |||
295 | if os.path.islink(ud.fullmirror): | 291 | if os.path.islink(ud.fullmirror): |
296 | os.unlink(ud.fullmirror) | 292 | os.unlink(ud.fullmirror) |
297 | 293 | ||
298 | os.chdir(ud.clonedir) | ||
299 | logger.info("Creating tarball of git repository") | 294 | logger.info("Creating tarball of git repository") |
300 | runfetchcmd("tar -czf %s %s" % (ud.fullmirror, os.path.join(".") ), d) | 295 | runfetchcmd("tar -czf %s %s" % (ud.fullmirror, os.path.join(".") ), d, workdir=ud.clonedir) |
301 | runfetchcmd("touch %s.done" % (ud.fullmirror), d) | 296 | runfetchcmd("touch %s.done" % (ud.fullmirror), d, workdir=ud.clonedir) |
302 | 297 | ||
303 | def unpack(self, ud, destdir, d): | 298 | def unpack(self, ud, destdir, d): |
304 | """ unpack the downloaded src to destdir""" | 299 | """ unpack the downloaded src to destdir""" |
@@ -321,21 +316,21 @@ class Git(FetchMethod): | |||
321 | cloneflags += " --mirror" | 316 | cloneflags += " --mirror" |
322 | 317 | ||
323 | runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, cloneflags, ud.clonedir, destdir), d) | 318 | runfetchcmd("%s clone %s %s/ %s" % (ud.basecmd, cloneflags, ud.clonedir, destdir), d) |
324 | os.chdir(destdir) | ||
325 | repourl = self._get_repo_url(ud) | 319 | repourl = self._get_repo_url(ud) |
326 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d) | 320 | runfetchcmd("%s remote set-url origin %s" % (ud.basecmd, repourl), d, workdir=destdir) |
327 | if not ud.nocheckout: | 321 | if not ud.nocheckout: |
328 | if subdir != "": | 322 | if subdir != "": |
329 | runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d) | 323 | runfetchcmd("%s read-tree %s%s" % (ud.basecmd, ud.revisions[ud.names[0]], readpathspec), d, |
330 | runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d) | 324 | workdir=destdir) |
325 | runfetchcmd("%s checkout-index -q -f -a" % ud.basecmd, d, workdir=destdir) | ||
331 | elif not ud.nobranch: | 326 | elif not ud.nobranch: |
332 | branchname = ud.branches[ud.names[0]] | 327 | branchname = ud.branches[ud.names[0]] |
333 | runfetchcmd("%s checkout -B %s %s" % (ud.basecmd, branchname, \ | 328 | runfetchcmd("%s checkout -B %s %s" % (ud.basecmd, branchname, \ |
334 | ud.revisions[ud.names[0]]), d) | 329 | ud.revisions[ud.names[0]]), d, workdir=destdir) |
335 | runfetchcmd("%s branch --set-upstream %s origin/%s" % (ud.basecmd, branchname, \ | 330 | runfetchcmd("%s branch --set-upstream %s origin/%s" % (ud.basecmd, branchname, \ |
336 | branchname), d) | 331 | branchname), d, workdir=destdir) |
337 | else: | 332 | else: |
338 | runfetchcmd("%s checkout %s" % (ud.basecmd, ud.revisions[ud.names[0]]), d) | 333 | runfetchcmd("%s checkout %s" % (ud.basecmd, ud.revisions[ud.names[0]]), d, workdir=destdir) |
339 | 334 | ||
340 | return True | 335 | return True |
341 | 336 | ||
@@ -349,7 +344,7 @@ class Git(FetchMethod): | |||
349 | def supports_srcrev(self): | 344 | def supports_srcrev(self): |
350 | return True | 345 | return True |
351 | 346 | ||
352 | def _contains_ref(self, ud, d, name): | 347 | def _contains_ref(self, ud, d, name, wd): |
353 | cmd = "" | 348 | cmd = "" |
354 | if ud.nobranch: | 349 | if ud.nobranch: |
355 | cmd = "%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % ( | 350 | cmd = "%s log --pretty=oneline -n 1 %s -- 2> /dev/null | wc -l" % ( |
@@ -358,7 +353,7 @@ class Git(FetchMethod): | |||
358 | cmd = "%s branch --contains %s --list %s 2> /dev/null | wc -l" % ( | 353 | cmd = "%s branch --contains %s --list %s 2> /dev/null | wc -l" % ( |
359 | ud.basecmd, ud.revisions[name], ud.branches[name]) | 354 | ud.basecmd, ud.revisions[name], ud.branches[name]) |
360 | try: | 355 | try: |
361 | output = runfetchcmd(cmd, d, quiet=True) | 356 | output = runfetchcmd(cmd, d, quiet=True, workdir=wd) |
362 | except bb.fetch2.FetchError: | 357 | except bb.fetch2.FetchError: |
363 | return False | 358 | return False |
364 | if len(output.split()) > 1: | 359 | if len(output.split()) > 1: |
diff --git a/bitbake/lib/bb/fetch2/gitannex.py b/bitbake/lib/bb/fetch2/gitannex.py index e4527f1c75..4937a10891 100644 --- a/bitbake/lib/bb/fetch2/gitannex.py +++ b/bitbake/lib/bb/fetch2/gitannex.py | |||
@@ -34,43 +34,42 @@ class GitANNEX(Git): | |||
34 | """ | 34 | """ |
35 | return ud.type in ['gitannex'] | 35 | return ud.type in ['gitannex'] |
36 | 36 | ||
37 | def uses_annex(self, ud, d): | 37 | def uses_annex(self, ud, d, wd): |
38 | for name in ud.names: | 38 | for name in ud.names: |
39 | try: | 39 | try: |
40 | runfetchcmd("%s rev-list git-annex" % (ud.basecmd), d, quiet=True) | 40 | runfetchcmd("%s rev-list git-annex" % (ud.basecmd), d, quiet=True, workdir=wd) |
41 | return True | 41 | return True |
42 | except bb.fetch.FetchError: | 42 | except bb.fetch.FetchError: |
43 | pass | 43 | pass |
44 | 44 | ||
45 | return False | 45 | return False |
46 | 46 | ||
47 | def update_annex(self, ud, d): | 47 | def update_annex(self, ud, d, wd): |
48 | try: | 48 | try: |
49 | runfetchcmd("%s annex get --all" % (ud.basecmd), d, quiet=True) | 49 | runfetchcmd("%s annex get --all" % (ud.basecmd), d, quiet=True, workdir=wd) |
50 | except bb.fetch.FetchError: | 50 | except bb.fetch.FetchError: |
51 | return False | 51 | return False |
52 | runfetchcmd("chmod u+w -R %s/annex" % (ud.clonedir), d, quiet=True) | 52 | runfetchcmd("chmod u+w -R %s/annex" % (ud.clonedir), d, quiet=True, workdir=wd) |
53 | 53 | ||
54 | return True | 54 | return True |
55 | 55 | ||
56 | def download(self, ud, d): | 56 | def download(self, ud, d): |
57 | Git.download(self, ud, d) | 57 | Git.download(self, ud, d) |
58 | 58 | ||
59 | os.chdir(ud.clonedir) | 59 | annex = self.uses_annex(ud, d, ud.clonedir) |
60 | annex = self.uses_annex(ud, d) | ||
61 | if annex: | 60 | if annex: |
62 | self.update_annex(ud, d) | 61 | self.update_annex(ud, d, ud.clonedir) |
63 | 62 | ||
64 | def unpack(self, ud, destdir, d): | 63 | def unpack(self, ud, destdir, d): |
65 | Git.unpack(self, ud, destdir, d) | 64 | Git.unpack(self, ud, destdir, d) |
66 | 65 | ||
67 | os.chdir(ud.destdir) | ||
68 | try: | 66 | try: |
69 | runfetchcmd("%s annex init" % (ud.basecmd), d) | 67 | runfetchcmd("%s annex init" % (ud.basecmd), d, workdir=ud.destdir) |
70 | except bb.fetch.FetchError: | 68 | except bb.fetch.FetchError: |
71 | pass | 69 | pass |
72 | 70 | ||
73 | annex = self.uses_annex(ud, d) | 71 | annex = self.uses_annex(ud, d, ud.destdir) |
74 | if annex: | 72 | if annex: |
75 | runfetchcmd("%s annex get" % (ud.basecmd), d) | 73 | runfetchcmd("%s annex get" % (ud.basecmd), d, workdir=ud.destdir) |
76 | runfetchcmd("chmod u+w -R %s/.git/annex" % (ud.destdir), d, quiet=True) | 74 | runfetchcmd("chmod u+w -R %s/.git/annex" % (ud.destdir), d, quiet=True, workdir=ud.destdir) |
75 | |||
diff --git a/bitbake/lib/bb/fetch2/gitsm.py b/bitbake/lib/bb/fetch2/gitsm.py index 752f1d3c15..6613762048 100644 --- a/bitbake/lib/bb/fetch2/gitsm.py +++ b/bitbake/lib/bb/fetch2/gitsm.py | |||
@@ -43,10 +43,10 @@ class GitSM(Git): | |||
43 | """ | 43 | """ |
44 | return ud.type in ['gitsm'] | 44 | return ud.type in ['gitsm'] |
45 | 45 | ||
46 | def uses_submodules(self, ud, d): | 46 | def uses_submodules(self, ud, d, wd): |
47 | for name in ud.names: | 47 | for name in ud.names: |
48 | try: | 48 | try: |
49 | runfetchcmd("%s show %s:.gitmodules" % (ud.basecmd, ud.revisions[name]), d, quiet=True) | 49 | runfetchcmd("%s show %s:.gitmodules" % (ud.basecmd, ud.revisions[name]), d, quiet=True, workdir=wd) |
50 | return True | 50 | return True |
51 | except bb.fetch.FetchError: | 51 | except bb.fetch.FetchError: |
52 | pass | 52 | pass |
@@ -107,28 +107,25 @@ class GitSM(Git): | |||
107 | os.mkdir(tmpclonedir) | 107 | os.mkdir(tmpclonedir) |
108 | os.rename(ud.clonedir, gitdir) | 108 | os.rename(ud.clonedir, gitdir) |
109 | runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*true/bare = false/'", d) | 109 | runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*true/bare = false/'", d) |
110 | os.chdir(tmpclonedir) | 110 | runfetchcmd(ud.basecmd + " reset --hard", d, workdir=tmpclonedir) |
111 | runfetchcmd(ud.basecmd + " reset --hard", d) | 111 | runfetchcmd(ud.basecmd + " checkout " + ud.revisions[ud.names[0]], d, workdir=tmpclonedir) |
112 | runfetchcmd(ud.basecmd + " checkout " + ud.revisions[ud.names[0]], d) | 112 | runfetchcmd(ud.basecmd + " submodule update --init --recursive", d, workdir=tmpclonedir) |
113 | runfetchcmd(ud.basecmd + " submodule update --init --recursive", d) | ||
114 | self._set_relative_paths(tmpclonedir) | 113 | self._set_relative_paths(tmpclonedir) |
115 | runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*false/bare = true/'", d) | 114 | runfetchcmd("sed " + gitdir + "/config -i -e 's/bare.*=.*false/bare = true/'", d, workdir=tmpclonedir) |
116 | os.rename(gitdir, ud.clonedir,) | 115 | os.rename(gitdir, ud.clonedir,) |
117 | bb.utils.remove(tmpclonedir, True) | 116 | bb.utils.remove(tmpclonedir, True) |
118 | 117 | ||
119 | def download(self, ud, d): | 118 | def download(self, ud, d): |
120 | Git.download(self, ud, d) | 119 | Git.download(self, ud, d) |
121 | 120 | ||
122 | os.chdir(ud.clonedir) | 121 | submodules = self.uses_submodules(ud, d, ud.clonedir) |
123 | submodules = self.uses_submodules(ud, d) | ||
124 | if submodules: | 122 | if submodules: |
125 | self.update_submodules(ud, d) | 123 | self.update_submodules(ud, d) |
126 | 124 | ||
127 | def unpack(self, ud, destdir, d): | 125 | def unpack(self, ud, destdir, d): |
128 | Git.unpack(self, ud, destdir, d) | 126 | Git.unpack(self, ud, destdir, d) |
129 | 127 | ||
130 | os.chdir(ud.destdir) | 128 | submodules = self.uses_submodules(ud, d, ud.destdir) |
131 | submodules = self.uses_submodules(ud, d) | ||
132 | if submodules: | 129 | if submodules: |
133 | runfetchcmd(ud.basecmd + " checkout " + ud.revisions[ud.names[0]], d) | 130 | runfetchcmd(ud.basecmd + " checkout " + ud.revisions[ud.names[0]], d, workdir=ud.destdir) |
134 | runfetchcmd(ud.basecmd + " submodule update --init --recursive", d) | 131 | runfetchcmd(ud.basecmd + " submodule update --init --recursive", d, workdir=ud.destdir) |
diff --git a/bitbake/lib/bb/fetch2/hg.py b/bitbake/lib/bb/fetch2/hg.py index 3b743ff51d..20df8016da 100644 --- a/bitbake/lib/bb/fetch2/hg.py +++ b/bitbake/lib/bb/fetch2/hg.py | |||
@@ -169,25 +169,22 @@ class Hg(FetchMethod): | |||
169 | # If the checkout doesn't exist and the mirror tarball does, extract it | 169 | # If the checkout doesn't exist and the mirror tarball does, extract it |
170 | if not os.path.exists(ud.pkgdir) and os.path.exists(ud.fullmirror): | 170 | if not os.path.exists(ud.pkgdir) and os.path.exists(ud.fullmirror): |
171 | bb.utils.mkdirhier(ud.pkgdir) | 171 | bb.utils.mkdirhier(ud.pkgdir) |
172 | os.chdir(ud.pkgdir) | 172 | runfetchcmd("tar -xzf %s" % (ud.fullmirror), d, workdir=ud.pkgdir) |
173 | runfetchcmd("tar -xzf %s" % (ud.fullmirror), d) | ||
174 | 173 | ||
175 | if os.access(os.path.join(ud.moddir, '.hg'), os.R_OK): | 174 | if os.access(os.path.join(ud.moddir, '.hg'), os.R_OK): |
176 | # Found the source, check whether need pull | 175 | # Found the source, check whether need pull |
177 | updatecmd = self._buildhgcommand(ud, d, "update") | 176 | updatecmd = self._buildhgcommand(ud, d, "update") |
178 | os.chdir(ud.moddir) | ||
179 | logger.debug(1, "Running %s", updatecmd) | 177 | logger.debug(1, "Running %s", updatecmd) |
180 | try: | 178 | try: |
181 | runfetchcmd(updatecmd, d) | 179 | runfetchcmd(updatecmd, d, workdir=ud.moddir) |
182 | except bb.fetch2.FetchError: | 180 | except bb.fetch2.FetchError: |
183 | # Runnning pull in the repo | 181 | # Runnning pull in the repo |
184 | pullcmd = self._buildhgcommand(ud, d, "pull") | 182 | pullcmd = self._buildhgcommand(ud, d, "pull") |
185 | logger.info("Pulling " + ud.url) | 183 | logger.info("Pulling " + ud.url) |
186 | # update sources there | 184 | # update sources there |
187 | os.chdir(ud.moddir) | ||
188 | logger.debug(1, "Running %s", pullcmd) | 185 | logger.debug(1, "Running %s", pullcmd) |
189 | bb.fetch2.check_network_access(d, pullcmd, ud.url) | 186 | bb.fetch2.check_network_access(d, pullcmd, ud.url) |
190 | runfetchcmd(pullcmd, d) | 187 | runfetchcmd(pullcmd, d, workdir=ud.moddir) |
191 | try: | 188 | try: |
192 | os.unlink(ud.fullmirror) | 189 | os.unlink(ud.fullmirror) |
193 | except OSError as exc: | 190 | except OSError as exc: |
@@ -200,17 +197,15 @@ class Hg(FetchMethod): | |||
200 | logger.info("Fetch " + ud.url) | 197 | logger.info("Fetch " + ud.url) |
201 | # check out sources there | 198 | # check out sources there |
202 | bb.utils.mkdirhier(ud.pkgdir) | 199 | bb.utils.mkdirhier(ud.pkgdir) |
203 | os.chdir(ud.pkgdir) | ||
204 | logger.debug(1, "Running %s", fetchcmd) | 200 | logger.debug(1, "Running %s", fetchcmd) |
205 | bb.fetch2.check_network_access(d, fetchcmd, ud.url) | 201 | bb.fetch2.check_network_access(d, fetchcmd, ud.url) |
206 | runfetchcmd(fetchcmd, d) | 202 | runfetchcmd(fetchcmd, d, workdir=ud.pkgdir) |
207 | 203 | ||
208 | # Even when we clone (fetch), we still need to update as hg's clone | 204 | # Even when we clone (fetch), we still need to update as hg's clone |
209 | # won't checkout the specified revision if its on a branch | 205 | # won't checkout the specified revision if its on a branch |
210 | updatecmd = self._buildhgcommand(ud, d, "update") | 206 | updatecmd = self._buildhgcommand(ud, d, "update") |
211 | os.chdir(ud.moddir) | ||
212 | logger.debug(1, "Running %s", updatecmd) | 207 | logger.debug(1, "Running %s", updatecmd) |
213 | runfetchcmd(updatecmd, d) | 208 | runfetchcmd(updatecmd, d, workdir=ud.moddir) |
214 | 209 | ||
215 | def clean(self, ud, d): | 210 | def clean(self, ud, d): |
216 | """ Clean the hg dir """ | 211 | """ Clean the hg dir """ |
@@ -246,10 +241,9 @@ class Hg(FetchMethod): | |||
246 | if os.path.islink(ud.fullmirror): | 241 | if os.path.islink(ud.fullmirror): |
247 | os.unlink(ud.fullmirror) | 242 | os.unlink(ud.fullmirror) |
248 | 243 | ||
249 | os.chdir(ud.pkgdir) | ||
250 | logger.info("Creating tarball of hg repository") | 244 | logger.info("Creating tarball of hg repository") |
251 | runfetchcmd("tar -czf %s %s" % (ud.fullmirror, ud.module), d) | 245 | runfetchcmd("tar -czf %s %s" % (ud.fullmirror, ud.module), d, workdir=ud.pkgdir) |
252 | runfetchcmd("touch %s.done" % (ud.fullmirror), d) | 246 | runfetchcmd("touch %s.done" % (ud.fullmirror), d, workdir=ud.pkgdir) |
253 | 247 | ||
254 | def localpath(self, ud, d): | 248 | def localpath(self, ud, d): |
255 | return ud.pkgdir | 249 | return ud.pkgdir |
@@ -269,10 +263,8 @@ class Hg(FetchMethod): | |||
269 | logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'") | 263 | logger.debug(2, "Unpack: creating new hg repository in '" + codir + "'") |
270 | runfetchcmd("%s init %s" % (ud.basecmd, codir), d) | 264 | runfetchcmd("%s init %s" % (ud.basecmd, codir), d) |
271 | logger.debug(2, "Unpack: updating source in '" + codir + "'") | 265 | logger.debug(2, "Unpack: updating source in '" + codir + "'") |
272 | os.chdir(codir) | 266 | runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d, workdir=codir) |
273 | runfetchcmd("%s pull %s" % (ud.basecmd, ud.moddir), d) | 267 | runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d, workdir=codir) |
274 | runfetchcmd("%s up -C %s" % (ud.basecmd, revflag), d) | ||
275 | else: | 268 | else: |
276 | logger.debug(2, "Unpack: extracting source to '" + codir + "'") | 269 | logger.debug(2, "Unpack: extracting source to '" + codir + "'") |
277 | os.chdir(ud.moddir) | 270 | runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d, workdir=ud.moddir) |
278 | runfetchcmd("%s archive -t files %s %s" % (ud.basecmd, revflag, codir), d) | ||
diff --git a/bitbake/lib/bb/fetch2/npm.py b/bitbake/lib/bb/fetch2/npm.py index 2fd43034ba..b26ac22eff 100644 --- a/bitbake/lib/bb/fetch2/npm.py +++ b/bitbake/lib/bb/fetch2/npm.py | |||
@@ -113,16 +113,13 @@ class Npm(FetchMethod): | |||
113 | bb.fatal("NPM package %s downloaded not a tarball!" % file) | 113 | bb.fatal("NPM package %s downloaded not a tarball!" % file) |
114 | 114 | ||
115 | # Change to subdir before executing command | 115 | # Change to subdir before executing command |
116 | save_cwd = os.getcwd() | ||
117 | if not os.path.exists(destdir): | 116 | if not os.path.exists(destdir): |
118 | os.makedirs(destdir) | 117 | os.makedirs(destdir) |
119 | os.chdir(destdir) | ||
120 | path = d.getVar('PATH', True) | 118 | path = d.getVar('PATH', True) |
121 | if path: | 119 | if path: |
122 | cmd = "PATH=\"%s\" %s" % (path, cmd) | 120 | cmd = "PATH=\"%s\" %s" % (path, cmd) |
123 | bb.note("Unpacking %s to %s/" % (file, os.getcwd())) | 121 | bb.note("Unpacking %s to %s/" % (file, destdir)) |
124 | ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True) | 122 | ret = subprocess.call(cmd, preexec_fn=subprocess_setup, shell=True, cwd=destdir) |
125 | os.chdir(save_cwd) | ||
126 | 123 | ||
127 | if ret != 0: | 124 | if ret != 0: |
128 | raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url) | 125 | raise UnpackError("Unpack command %s failed with return value %s" % (cmd, ret), ud.url) |
@@ -239,10 +236,7 @@ class Npm(FetchMethod): | |||
239 | if not os.listdir(ud.pkgdatadir) and os.path.exists(ud.fullmirror): | 236 | if not os.listdir(ud.pkgdatadir) and os.path.exists(ud.fullmirror): |
240 | dest = d.getVar("DL_DIR", True) | 237 | dest = d.getVar("DL_DIR", True) |
241 | bb.utils.mkdirhier(dest) | 238 | bb.utils.mkdirhier(dest) |
242 | save_cwd = os.getcwd() | 239 | runfetchcmd("tar -xJf %s" % (ud.fullmirror), d, workdir=dest) |
243 | os.chdir(dest) | ||
244 | runfetchcmd("tar -xJf %s" % (ud.fullmirror), d) | ||
245 | os.chdir(save_cwd) | ||
246 | return | 240 | return |
247 | 241 | ||
248 | shwrf = d.getVar('NPM_SHRINKWRAP', True) | 242 | shwrf = d.getVar('NPM_SHRINKWRAP', True) |
@@ -275,10 +269,8 @@ class Npm(FetchMethod): | |||
275 | if os.path.islink(ud.fullmirror): | 269 | if os.path.islink(ud.fullmirror): |
276 | os.unlink(ud.fullmirror) | 270 | os.unlink(ud.fullmirror) |
277 | 271 | ||
278 | save_cwd = os.getcwd() | 272 | dldir = d.getVar("DL_DIR", True) |
279 | os.chdir(d.getVar("DL_DIR", True)) | ||
280 | logger.info("Creating tarball of npm data") | 273 | logger.info("Creating tarball of npm data") |
281 | runfetchcmd("tar -cJf %s npm/%s npm/%s" % (ud.fullmirror, ud.bbnpmmanifest, ud.pkgname), d) | 274 | runfetchcmd("tar -cJf %s npm/%s npm/%s" % (ud.fullmirror, ud.bbnpmmanifest, ud.pkgname), d, |
282 | runfetchcmd("touch %s.done" % (ud.fullmirror), d) | 275 | workdir=dldir) |
283 | os.chdir(save_cwd) | 276 | runfetchcmd("touch %s.done" % (ud.fullmirror), d, workdir=dldir) |
284 | |||
diff --git a/bitbake/lib/bb/fetch2/osc.py b/bitbake/lib/bb/fetch2/osc.py index d051dfdafa..295abf953b 100644 --- a/bitbake/lib/bb/fetch2/osc.py +++ b/bitbake/lib/bb/fetch2/osc.py | |||
@@ -88,23 +88,21 @@ class Osc(FetchMethod): | |||
88 | oscupdatecmd = self._buildosccommand(ud, d, "update") | 88 | oscupdatecmd = self._buildosccommand(ud, d, "update") |
89 | logger.info("Update "+ ud.url) | 89 | logger.info("Update "+ ud.url) |
90 | # update sources there | 90 | # update sources there |
91 | os.chdir(ud.moddir) | ||
92 | logger.debug(1, "Running %s", oscupdatecmd) | 91 | logger.debug(1, "Running %s", oscupdatecmd) |
93 | bb.fetch2.check_network_access(d, oscupdatecmd, ud.url) | 92 | bb.fetch2.check_network_access(d, oscupdatecmd, ud.url) |
94 | runfetchcmd(oscupdatecmd, d) | 93 | runfetchcmd(oscupdatecmd, d, workdir=ud.moddir) |
95 | else: | 94 | else: |
96 | oscfetchcmd = self._buildosccommand(ud, d, "fetch") | 95 | oscfetchcmd = self._buildosccommand(ud, d, "fetch") |
97 | logger.info("Fetch " + ud.url) | 96 | logger.info("Fetch " + ud.url) |
98 | # check out sources there | 97 | # check out sources there |
99 | bb.utils.mkdirhier(ud.pkgdir) | 98 | bb.utils.mkdirhier(ud.pkgdir) |
100 | os.chdir(ud.pkgdir) | ||
101 | logger.debug(1, "Running %s", oscfetchcmd) | 99 | logger.debug(1, "Running %s", oscfetchcmd) |
102 | bb.fetch2.check_network_access(d, oscfetchcmd, ud.url) | 100 | bb.fetch2.check_network_access(d, oscfetchcmd, ud.url) |
103 | runfetchcmd(oscfetchcmd, d) | 101 | runfetchcmd(oscfetchcmd, d, workdir=ud.pkgdir) |
104 | 102 | ||
105 | os.chdir(os.path.join(ud.pkgdir + ud.path)) | ||
106 | # tar them up to a defined filename | 103 | # tar them up to a defined filename |
107 | runfetchcmd("tar -czf %s %s" % (ud.localpath, ud.module), d, cleanup = [ud.localpath]) | 104 | runfetchcmd("tar -czf %s %s" % (ud.localpath, ud.module), d, |
105 | cleanup=[ud.localpath], workdir=os.path.join(ud.pkgdir + ud.path)) | ||
108 | 106 | ||
109 | def supports_srcrev(self): | 107 | def supports_srcrev(self): |
110 | return False | 108 | return False |
diff --git a/bitbake/lib/bb/fetch2/perforce.py b/bitbake/lib/bb/fetch2/perforce.py index b8169f2cc9..50cb479096 100644 --- a/bitbake/lib/bb/fetch2/perforce.py +++ b/bitbake/lib/bb/fetch2/perforce.py | |||
@@ -168,15 +168,13 @@ class Perforce(FetchMethod): | |||
168 | 168 | ||
169 | bb.utils.remove(ud.pkgdir, True) | 169 | bb.utils.remove(ud.pkgdir, True) |
170 | bb.utils.mkdirhier(ud.pkgdir) | 170 | bb.utils.mkdirhier(ud.pkgdir) |
171 | os.chdir(ud.pkgdir) | ||
172 | 171 | ||
173 | for afile in filelist: | 172 | for afile in filelist: |
174 | p4fetchcmd = self._buildp4command(ud, d, 'print', afile) | 173 | p4fetchcmd = self._buildp4command(ud, d, 'print', afile) |
175 | bb.fetch2.check_network_access(d, p4fetchcmd) | 174 | bb.fetch2.check_network_access(d, p4fetchcmd) |
176 | runfetchcmd(p4fetchcmd, d) | 175 | runfetchcmd(p4fetchcmd, d, workdir=ud.pkgdir) |
177 | 176 | ||
178 | os.chdir(ud.pkgdir) | 177 | runfetchcmd('tar -czf %s p4' % (ud.localpath), d, cleanup=[ud.localpath], workdir=ud.pkgdir) |
179 | runfetchcmd('tar -czf %s p4' % (ud.localpath), d, cleanup = [ud.localpath]) | ||
180 | 178 | ||
181 | def clean(self, ud, d): | 179 | def clean(self, ud, d): |
182 | """ Cleanup p4 specific files and dirs""" | 180 | """ Cleanup p4 specific files and dirs""" |
diff --git a/bitbake/lib/bb/fetch2/repo.py b/bitbake/lib/bb/fetch2/repo.py index fd64b7e626..ecc6e68e97 100644 --- a/bitbake/lib/bb/fetch2/repo.py +++ b/bitbake/lib/bb/fetch2/repo.py | |||
@@ -69,15 +69,14 @@ class Repo(FetchMethod): | |||
69 | else: | 69 | else: |
70 | username = "" | 70 | username = "" |
71 | 71 | ||
72 | bb.utils.mkdirhier(os.path.join(codir, "repo")) | 72 | repodir = os.path.join(codir, "repo") |
73 | os.chdir(os.path.join(codir, "repo")) | 73 | bb.utils.mkdirhier(repodir) |
74 | if not os.path.exists(os.path.join(codir, "repo", ".repo")): | 74 | if not os.path.exists(os.path.join(repodir, ".repo")): |
75 | bb.fetch2.check_network_access(d, "repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url) | 75 | bb.fetch2.check_network_access(d, "repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), ud.url) |
76 | runfetchcmd("repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), d) | 76 | runfetchcmd("repo init -m %s -b %s -u %s://%s%s%s" % (ud.manifest, ud.branch, ud.proto, username, ud.host, ud.path), d, workdir=repodir) |
77 | 77 | ||
78 | bb.fetch2.check_network_access(d, "repo sync %s" % ud.url, ud.url) | 78 | bb.fetch2.check_network_access(d, "repo sync %s" % ud.url, ud.url) |
79 | runfetchcmd("repo sync", d) | 79 | runfetchcmd("repo sync", d, workdir=repodir) |
80 | os.chdir(codir) | ||
81 | 80 | ||
82 | scmdata = ud.parm.get("scmdata", "") | 81 | scmdata = ud.parm.get("scmdata", "") |
83 | if scmdata == "keep": | 82 | if scmdata == "keep": |
@@ -86,7 +85,7 @@ class Repo(FetchMethod): | |||
86 | tar_flags = "--exclude='.repo' --exclude='.git'" | 85 | tar_flags = "--exclude='.repo' --exclude='.git'" |
87 | 86 | ||
88 | # Create a cache | 87 | # Create a cache |
89 | runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, os.path.join(".", "*") ), d) | 88 | runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, os.path.join(".", "*") ), d, workdir=codir) |
90 | 89 | ||
91 | def supports_srcrev(self): | 90 | def supports_srcrev(self): |
92 | return False | 91 | return False |
diff --git a/bitbake/lib/bb/fetch2/svn.py b/bitbake/lib/bb/fetch2/svn.py index 968ca79b30..9ff94108ed 100644 --- a/bitbake/lib/bb/fetch2/svn.py +++ b/bitbake/lib/bb/fetch2/svn.py | |||
@@ -126,25 +126,22 @@ class Svn(FetchMethod): | |||
126 | if os.access(os.path.join(ud.moddir, '.svn'), os.R_OK): | 126 | if os.access(os.path.join(ud.moddir, '.svn'), os.R_OK): |
127 | svnupdatecmd = self._buildsvncommand(ud, d, "update") | 127 | svnupdatecmd = self._buildsvncommand(ud, d, "update") |
128 | logger.info("Update " + ud.url) | 128 | logger.info("Update " + ud.url) |
129 | # update sources there | ||
130 | os.chdir(ud.moddir) | ||
131 | # We need to attempt to run svn upgrade first in case its an older working format | 129 | # We need to attempt to run svn upgrade first in case its an older working format |
132 | try: | 130 | try: |
133 | runfetchcmd(ud.basecmd + " upgrade", d) | 131 | runfetchcmd(ud.basecmd + " upgrade", d, workdir=ud.moddir) |
134 | except FetchError: | 132 | except FetchError: |
135 | pass | 133 | pass |
136 | logger.debug(1, "Running %s", svnupdatecmd) | 134 | logger.debug(1, "Running %s", svnupdatecmd) |
137 | bb.fetch2.check_network_access(d, svnupdatecmd, ud.url) | 135 | bb.fetch2.check_network_access(d, svnupdatecmd, ud.url) |
138 | runfetchcmd(svnupdatecmd, d) | 136 | runfetchcmd(svnupdatecmd, d, workdir=ud.moddir) |
139 | else: | 137 | else: |
140 | svnfetchcmd = self._buildsvncommand(ud, d, "fetch") | 138 | svnfetchcmd = self._buildsvncommand(ud, d, "fetch") |
141 | logger.info("Fetch " + ud.url) | 139 | logger.info("Fetch " + ud.url) |
142 | # check out sources there | 140 | # check out sources there |
143 | bb.utils.mkdirhier(ud.pkgdir) | 141 | bb.utils.mkdirhier(ud.pkgdir) |
144 | os.chdir(ud.pkgdir) | ||
145 | logger.debug(1, "Running %s", svnfetchcmd) | 142 | logger.debug(1, "Running %s", svnfetchcmd) |
146 | bb.fetch2.check_network_access(d, svnfetchcmd, ud.url) | 143 | bb.fetch2.check_network_access(d, svnfetchcmd, ud.url) |
147 | runfetchcmd(svnfetchcmd, d) | 144 | runfetchcmd(svnfetchcmd, d, ud.pkgdir) |
148 | 145 | ||
149 | scmdata = ud.parm.get("scmdata", "") | 146 | scmdata = ud.parm.get("scmdata", "") |
150 | if scmdata == "keep": | 147 | if scmdata == "keep": |
@@ -152,9 +149,9 @@ class Svn(FetchMethod): | |||
152 | else: | 149 | else: |
153 | tar_flags = "--exclude='.svn'" | 150 | tar_flags = "--exclude='.svn'" |
154 | 151 | ||
155 | os.chdir(ud.pkgdir) | ||
156 | # tar them up to a defined filename | 152 | # tar them up to a defined filename |
157 | runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.path_spec), d, cleanup = [ud.localpath]) | 153 | runfetchcmd("tar %s -czf %s %s" % (tar_flags, ud.localpath, ud.path_spec), d, |
154 | cleanup=[ud.localpath], workdir=ud.pkgdir) | ||
158 | 155 | ||
159 | def clean(self, ud, d): | 156 | def clean(self, ud, d): |
160 | """ Clean SVN specific files and dirs """ | 157 | """ Clean SVN specific files and dirs """ |