diff options
Diffstat (limited to 'bitbake/lib')
-rw-r--r-- | bitbake/lib/bb/build.py | 149 | ||||
-rw-r--r-- | bitbake/lib/bb/cooker.py | 2 | ||||
-rw-r--r-- | bitbake/lib/bb/runqueue.py | 25 | ||||
-rw-r--r-- | bitbake/lib/bb/siggen.py | 57 |
4 files changed, 109 insertions, 124 deletions
diff --git a/bitbake/lib/bb/build.py b/bitbake/lib/bb/build.py index 5ac191647c..5a1727116a 100644 --- a/bitbake/lib/bb/build.py +++ b/bitbake/lib/bb/build.py | |||
@@ -772,44 +772,7 @@ def exec_task(fn, task, d, profile = False): | |||
772 | event.fire(failedevent, d) | 772 | event.fire(failedevent, d) |
773 | return 1 | 773 | return 1 |
774 | 774 | ||
775 | def stamp_internal(taskname, d, file_name, baseonly=False, noextra=False): | 775 | def _get_cleanmask(taskname, mcfn): |
776 | """ | ||
777 | Internal stamp helper function | ||
778 | Makes sure the stamp directory exists | ||
779 | Returns the stamp path+filename | ||
780 | |||
781 | In the bitbake core, d can be a CacheData and file_name will be set. | ||
782 | When called in task context, d will be a data store, file_name will not be set | ||
783 | """ | ||
784 | taskflagname = taskname | ||
785 | if taskname.endswith("_setscene"): | ||
786 | taskflagname = taskname.replace("_setscene", "") | ||
787 | |||
788 | if file_name: | ||
789 | stamp = d.stamp[file_name] | ||
790 | extrainfo = d.stamp_extrainfo[file_name].get(taskflagname) or "" | ||
791 | else: | ||
792 | stamp = d.getVar('STAMP') | ||
793 | file_name = d.getVar('BB_FILENAME') | ||
794 | extrainfo = d.getVarFlag(taskflagname, 'stamp-extra-info') or "" | ||
795 | |||
796 | if baseonly: | ||
797 | return stamp | ||
798 | if noextra: | ||
799 | extrainfo = "" | ||
800 | |||
801 | if not stamp: | ||
802 | return | ||
803 | |||
804 | stamp = bb.parse.siggen.stampfile(stamp, file_name, taskname, extrainfo) | ||
805 | |||
806 | stampdir = os.path.dirname(stamp) | ||
807 | if cached_mtime_noerror(stampdir) == 0: | ||
808 | bb.utils.mkdirhier(stampdir) | ||
809 | |||
810 | return stamp | ||
811 | |||
812 | def stamp_cleanmask_internal(taskname, d, file_name): | ||
813 | """ | 776 | """ |
814 | Internal stamp helper function to generate stamp cleaning mask | 777 | Internal stamp helper function to generate stamp cleaning mask |
815 | Returns the stamp path+filename | 778 | Returns the stamp path+filename |
@@ -817,27 +780,14 @@ def stamp_cleanmask_internal(taskname, d, file_name): | |||
817 | In the bitbake core, d can be a CacheData and file_name will be set. | 780 | In the bitbake core, d can be a CacheData and file_name will be set. |
818 | When called in task context, d will be a data store, file_name will not be set | 781 | When called in task context, d will be a data store, file_name will not be set |
819 | """ | 782 | """ |
820 | taskflagname = taskname | 783 | cleanmask = bb.parse.siggen.stampcleanmask_mcfn(taskname, mcfn) |
821 | if taskname.endswith("_setscene"): | 784 | taskflagname = taskname.replace("_setscene", "") |
822 | taskflagname = taskname.replace("_setscene", "") | 785 | if cleanmask: |
823 | 786 | return [cleanmask, cleanmask.replace(taskflagname, taskflagname + "_setscene")] | |
824 | if file_name: | 787 | return [] |
825 | stamp = d.stampclean[file_name] | 788 | |
826 | extrainfo = d.stamp_extrainfo[file_name].get(taskflagname) or "" | 789 | def clean_stamp_mcfn(task, mcfn): |
827 | else: | 790 | cleanmask = _get_cleanmask(task, mcfn) |
828 | stamp = d.getVar('STAMPCLEAN') | ||
829 | file_name = d.getVar('BB_FILENAME') | ||
830 | extrainfo = d.getVarFlag(taskflagname, 'stamp-extra-info') or "" | ||
831 | |||
832 | if not stamp: | ||
833 | return [] | ||
834 | |||
835 | cleanmask = bb.parse.siggen.stampcleanmask(stamp, file_name, taskname, extrainfo) | ||
836 | |||
837 | return [cleanmask, cleanmask.replace(taskflagname, taskflagname + "_setscene")] | ||
838 | |||
839 | def clean_stamp(task, d, file_name = None): | ||
840 | cleanmask = stamp_cleanmask_internal(task, d, file_name) | ||
841 | for mask in cleanmask: | 791 | for mask in cleanmask: |
842 | for name in glob.glob(mask): | 792 | for name in glob.glob(mask): |
843 | # Preserve sigdata files in the stamps directory | 793 | # Preserve sigdata files in the stamps directory |
@@ -847,33 +797,46 @@ def clean_stamp(task, d, file_name = None): | |||
847 | if name.endswith('.taint'): | 797 | if name.endswith('.taint'): |
848 | continue | 798 | continue |
849 | os.unlink(name) | 799 | os.unlink(name) |
850 | return | ||
851 | 800 | ||
852 | def make_stamp(task, d, file_name = None): | 801 | def clean_stamp(task, d): |
802 | mcfn = d.getVar('BB_FILENAME') | ||
803 | clean_stamp_mcfn(task, mcfn) | ||
804 | |||
805 | def make_stamp_mcfn(task, mcfn): | ||
806 | |||
807 | basestamp = bb.parse.siggen.stampfile_mcfn(task, mcfn) | ||
808 | |||
809 | stampdir = os.path.dirname(basestamp) | ||
810 | if cached_mtime_noerror(stampdir) == 0: | ||
811 | bb.utils.mkdirhier(stampdir) | ||
812 | |||
813 | clean_stamp_mcfn(task, mcfn) | ||
814 | |||
815 | # Remove the file and recreate to force timestamp | ||
816 | # change on broken NFS filesystems | ||
817 | if basestamp: | ||
818 | bb.utils.remove(basestamp) | ||
819 | open(basestamp, "w").close() | ||
820 | |||
821 | def make_stamp(task, d): | ||
853 | """ | 822 | """ |
854 | Creates/updates a stamp for a given task | 823 | Creates/updates a stamp for a given task |
855 | (d can be a data dict or dataCache) | ||
856 | """ | 824 | """ |
857 | clean_stamp(task, d, file_name) | 825 | mcfn = d.getVar('BB_FILENAME') |
858 | 826 | ||
859 | stamp = stamp_internal(task, d, file_name) | 827 | make_stamp_mcfn(task, mcfn) |
860 | # Remove the file and recreate to force timestamp | ||
861 | # change on broken NFS filesystems | ||
862 | if stamp: | ||
863 | bb.utils.remove(stamp) | ||
864 | open(stamp, "w").close() | ||
865 | 828 | ||
866 | # If we're in task context, write out a signature file for each task | 829 | # If we're in task context, write out a signature file for each task |
867 | # as it completes | 830 | # as it completes |
868 | if not task.endswith("_setscene") and not file_name: | 831 | if not task.endswith("_setscene"): |
869 | stampbase = stamp_internal(task, d, None, True) | 832 | stampbase = bb.parse.siggen.stampfile_base(mcfn) |
870 | file_name = d.getVar('BB_FILENAME') | 833 | bb.parse.siggen.dump_sigtask(mcfn, task, stampbase, True) |
871 | bb.parse.siggen.dump_sigtask(file_name, task, stampbase, True) | 834 | |
872 | 835 | ||
873 | def find_stale_stamps(task, d, file_name=None): | 836 | def find_stale_stamps(task, mcfn): |
874 | current = stamp_internal(task, d, file_name) | 837 | current = bb.parse.siggen.stampfile_mcfn(task, mcfn) |
875 | current2 = stamp_internal(task + "_setscene", d, file_name) | 838 | current2 = bb.parse.siggen.stampfile_mcfn(task + "_setscene", mcfn) |
876 | cleanmask = stamp_cleanmask_internal(task, d, file_name) | 839 | cleanmask = _get_cleanmask(task, mcfn) |
877 | found = [] | 840 | found = [] |
878 | for mask in cleanmask: | 841 | for mask in cleanmask: |
879 | for name in glob.glob(mask): | 842 | for name in glob.glob(mask): |
@@ -887,38 +850,14 @@ def find_stale_stamps(task, d, file_name=None): | |||
887 | found.append(name) | 850 | found.append(name) |
888 | return found | 851 | return found |
889 | 852 | ||
890 | def del_stamp(task, d, file_name = None): | 853 | def write_taint(task, d): |
891 | """ | ||
892 | Removes a stamp for a given task | ||
893 | (d can be a data dict or dataCache) | ||
894 | """ | ||
895 | stamp = stamp_internal(task, d, file_name) | ||
896 | bb.utils.remove(stamp) | ||
897 | |||
898 | def write_taint(task, d, file_name = None): | ||
899 | """ | 854 | """ |
900 | Creates a "taint" file which will force the specified task and its | 855 | Creates a "taint" file which will force the specified task and its |
901 | dependents to be re-run the next time by influencing the value of its | 856 | dependents to be re-run the next time by influencing the value of its |
902 | taskhash. | 857 | taskhash. |
903 | (d can be a data dict or dataCache) | ||
904 | """ | ||
905 | import uuid | ||
906 | if file_name: | ||
907 | taintfn = d.stamp[file_name] + '.' + task + '.taint' | ||
908 | else: | ||
909 | taintfn = d.getVar('STAMP') + '.' + task + '.taint' | ||
910 | bb.utils.mkdirhier(os.path.dirname(taintfn)) | ||
911 | # The specific content of the taint file is not really important, | ||
912 | # we just need it to be random, so a random UUID is used | ||
913 | with open(taintfn, 'w') as taintf: | ||
914 | taintf.write(str(uuid.uuid4())) | ||
915 | |||
916 | def stampfile(taskname, d, file_name = None, noextra=False): | ||
917 | """ | ||
918 | Return the stamp for a given task | ||
919 | (d can be a data dict or dataCache) | ||
920 | """ | 858 | """ |
921 | return stamp_internal(taskname, d, file_name, noextra=noextra) | 859 | mcfn = d.getVar('BB_FILENAME') |
860 | bb.parse.siggen.invalidate_task(task, mcfn) | ||
922 | 861 | ||
923 | def add_tasks(tasklist, d): | 862 | def add_tasks(tasklist, d): |
924 | task_deps = d.getVar('_task_deps', False) | 863 | task_deps = d.getVar('_task_deps', False) |
diff --git a/bitbake/lib/bb/cooker.py b/bitbake/lib/bb/cooker.py index ac7ac20c04..d96afcc669 100644 --- a/bitbake/lib/bb/cooker.py +++ b/bitbake/lib/bb/cooker.py | |||
@@ -1453,7 +1453,7 @@ class BBCooker: | |||
1453 | # Invalidate task for target if force mode active | 1453 | # Invalidate task for target if force mode active |
1454 | if self.configuration.force: | 1454 | if self.configuration.force: |
1455 | logger.verbose("Invalidate task %s, %s", task, fn) | 1455 | logger.verbose("Invalidate task %s, %s", task, fn) |
1456 | bb.parse.siggen.invalidate_task(task, self.recipecaches[mc], fn) | 1456 | bb.parse.siggen.invalidate_task(task, fn) |
1457 | 1457 | ||
1458 | # Setup taskdata structure | 1458 | # Setup taskdata structure |
1459 | taskdata = {} | 1459 | taskdata = {} |
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py index 61cb9f4c95..b9dd830b31 100644 --- a/bitbake/lib/bb/runqueue.py +++ b/bitbake/lib/bb/runqueue.py | |||
@@ -155,7 +155,7 @@ class RunQueueScheduler(object): | |||
155 | self.stamps = {} | 155 | self.stamps = {} |
156 | for tid in self.rqdata.runtaskentries: | 156 | for tid in self.rqdata.runtaskentries: |
157 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | 157 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) |
158 | self.stamps[tid] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn, noextra=True) | 158 | self.stamps[tid] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
159 | if tid in self.rq.runq_buildable: | 159 | if tid in self.rq.runq_buildable: |
160 | self.buildable.append(tid) | 160 | self.buildable.append(tid) |
161 | 161 | ||
@@ -937,7 +937,7 @@ class RunQueueData: | |||
937 | bb.debug(1, "Task %s is marked nostamp, cannot invalidate this task" % taskname) | 937 | bb.debug(1, "Task %s is marked nostamp, cannot invalidate this task" % taskname) |
938 | else: | 938 | else: |
939 | logger.verbose("Invalidate task %s, %s", taskname, fn) | 939 | logger.verbose("Invalidate task %s, %s", taskname, fn) |
940 | bb.parse.siggen.invalidate_task(taskname, self.dataCaches[mc], taskfn) | 940 | bb.parse.siggen.invalidate_task(taskname, taskfn) |
941 | 941 | ||
942 | self.target_tids = [] | 942 | self.target_tids = [] |
943 | for (mc, target, task, fn) in self.targets: | 943 | for (mc, target, task, fn) in self.targets: |
@@ -1398,7 +1398,7 @@ class RunQueue: | |||
1398 | if taskname is None: | 1398 | if taskname is None: |
1399 | taskname = tn | 1399 | taskname = tn |
1400 | 1400 | ||
1401 | stampfile = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn) | 1401 | stampfile = bb.parse.siggen.stampfile_mcfn(taskname, taskfn) |
1402 | 1402 | ||
1403 | # If the stamp is missing, it's not current | 1403 | # If the stamp is missing, it's not current |
1404 | if not os.access(stampfile, os.F_OK): | 1404 | if not os.access(stampfile, os.F_OK): |
@@ -1421,8 +1421,8 @@ class RunQueue: | |||
1421 | for dep in self.rqdata.runtaskentries[tid].depends: | 1421 | for dep in self.rqdata.runtaskentries[tid].depends: |
1422 | if iscurrent: | 1422 | if iscurrent: |
1423 | (mc2, fn2, taskname2, taskfn2) = split_tid_mcfn(dep) | 1423 | (mc2, fn2, taskname2, taskfn2) = split_tid_mcfn(dep) |
1424 | stampfile2 = bb.build.stampfile(taskname2, self.rqdata.dataCaches[mc2], taskfn2) | 1424 | stampfile2 = bb.parse.siggen.stampfile_mcfn(taskname2, taskfn2) |
1425 | stampfile3 = bb.build.stampfile(taskname2 + "_setscene", self.rqdata.dataCaches[mc2], taskfn2) | 1425 | stampfile3 = bb.parse.siggen.stampfile_mcfn(taskname2 + "_setscene", taskfn2) |
1426 | t2 = get_timestamp(stampfile2) | 1426 | t2 = get_timestamp(stampfile2) |
1427 | t3 = get_timestamp(stampfile3) | 1427 | t3 = get_timestamp(stampfile3) |
1428 | if t3 and not t2: | 1428 | if t3 and not t2: |
@@ -2164,7 +2164,7 @@ class RunQueueExecute: | |||
2164 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") | 2164 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") |
2165 | self.rq.worker[mc].process.stdin.flush() | 2165 | self.rq.worker[mc].process.stdin.flush() |
2166 | 2166 | ||
2167 | self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn, noextra=True) | 2167 | self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
2168 | self.build_stamps2.append(self.build_stamps[task]) | 2168 | self.build_stamps2.append(self.build_stamps[task]) |
2169 | self.sq_running.add(task) | 2169 | self.sq_running.add(task) |
2170 | self.sq_live.add(task) | 2170 | self.sq_live.add(task) |
@@ -2224,7 +2224,7 @@ class RunQueueExecute: | |||
2224 | self.runq_running.add(task) | 2224 | self.runq_running.add(task) |
2225 | self.stats.taskActive() | 2225 | self.stats.taskActive() |
2226 | if not (self.cooker.configuration.dry_run or self.rqdata.setscene_enforce): | 2226 | if not (self.cooker.configuration.dry_run or self.rqdata.setscene_enforce): |
2227 | bb.build.make_stamp(taskname, self.rqdata.dataCaches[mc], taskfn) | 2227 | bb.build.make_stamp_mcfn(taskname, taskfn) |
2228 | self.task_complete(task) | 2228 | self.task_complete(task) |
2229 | return True | 2229 | return True |
2230 | else: | 2230 | else: |
@@ -2263,7 +2263,7 @@ class RunQueueExecute: | |||
2263 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") | 2263 | self.rq.worker[mc].process.stdin.write(b"<runtask>" + pickle.dumps(runtask) + b"</runtask>") |
2264 | self.rq.worker[mc].process.stdin.flush() | 2264 | self.rq.worker[mc].process.stdin.flush() |
2265 | 2265 | ||
2266 | self.build_stamps[task] = bb.build.stampfile(taskname, self.rqdata.dataCaches[mc], taskfn, noextra=True) | 2266 | self.build_stamps[task] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
2267 | self.build_stamps2.append(self.build_stamps[task]) | 2267 | self.build_stamps2.append(self.build_stamps[task]) |
2268 | self.runq_running.add(task) | 2268 | self.runq_running.add(task) |
2269 | self.stats.taskActive() | 2269 | self.stats.taskActive() |
@@ -2520,7 +2520,7 @@ class RunQueueExecute: | |||
2520 | self.scenequeue_notneeded.remove(tid) | 2520 | self.scenequeue_notneeded.remove(tid) |
2521 | 2521 | ||
2522 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | 2522 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) |
2523 | self.sqdata.stamps[tid] = bb.build.stampfile(taskname + "_setscene", self.rqdata.dataCaches[mc], taskfn, noextra=True) | 2523 | self.sqdata.stamps[tid] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
2524 | 2524 | ||
2525 | if tid in self.stampcache: | 2525 | if tid in self.stampcache: |
2526 | del self.stampcache[tid] | 2526 | del self.stampcache[tid] |
@@ -2836,7 +2836,8 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq): | |||
2836 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | 2836 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) |
2837 | realtid = tid + "_setscene" | 2837 | realtid = tid + "_setscene" |
2838 | idepends = rqdata.taskData[mc].taskentries[realtid].idepends | 2838 | idepends = rqdata.taskData[mc].taskentries[realtid].idepends |
2839 | sqdata.stamps[tid] = bb.build.stampfile(taskname + "_setscene", rqdata.dataCaches[mc], taskfn, noextra=True) | 2839 | sqdata.stamps[tid] = bb.parse.siggen.stampfile_mcfn(taskname, taskfn, extrainfo=False) |
2840 | |||
2840 | for (depname, idependtask) in idepends: | 2841 | for (depname, idependtask) in idepends: |
2841 | 2842 | ||
2842 | if depname not in rqdata.taskData[mc].build_targets: | 2843 | if depname not in rqdata.taskData[mc].build_targets: |
@@ -2915,7 +2916,7 @@ def build_scenequeue_data(sqdata, rqdata, rq, cooker, stampcache, sqrq): | |||
2915 | found = {} | 2916 | found = {} |
2916 | for tid in rqdata.runq_setscene_tids: | 2917 | for tid in rqdata.runq_setscene_tids: |
2917 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) | 2918 | (mc, fn, taskname, taskfn) = split_tid_mcfn(tid) |
2918 | stamps = bb.build.find_stale_stamps(taskname, rqdata.dataCaches[mc], taskfn) | 2919 | stamps = bb.build.find_stale_stamps(taskname, taskfn) |
2919 | if stamps: | 2920 | if stamps: |
2920 | if mc not in found: | 2921 | if mc not in found: |
2921 | found[mc] = {} | 2922 | found[mc] = {} |
@@ -2931,7 +2932,7 @@ def check_setscene_stamps(tid, rqdata, rq, stampcache, noexecstamp=False): | |||
2931 | taskdep = rqdata.dataCaches[mc].task_deps[taskfn] | 2932 | taskdep = rqdata.dataCaches[mc].task_deps[taskfn] |
2932 | 2933 | ||
2933 | if 'noexec' in taskdep and taskname in taskdep['noexec']: | 2934 | if 'noexec' in taskdep and taskname in taskdep['noexec']: |
2934 | bb.build.make_stamp(taskname + "_setscene", rqdata.dataCaches[mc], taskfn) | 2935 | bb.build.make_stamp_mcfn(taskname + "_setscene", taskfn) |
2935 | return True, False | 2936 | return True, False |
2936 | 2937 | ||
2937 | if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): | 2938 | if rq.check_stamp_task(tid, taskname + "_setscene", cache=stampcache): |
diff --git a/bitbake/lib/bb/siggen.py b/bitbake/lib/bb/siggen.py index a63e37d22f..513f3811a1 100644 --- a/bitbake/lib/bb/siggen.py +++ b/bitbake/lib/bb/siggen.py | |||
@@ -106,17 +106,51 @@ class SignatureGenerator(object): | |||
106 | """Write/update the file checksum cache onto disk""" | 106 | """Write/update the file checksum cache onto disk""" |
107 | return | 107 | return |
108 | 108 | ||
109 | def stampfile_base(self, mcfn): | ||
110 | mc = bb.runqueue.mc_from_tid(mcfn) | ||
111 | return self.datacaches[mc].stamp[mcfn] | ||
112 | |||
113 | def stampfile_mcfn(self, taskname, mcfn, extrainfo=True): | ||
114 | mc = bb.runqueue.mc_from_tid(mcfn) | ||
115 | stamp = self.datacaches[mc].stamp[mcfn] | ||
116 | if not stamp: | ||
117 | return | ||
118 | |||
119 | stamp_extrainfo = "" | ||
120 | if extrainfo: | ||
121 | taskflagname = taskname | ||
122 | if taskname.endswith("_setscene"): | ||
123 | taskflagname = taskname.replace("_setscene", "") | ||
124 | stamp_extrainfo = self.datacaches[mc].stamp_extrainfo[mcfn].get(taskflagname) or "" | ||
125 | |||
126 | return self.stampfile(stamp, mcfn, taskname, stamp_extrainfo) | ||
127 | |||
109 | def stampfile(self, stampbase, file_name, taskname, extrainfo): | 128 | def stampfile(self, stampbase, file_name, taskname, extrainfo): |
110 | return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.') | 129 | return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.') |
111 | 130 | ||
131 | def stampcleanmask_mcfn(self, taskname, mcfn): | ||
132 | mc = bb.runqueue.mc_from_tid(mcfn) | ||
133 | stamp = self.datacaches[mc].stamp[mcfn] | ||
134 | if not stamp: | ||
135 | return [] | ||
136 | |||
137 | taskflagname = taskname | ||
138 | if taskname.endswith("_setscene"): | ||
139 | taskflagname = taskname.replace("_setscene", "") | ||
140 | stamp_extrainfo = self.datacaches[mc].stamp_extrainfo[mcfn].get(taskflagname) or "" | ||
141 | |||
142 | return self.stampcleanmask(stamp, mcfn, taskname, stamp_extrainfo) | ||
143 | |||
112 | def stampcleanmask(self, stampbase, file_name, taskname, extrainfo): | 144 | def stampcleanmask(self, stampbase, file_name, taskname, extrainfo): |
113 | return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.') | 145 | return ("%s.%s.%s" % (stampbase, taskname, extrainfo)).rstrip('.') |
114 | 146 | ||
115 | def dump_sigtask(self, fn, task, stampbase, runtime): | 147 | def dump_sigtask(self, fn, task, stampbase, runtime): |
116 | return | 148 | return |
117 | 149 | ||
118 | def invalidate_task(self, task, d, fn): | 150 | def invalidate_task(self, task, mcfn): |
119 | bb.build.del_stamp(task, d, fn) | 151 | mc = bb.runqueue.mc_from_tid(mcfn) |
152 | stamp = self.datacaches[mc].stamp[mcfn] | ||
153 | bb.utils.remove(stamp) | ||
120 | 154 | ||
121 | def dump_sigs(self, dataCache, options): | 155 | def dump_sigs(self, dataCache, options): |
122 | return | 156 | return |
@@ -448,9 +482,20 @@ class SignatureGeneratorBasicHash(SignatureGeneratorBasic): | |||
448 | def stampcleanmask(self, stampbase, fn, taskname, extrainfo): | 482 | def stampcleanmask(self, stampbase, fn, taskname, extrainfo): |
449 | return self.stampfile(stampbase, fn, taskname, extrainfo, clean=True) | 483 | return self.stampfile(stampbase, fn, taskname, extrainfo, clean=True) |
450 | 484 | ||
451 | def invalidate_task(self, task, d, fn): | 485 | def invalidate_task(self, task, mcfn): |
452 | bb.note("Tainting hash to force rebuild of task %s, %s" % (fn, task)) | 486 | bb.note("Tainting hash to force rebuild of task %s, %s" % (mcfn, task)) |
453 | bb.build.write_taint(task, d, fn) | 487 | |
488 | mc = bb.runqueue.mc_from_tid(mcfn) | ||
489 | stamp = self.datacaches[mc].stamp[mcfn] | ||
490 | |||
491 | taintfn = stamp + '.' + task + '.taint' | ||
492 | |||
493 | import uuid | ||
494 | bb.utils.mkdirhier(os.path.dirname(taintfn)) | ||
495 | # The specific content of the taint file is not really important, | ||
496 | # we just need it to be random, so a random UUID is used | ||
497 | with open(taintfn, 'w') as taintf: | ||
498 | taintf.write(str(uuid.uuid4())) | ||
454 | 499 | ||
455 | class SignatureGeneratorUniHashMixIn(object): | 500 | class SignatureGeneratorUniHashMixIn(object): |
456 | def __init__(self, data): | 501 | def __init__(self, data): |
@@ -693,7 +738,7 @@ def dump_this_task(outfile, d): | |||
693 | import bb.parse | 738 | import bb.parse |
694 | fn = d.getVar("BB_FILENAME") | 739 | fn = d.getVar("BB_FILENAME") |
695 | task = "do_" + d.getVar("BB_CURRENTTASK") | 740 | task = "do_" + d.getVar("BB_CURRENTTASK") |
696 | referencestamp = bb.build.stamp_internal(task, d, None, True) | 741 | referencestamp = bb.parse.siggen.stampfile_base(fn) |
697 | bb.parse.siggen.dump_sigtask(fn, task, outfile, "customfile:" + referencestamp) | 742 | bb.parse.siggen.dump_sigtask(fn, task, outfile, "customfile:" + referencestamp) |
698 | 743 | ||
699 | def init_colors(enable_color): | 744 | def init_colors(enable_color): |