From 6466c480b0b8e7d57935ae050f996c872cd8f29e Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Tue, 1 Nov 2011 11:14:10 -0600 Subject: [PATCH] DrDr, test this push --- collects/meta/drdr/monitor-scm.rkt | 2 +- collects/meta/drdr/scm.rkt | 38 +++++++++++++++++++----------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/collects/meta/drdr/monitor-scm.rkt b/collects/meta/drdr/monitor-scm.rkt index 56f86310ef..39da73599e 100644 --- a/collects/meta/drdr/monitor-scm.rkt +++ b/collects/meta/drdr/monitor-scm.rkt @@ -8,7 +8,7 @@ (define (monitor-scm repos start-rev notify-newer! notify-user!) (define (monitor-w/o-wait prev-rev) (define new-revs - (scm-revisions-after prev-rev)) + (scm-revisions-after prev-rev repos)) (match new-revs [(list) ; There has not yet been more revisions diff --git a/collects/meta/drdr/scm.rkt b/collects/meta/drdr/scm.rkt index 10b2a18e96..42463fc75e 100644 --- a/collects/meta/drdr/scm.rkt +++ b/collects/meta/drdr/scm.rkt @@ -120,20 +120,23 @@ [else empty])) -(define (parse-push num author in-p) - (make-git-push num author (read-commits in-p))) - (define (get-scm-commit-msg rev repo) (match-define (struct push-data (who _ branches)) (push-info rev)) - (match-define (vector start-commit end-commit) (hash-ref branches master-branch)) - (parameterize ([current-directory repo]) - (system/output-port - #:k (curry parse-push rev who) - (git-path) - "--no-pager" "log" "--date=iso" "--name-only" "--no-merges" - (format "~a..~a" start-commit end-commit)))) + (make-git-push + rev who + (apply append + (for/list + ([(branch cs) branches]) + (match-define (vector start-commit end-commit) cs) + (parameterize + ([current-directory repo]) + (system/output-port + #:k read-commits + (git-path) + "--no-pager" "log" "--date=iso" "--name-only" "--no-merges" + (format "~a..~a" start-commit end-commit))))))) (provide/contract - [struct git-push + [struct git-push ([num exact-nonnegative-integer?] [author string?] [commits (listof git-commit?)])] @@ -212,16 +215,23 @@ (define master-branch "refs/heads/master") -(define (scm-revisions-after cur-rev) +(define (contains-drdr-request? p) + (for*/or ([c (in-list (git-push-commits p))] + [m (in-list (git-commit-msg c))]) + (regexp-match #rx"DrDr, test this push" m))) + +(define (scm-revisions-after cur-rev repo) (define newest-rev (newest-push)) (for/list ([rev (in-range (add1 cur-rev) (add1 newest-rev))] #:when (let ([info (push-info rev)]) - (and info (hash-has-key? (push-data-branches info) master-branch)))) + (and info + (or (hash-has-key? (push-data-branches info) master-branch) + (contains-drdr-request? (get-scm-commit-msg rev repo)))))) rev)) (provide/contract [scm-update (path? . -> . void?)] - [scm-revisions-after (exact-nonnegative-integer? . -> . (listof exact-nonnegative-integer?))] + [scm-revisions-after (exact-nonnegative-integer? path-string? . -> . (listof exact-nonnegative-integer?))] [scm-export-file (exact-nonnegative-integer? path-string? string? path-string? . -> . void?)] [scm-export-repo (exact-nonnegative-integer? path-string? path-string? . -> . void?)])