diff options
Diffstat (limited to 'meta/classes')
-rw-r--r-- | meta/classes/image-buildinfo.bbclass | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/meta/classes/image-buildinfo.bbclass b/meta/classes/image-buildinfo.bbclass index 5b738ae596..197b24235b 100644 --- a/meta/classes/image-buildinfo.bbclass +++ b/meta/classes/image-buildinfo.bbclass | |||
@@ -26,12 +26,17 @@ def image_buildinfo_outputvars(vars, listvars, d): | |||
26 | 26 | ||
27 | # Gets git branch's status (clean or dirty) | 27 | # Gets git branch's status (clean or dirty) |
28 | def get_layer_git_status(path): | 28 | def get_layer_git_status(path): |
29 | f = os.popen("cd %s; git diff --stat 2>&1 | tail -n 1" % path) | 29 | import subprocess |
30 | data = f.read() | 30 | try: |
31 | if f.close() is None: | 31 | subprocess.check_output("cd %s; PSEUDO_UNLOAD=1 git diff --quiet --no-ext-diff" % path, |
32 | if len(data) != 0: | 32 | shell=True, |
33 | return "-- modified" | 33 | stderr=subprocess.STDOUT) |
34 | return "" | 34 | return "" |
35 | except subprocess.CalledProcessError, ex: | ||
36 | # Silently treat errors as "modified", without checking for the | ||
37 | # (expected) return code 1 in a modified git repo. For example, we get | ||
38 | # output and a 129 return code when a layer isn't a git repo at all. | ||
39 | return "-- modified" | ||
35 | 40 | ||
36 | # Returns layer revisions along with their respective status | 41 | # Returns layer revisions along with their respective status |
37 | def get_layer_revs(d): | 42 | def get_layer_revs(d): |
@@ -53,17 +58,21 @@ def buildinfo_target(d): | |||
53 | return image_buildinfo_outputvars(vars, listvars, d) | 58 | return image_buildinfo_outputvars(vars, listvars, d) |
54 | 59 | ||
55 | # Write build information to target filesystem | 60 | # Write build information to target filesystem |
56 | buildinfo () { | 61 | python buildinfo () { |
57 | cat > ${IMAGE_ROOTFS}${sysconfdir}/build << END | 62 | with open(d.expand('${IMAGE_ROOTFS}${sysconfdir}/build'), 'w') as build: |
58 | ----------------------- | 63 | build.writelines(( |
64 | '''----------------------- | ||
59 | Build Configuration: | | 65 | Build Configuration: | |
60 | ----------------------- | 66 | ----------------------- |
61 | ${@buildinfo_target(d)} | 67 | ''', |
68 | buildinfo_target(d), | ||
69 | ''' | ||
62 | ----------------------- | 70 | ----------------------- |
63 | Layer Revisions: | | 71 | Layer Revisions: | |
64 | ----------------------- | 72 | ----------------------- |
65 | ${@get_layer_revs(d)} | 73 | ''', |
66 | END | 74 | get_layer_revs(d) |
75 | )) | ||
67 | } | 76 | } |
68 | 77 | ||
69 | IMAGE_PREPROCESS_COMMAND += "buildinfo;" | 78 | IMAGE_PREPROCESS_COMMAND += "buildinfo;" |