Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(414)

Side by Side Diff: src/platform/dev/buildutil.py

Issue 661447: First version of the new devserver client (Closed)
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/platform/dev/devserver.py » ('j') | src/platform/dev/gmerge » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 1 # Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import os 5 import os
6 import web 6 import web
7 from datetime import datetime 7 from datetime import datetime
8 import time 8 import time
9 9
10 class BuildObject: 10 class BuildObject:
11 """ 11 """
12 Common base class that defines key paths in the source tree. 12 Common base class that defines key paths in the source tree.
13 """ 13 """
14 def __init__(self, root_dir, static_dir): 14 def __init__(self, root_dir, static_dir):
15 self.app_id = "87efface-864d-49a5-9bb3-4b050a7c227a" 15 self.app_id = "87efface-864d-49a5-9bb3-4b050a7c227a"
16 self.root_dir = root_dir 16 self.root_dir = root_dir
17 self.scripts_dir = "%s/scripts" % self.root_dir 17 self.scripts_dir = "%s/scripts" % self.root_dir
18 self.static_dir = static_dir 18 self.static_dir = static_dir
19 self.x86_pkg_dir = "%s/build/x86/local_packages" % self.root_dir 19 self.x86_pkg_dir = "%s/build/x86/local_packages" % self.root_dir
20 20
21 def AssertSystemCallSuccess(self, err, cmd="unknown"): 21 def AssertSystemCallSuccess(self, err, cmd="unknown"):
22 """ 22 """
23 TODO(rtc): This code should probably live somewhere else. 23 TODO(rtc): This code should probably live somewhere else.
24 """ 24 """
25 if err != 0: 25 if err != 0:
26 raise Exception("%s failed to execute" % cmd) 26 raise Exception("%s failed to execute" % cmd)
27
28
29 class BuildUtil(BuildObject):
30
31 def GetPackageName(self, pkg_path):
32 cmd = "cat %s/debian/control | grep Package: | cut -d \" \" -f 2-" % pkg_pat h
33 return os.popen(cmd).read().strip()
34
35 def GetLastBuildTime(self, pkg_name):
36 # TODO(rtc): convert this to local time.
37 cmd = "stat -c %s %s/%s*" % ("%Y", self.x86_pkg_dir, pkg_name)
38 utc_time = os.popen(cmd).read().strip()
39 return datetime.fromtimestamp(int(utc_time))
40
41 def GetPackageBuildPath(self, pkg_name):
42 cmd = "stat -c %s %s/%s*" % ("%n", self.x86_pkg_dir, pkg_name)
43 return os.popen(cmd).read().strip()
44
45 def GetPackageBuildFile(self, build_path):
46 return build_path.replace(self.x86_pkg_dir + "/", "")
47
48 def BuildPackage(self, pkg="all"):
49 """
50 Builds the given package and copies the output to the static dir so that
51 it can be downloaded.
52
53 If pkg=all is specified then the kernel and all platform packages
54 will be built. A new system image will also be created.
55
56 If pkg=packages is specified then all platform packages
57 will be built and a new system image will be created.
58 """
59 if pkg == "all":
60 err = os.system("%s/build_all.sh" % self.scripts_dir)
61 self.AssertSystemCallSuccess(err)
62 return None
63
64 if pkg == "packages":
65 err = os.system("%s/build_platform_packages.sh" % self.scripts_dir)
66 self.AssertSystemCallSuccess(err)
67 err = os.system("%s/build_image.sh" % self.scripts_dir)
68 self.AssertSystemCallSuccess(err)
69 return None
70
71 pkg_properties = self.GetPackages().get(pkg, None)
72 if pkg_properties == None:
73 raise Exception("Unknown package name %s" % pkg)
74
75 cmd = "(cd %s; ./make_pkg.sh)" % pkg_properties.get("source_path")
76 err = os.system(cmd)
77 self.AssertSystemCallSuccess(err, cmd)
78
79 # Reset pkg_properties after building so that output_path and
80 # output_file_name are set up properly.
81 pkg_properties = self.GetPackages().get(pkg, None)
82
83 cmd = "cp %s %s" % (pkg_properties.get("output_path"), self.static_dir)
84 err = os.system(cmd)
85 self.AssertSystemCallSuccess(err, cmd)
86
87 return pkg_properties.get("output_file_name")
88
89
90 def GetPackages(self):
91 """
92 Lists all of the packages that can be built with a make_pkg.sh script.
93
94 Returns a dictionary with the following keys
95 name: the name of the package.
96 build_time: the time the package was last built (in UTC).
97 source_path: the path to the package in the source tree.
98 output_path: the path to the deb created by make_pkg.sh.
99 output_file_name: the name of the deb created by make_pkg.sh
100 """
101 pkgs = {}
102 cli = os.popen("find %s -name make_pkg.sh" % self.root_dir).read().split('\n ')
103 for pkg in cli:
104 if pkg == "":
105 continue
106 pkg_path = pkg.replace("/make_pkg.sh", "", 1)
107 pkg_name = self.GetPackageName(pkg_path)
108 if pkg_name == "":
109 web.debug("unable to find a package info for %s" % pkg_path)
110 continue
111
112 build_path = self.GetPackageBuildPath(pkg_name)
113
114 build_time = None
115 build_file = None
116 if build_path != "":
117 build_time = self.GetLastBuildTime(pkg_name)
118 build_file = self.GetPackageBuildFile(build_path)
119
120 pkgs[pkg_name] = {
121 "name": pkg_name,
122 "build_time": build_time,
123 "source_path": pkg_path,
124 "output_path": build_path,
125 "output_file_name": build_file
126 }
127 return pkgs
OLDNEW
« no previous file with comments | « no previous file | src/platform/dev/devserver.py » ('j') | src/platform/dev/gmerge » ('J')

Powered by Google App Engine
This is Rietveld 408576698