Skip to content

Commit 252d144

Browse files
committed
---
yaml --- r: 64645 b: refs/heads/snap-stage3 c: ff8d65e h: refs/heads/master i: 64643: 3dd0e50 v: v3
1 parent 3401c56 commit 252d144

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
refs/heads/master: 2d28d645422c1617be58c8ca7ad9a457264ca850
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: fa8553e41735d94cab81dba68c284d81e3f23107
4+
refs/heads/snap-stage3: ff8d65eb373cde30ab983f942737333574435978
55
refs/heads/try: 7b78b52e602bb3ea8174f9b2006bff3315f03ef9
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b

branches/snap-stage3/src/libextra/workcache.rs

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use digest::DigestUtil;
1515
use json;
1616
use sha1::Sha1;
1717
use serialize::{Encoder, Encodable, Decoder, Decodable};
18-
use arc::RWARC;
18+
use arc::{ARC,RWARC};
1919
use treemap::TreeMap;
2020

2121
use std::cell::Cell;
@@ -174,11 +174,12 @@ impl Logger {
174174
}
175175
}
176176
177+
#[deriving(Clone)]
177178
struct Context {
178179
db: RWARC<Database>,
179-
logger: Logger,
180-
cfg: json::Object,
181-
freshness: TreeMap<~str,@fn(&str,&str)->bool>
180+
logger: RWARC<Logger>,
181+
cfg: ARC<json::Object>,
182+
freshness: ARC<TreeMap<~str,~fn(&str,&str)->bool>>
182183
}
183184
184185
struct Prep<'self> {
@@ -228,12 +229,14 @@ fn digest_file(path: &Path) -> ~str {
228229
229230
impl Context {
230231
231-
pub fn new(db: RWARC<Database>, lg: Logger, cfg: json::Object) -> Context {
232+
pub fn new(db: RWARC<Database>,
233+
lg: RWARC<Logger>,
234+
cfg: ARC<json::Object>) -> Context {
232235
Context {
233236
db: db,
234237
logger: lg,
235238
cfg: cfg,
236-
freshness: TreeMap::new()
239+
freshness: ARC(TreeMap::new())
237240
}
238241
}
239242
@@ -267,19 +270,20 @@ impl<'self> Prep<'self> {
267270
fn is_fresh(&self, cat: &str, kind: &str,
268271
name: &str, val: &str) -> bool {
269272
let k = kind.to_owned();
270-
let f = self.ctxt.freshness.find(&k);
273+
let f = self.ctxt.freshness.get().find(&k);
271274
let fresh = match f {
272275
None => fail!("missing freshness-function for '%s'", kind),
273276
Some(f) => (*f)(name, val)
274277
};
275-
let lg = self.ctxt.logger;
276-
if fresh {
277-
lg.info(fmt!("%s %s:%s is fresh",
278-
cat, kind, name));
279-
} else {
280-
lg.info(fmt!("%s %s:%s is not fresh",
281-
cat, kind, name))
282-
}
278+
do self.ctxt.logger.write |lg| {
279+
if fresh {
280+
lg.info(fmt!("%s %s:%s is fresh",
281+
cat, kind, name));
282+
} else {
283+
lg.info(fmt!("%s %s:%s is not fresh",
284+
cat, kind, name))
285+
}
286+
};
283287
fresh
284288
}
285289

@@ -380,13 +384,21 @@ fn test() {
380384
}
381385

382386
let cx = Context::new(RWARC(Database::new(Path("db.json"))),
383-
Logger::new(), TreeMap::new());
387+
RWARC(Logger::new()),
388+
ARC(TreeMap::new()));
384389

385390
let s = do cx.with_prep("test1") |prep| {
391+
392+
let subcx = cx.clone();
393+
386394
prep.declare_input("file", pth.to_str(), digest_file(&pth));
387395
do prep.exec |_exe| {
388396
let out = Path("foo.o");
389397
run::process_status("gcc", [~"foo.c", ~"-o", out.to_str()]);
398+
399+
let _proof_of_concept = subcx.prep("subfn");
400+
// Could run sub-rules inside here.
401+
390402
out.to_str()
391403
}
392404
};

0 commit comments

Comments
 (0)