Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Demo broken #35

Open
marcusreichardt opened this issue Jul 31, 2022 · 6 comments
Open

Demo broken #35

marcusreichardt opened this issue Jul 31, 2022 · 6 comments

Comments

@marcusreichardt
Copy link

marcusreichardt commented Jul 31, 2022

Attempting to capture example.com as advised ie running

python3 capture/capture.py http://example.com/ --output bench/example.rkt

results in a bench/example.rkt file looking like this for me:

;; From http://example.com/

(define-stylesheet 
  ((tag body)
   [background-color (rgb 240 240 242)]
   [margin-top (px 0)]
   [margin-right (px 0)]
   [margin-bottom (px 0)]
   [margin-left (px 0)]
   [padding-top (px 0)]
   [padding-right (px 0)]
   [padding-bottom (px 0)]
   [padding-left (px 0)]
   [font-family "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif"])
  ((tag div)
   [width (px 600)]
   [margin-top (em 5)]
   [margin-right auto]
   [margin-bottom (em 5)]
   [margin-left auto]
   [padding-top (em 2)]
   [padding-right (em 2)]
   [padding-bottom (em 2)]
   [padding-left (em 2)]
   [background-color (rgb 253 253 255)]
   #;[border-top-left-radius (em 0.5)]
   #;[border-top-right-radius (em 0.5)]
   #;[border-bottom-right-radius (em 0.5)]
   #;[border-bottom-left-radius (em 0.5)]
   #;[box-shadow rgba(0, 0, 0, 0.02) 2px 3px 7px 2px])
  ((fake "a:link" (id e0001))
   [color (rgb 56 72 143)]
   #;[text-decoration-line none]
   #;[text-decoration-style solid]
   #;[text-decoration-color currentcolor]
   #;[text-decoration-thickness auto])
  ((fake " a:visited")
   [color (rgb 56 72 143)]
   #;[text-decoration-line none]
   #;[text-decoration-style solid]
   #;[text-decoration-color currentcolor]
   #;[text-decoration-thickness auto])
  ((media (max-width (px 700)) (tag div))
   [margin-top (px 0)]
   [margin-right auto]
   [margin-bottom (px 0)]
   [margin-left auto]
   [width auto]))

(define-fonts 
  [16 "serif" 400 normal 13.5 2.5 1.5 1.5 19]
  [16 "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif" 400 normal 13.5 2.5 1.5 1.5 19]
  [32 "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif" 700 normal 27 5 3 3 38])

(define-browser 
  :matched true
  :w 1280
  :h 939
  :fs 16
  :fsm 12
  :scrollw 12)

(define-document 
  ([html :num 0]
   ([head :num 1]
    ([title :num 2])
    ([meta :num 3])
    ([meta :num 4])
    ([meta :num 5])
    ([style :num 6]))
   ([body :num 7]
    ([div :num 8]
     ([h1 :num 9] "Example Domain")
     ([p :num 10] "This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.")
     ([p :num 11]
      ([a :num 12 :id e0001] "More information..."))))))

(define-layout  ( )
 ([VIEW :w 1280]
  ([BLOCK :x 0 :y 0 :w 1280 :h 6193/15 :elt 0]
   ([BLOCK :x 0 :y 80 :w 1280 :h 3793/15 :elt 7]
    ([BLOCK :x 308 :y 80 :w 664 :h 3793/15 :elt 8]
     ([BLOCK :x 340 :y 4003/30 :w 600 :h 38 :elt 9]
      ([LINE]
       ([TEXT :x 340 :y 4003/30 :w 301.4 :h 38 :text "Example Domain"])))
     ([BLOCK :x 340 :y 2893/15 :w 600 :h 57 :elt 10]
      ([LINE]
       ([TEXT :x 340 :y 2893/15 :w 592.4 :h 19 :text "This domain is for use in illustrative examples in documents. You may use " :br ]))
      ([LINE]
       ([TEXT :x 340 :y 3178/15 :w 511.3 :h 19 :text "this domain in literature without prior coordination or asking for " :br ]))
      ([LINE]
       ([TEXT :x 340 :y 3463/15 :w 1849/20 :h 19 :text "permission."])))
     ([BLOCK :x 340 :y 3988/15 :w 600 :h 19 :elt 11]
      ([LINE]
       ([INLINE :x 340 :y 3988/15 :w 9139/60 :h 19 :elt 12]
        ([TEXT :x 340 :y 3988/15 :w 9139/60 :h 19 :text "More information..."])))))))))

(define-problem 
  :title "Example Domain"
  :url "http://example.com/"
  :sheets firefox 
  :fonts 
  :layouts 
  :script 
  :features unknown-selector @media float:0)

ie. tokens after define-stylesheet, define-browser, etc. are all missing, resulting in error messages when attempting to run Cassius command line tools on it eg:

$ racket src/run.rkt accept bench/example.rkt doc-1
match: no matching clause for '(true :w 1280 :h 939 :fs 16 :fsm 12 :scrollw 12)
location...:
src/common.rkt:113:2
...

Manually editing the file and adding doc-1, firefox, fixing define-problem, etc. such that it reads

;;; From http://example.com/

(define-stylesheet doc-1
  ((tag body)
   [background-color (rgb 240 240 242)]
   [margin-top (px 0)]
   [margin-right (px 0)]
   [margin-bottom (px 0)]
   [margin-left (px 0)]
   [padding-top (px 0)]
   [padding-right (px 0)]
   [padding-bottom (px 0)]
   [padding-left (px 0)]
   [font-family "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif"])
  ((tag div)
   [width (px 600)]
   [margin-top (em 5)]
   [margin-right auto]
   [margin-bottom (em 5)]
   [margin-left auto]
   [padding-top (em 2)]
   [padding-right (em 2)]
   [padding-bottom (em 2)]
   [padding-left (em 2)]
   [background-color (rgb 253 253 255)]
   #;[border-top-left-radius (em 0.5)]
   #;[border-top-right-radius (em 0.5)]
   #;[border-bottom-right-radius (em 0.5)]
   #;[border-bottom-left-radius (em 0.5)]
   #;[box-shadow rgba(0, 0, 0, 0.02) 2px 3px 7px 2px])
  ((fake "a:link" (id e0001))
   [color (rgb 56 72 143)]
   #;[text-decoration-line none]
   #;[text-decoration-style solid]
   #;[text-decoration-color currentcolor]
   #;[text-decoration-thickness auto])
  ((fake " a:visited")
   [color (rgb 56 72 143)]
   #;[text-decoration-line none]
   #;[text-decoration-style solid]
   #;[text-decoration-color currentcolor]
   #;[text-decoration-thickness auto])
  ((media (max-width (px 700)) (tag div))
   [margin-top (px 0)]
   [margin-right auto]
   [margin-bottom (px 0)]
   [margin-left auto]
   [width auto]))

(define-fonts doc-1 
  [16 "serif" 400 normal 13.5 2.5 1.5 1.5 19]
  [16 "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif" 400 normal 13.5 2.5 1.5 1.5 19]
  [32 "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif" 700 normal 27 5 3 3 38])

(define-browser firefox
  :matched true
  :w 1280
  :h 939
  :fs 16
  :fsm 12
  :scrollw 12)

(define-document doc-1
  ([html :num 0]
   ([head :num 1]
    ([title :num 2])
    ([meta :num 3])
    ([meta :num 4])
    ([meta :num 5])
    ([style :num 6]))
   ([body :num 7]
    ([div :num 8]
     ([h1 :num 9] "Example Domain")
     ([p :num 10] "This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.")
     ([p :num 11]
      ([a :num 12 :id e0001] "More information..."))))))

(define-layout doc-1 (firefox doc-1)
 ([VIEW :w 1280]
  ([BLOCK :x 0 :y 0 :w 1280 :h 6193/15 :elt 0]
   ([BLOCK :x 0 :y 80 :w 1280 :h 3793/15 :elt 7]
    ([BLOCK :x 308 :y 80 :w 664 :h 3793/15 :elt 8]
     ([BLOCK :x 340 :y 4003/30 :w 600 :h 38 :elt 9]
      ([LINE]
       ([TEXT :x 340 :y 4003/30 :w 301.4 :h 38 :text "Example Domain"])))
     ([BLOCK :x 340 :y 2893/15 :w 600 :h 57 :elt 10]
      ([LINE]
       ([TEXT :x 340 :y 2893/15 :w 592.4 :h 19 :text "This domain is for use in illustrative examples in documents. You may use " :br ]))
      ([LINE]
       ([TEXT :x 340 :y 3178/15 :w 511.3 :h 19 :text "this domain in literature without prior coordination or asking for " :br ]))
      ([LINE]
       ([TEXT :x 340 :y 3463/15 :w 1849/20 :h 19 :text "permission."])))
     ([BLOCK :x 340 :y 3988/15 :w 600 :h 19 :elt 11]
      ([LINE]
       ([INLINE :x 340 :y 3988/15 :w 9139/60 :h 19 :elt 12]
        ([TEXT :x 340 :y 3988/15 :w 9139/60 :h 19 :text "More information..."])))))))))

(define-problem doc-1
  :title "Example Domain"
  :url "http://example.com/"
  :sheets doc-1
  :fonts doc-1
  :documents doc-1
  :layouts doc-1
  :features unknown-selector @media float:0)

will result in a succesfull (albeit rejected) accept run:

$ racket src/run.rkt accept bench/example-repaired.rkt doc-1
[   0.000s] Read 1 documents with 13 elements, 18 boxes, 5 rules, and 3 fonts
[   0.126s] Produced 1443 constraints of 22880 terms
[   1.895s] Prepared 4005 constraints of 82351 terms
[   0.542s] Found core with 1 constraints
([VIEW :w 1280]
 ([BLOCK :x 0 :y 0 :w 1280 :h 6193/15 :elt 0]
  ([BLOCK :x 0 :y 80 :w 1280 :h 3793/15 :elt 7]
   ([BLOCK :x 308 :y 80 :w 664 :h 3793/15 :elt 8]
    ([BLOCK :x 340 :y 4003/30 :w 600 :h 38 :elt 9]
     ([LINE]
      ([TEXT :x 340 :y 4003/30 :w 1507/5 :h 38])))
    ([BLOCK :x 340 :y 2893/15 :w 600 :h 57 :elt 10]
     ([LINE]
      ([TEXT :x 340 :y 2893/15 :w 2962/5 :h 19]))
     ([LINE]
      ([TEXT :x 340 :y 3178/15 :w 5113/10 :h 19]))
     ([LINE]
      ([TEXT :x 340 :y 3463/15 :w 1849/20 :h 19])))
    ([BLOCK :x 340 :y 3988/15 :w 600 :h 19 :elt 11]
     ([LINE]
      ([INLINE :x 340 :y 3988/15 :w 9139/60 :h 19 :elt 12]
       ([TEXT :x 340 :y 3988/15 :w 9139/60 :h 19]))))))))
Rejected.

Ubuntu version 20.04.4
Firefox version 103 (for Canonical)
geckodriver version 0.31.0
Python version 3.8.10
Selenium version 4.0.0a1
Racket version 7.2

Greets

@pavpanchekha
Copy link
Contributor

Interesting. I think I know what is causing the name issue. I'm not sure what causes it to be rejected, though! That will take some more debugging.

@pavpanchekha
Copy link
Contributor

I went back and fixed several bugs.

Can you retry the capture step and tell me if that works? (If it doesn't, please post the captured file.)

If it does work, can you retry the "accept" call? (If it doesn't, please post the captured file.)

@marcusreichardt
Copy link
Author

marcusreichardt commented Aug 4, 2022

This is what the captured file now (57faca2...) looks like:

;; From http://example.com/

(define-stylesheet example.com
  ((tag body)
   [background-color (rgb 240 240 242)]
   [margin-top (px 0)]
   [margin-right (px 0)]
   [margin-bottom (px 0)]
   [margin-left (px 0)]
   [padding-top (px 0)]
   [padding-right (px 0)]
   [padding-bottom (px 0)]
   [padding-left (px 0)]
   [font-family "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif"])
  ((tag div)
   [width (px 600)]
   [margin-top (em 5)]
   [margin-right auto]
   [margin-bottom (em 5)]
   [margin-left auto]
   [padding-top (em 2)]
   [padding-right (em 2)]
   [padding-bottom (em 2)]
   [padding-left (em 2)]
   [background-color (rgb 253 253 255)]
   #;[border-top-left-radius (em 0.5)]
   #;[border-top-right-radius (em 0.5)]
   #;[border-bottom-right-radius (em 0.5)]
   #;[border-bottom-left-radius (em 0.5)]
   #;[box-shadow rgba(0, 0, 0, 0.02) 2px 3px 7px 2px])
  ((fake "a:link" (id eexample.com0001))
   [color (rgb 56 72 143)]
   #;[text-decoration-line none]
   #;[text-decoration-style solid]
   #;[text-decoration-color currentcolor]
   #;[text-decoration-thickness auto])
  ((fake " a:visited")
   [color (rgb 56 72 143)]
   #;[text-decoration-line none]
   #;[text-decoration-style solid]
   #;[text-decoration-color currentcolor]
   #;[text-decoration-thickness auto])
  ((media (max-width (px 700)) (tag div))
   [margin-top (px 0)]
   [margin-right auto]
   [margin-bottom (px 0)]
   [margin-left auto]
   [width auto]))

(define-fonts example.com
  [16 "serif" 400 normal 13.5 2.5 1.5 1.5 19]
  [16 "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif" 400 normal 13.5 2.5 1.5 1.5 19]
  [32 "-apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif" 700 normal 27 5 3 3 38])

(define-browser example.com
  :matched true
  :w 1280
  :h 939
  :fs 16
  :fsm 12
  :scrollw 12)

(define-document example.com
  ([html :num 0]
   ([head :num 1]
    ([title :num 2])
    ([meta :num 3])
    ([meta :num 4])
    ([meta :num 5])
    ([style :num 6]))
   ([body :num 7]
    ([div :num 8]
     ([h1 :num 9] "Example Domain")
     ([p :num 10] "This domain is for use in illustrative examples in documents. You may use this domain in literature without prior coordination or asking for permission.")
     ([p :num 11]
      ([a :num 12 :id eexample.com0001] "More information..."))))))

(define-layout example.com (example.com example.com)
 ([VIEW :w 1280]
  ([BLOCK :x 0 :y 0 :w 1280 :h 6193/15 :elt 0]
   ([BLOCK :x 0 :y 80 :w 1280 :h 3793/15 :elt 7]
    ([BLOCK :x 308 :y 80 :w 664 :h 3793/15 :elt 8]
     ([BLOCK :x 340 :y 4003/30 :w 600 :h 38 :elt 9]
      ([LINE]
       ([TEXT :x 340 :y 4003/30 :w 301.4 :h 38 :text "Example Domain"])))
     ([BLOCK :x 340 :y 2893/15 :w 600 :h 57 :elt 10]
      ([LINE]
       ([TEXT :x 340 :y 2893/15 :w 592.4 :h 19 :text "This domain is for use in illustrative examples in documents. You may use " :br ]))
      ([LINE]
       ([TEXT :x 340 :y 3178/15 :w 511.3 :h 19 :text "this domain in literature without prior coordination or asking for " :br ]))
      ([LINE]
       ([TEXT :x 340 :y 3463/15 :w 1849/20 :h 19 :text "permission."])))
     ([BLOCK :x 340 :y 3988/15 :w 600 :h 19 :elt 11]
      ([LINE]
       ([INLINE :x 340 :y 3988/15 :w 9139/60 :h 19 :elt 12]
        ([TEXT :x 340 :y 3988/15 :w 9139/60 :h 19 :text "More information..."])))))))))

(define-problem example.com
  :title "Example Domain"
  :url "http://example.com/"
  :sheets firefox example.com
  :fonts example.com
  :layouts example.com
  :script example.com
  :features unknown-selector @media float:0)

With that file as input, accept now complains about an example.com script not being there (http://example.com doesn't have JavaScript):

$ racket src/run.rkt -d accept bench/example.rkt example.com
input: Could not find :script example.com

If I comment-out the offending script lookup:

$ git diff src/input.rkt
diff --git a/src/input.rkt b/src/input.rkt
index 04dde07..ff74001 100644
--- a/src/input.rkt
+++ b/src/input.rkt
@@ -50,7 +50,7 @@
 
          (get-from ':sheets sheets)
          (get-from ':layouts layouts)
-        (get-from ':script scripts)
+        ; (get-from ':script scripts)
          (set! properties (dict-set properties ':documents (dict-ref properties ':layouts)))
          (set! properties
                (dict-set properties ':fonts

I get:

$ racket src/run.rkt -d accept bench/example.rkt example.com
[   0.000s] Read 1 documents with 13 elements, 18 boxes, 114 rules, and 3 fonts
[   0.733s] Produced 2152 constraints of 25875 terms
[   1.758s] Prepared 4714 constraints of 80483 terms
[   2.528s] Found core with 5 constraints
([VIEW :w 1280]
 ([BLOCK :x 0 :y 0 :w 1280 :h 6193/15 :elt 0]
  ([BLOCK :x 0 :y 80 :w 1280 :h 3793/15 :elt 7]
   ([BLOCK :x 308 :y 80 :w 664 :h 3793/15 :elt 8]
    ([BLOCK :x 340 :y 4003/30 :w 600 :h 38 :elt 9]
     ([LINE]
      ([TEXT :x 340 :y 4003/30 :w 1507/5 :h 38])))
    ([BLOCK :x 340 :y 2893/15 :w 600 :h 57 :elt 10]
     ([LINE]
      ([TEXT :x 340 :y 2893/15 :w 2962/5 :h 19]))
     ([LINE]
      ([TEXT :x 340 :y 3178/15 :w 5113/10 :h 19]))
     ([LINE]
      ([TEXT :x 340 :y 3463/15 :w 1849/20 :h 19])))
    ([BLOCK :x 340 :y 3988/15 :w 600 :h 19 :elt 11]
     ([LINE]
      ([INLINE :x 340 :y 3988/15 :w 9139/60 :h 19 :elt 12]
       ([TEXT :x 340 :y 3988/15 :w 9139/60 :h 19]))))))))
Rejected.

where the bold-white lengths are printed in red on my terminal.

Oddly, if I leave out the -d option, I get another error:

$racket src/run.rkt accept bench/example.rkt example.com
[   0.000s] Read 1 documents with 13 elements, 18 boxes, 114 rules, and 3 fonts
[   0.728s] Produced 2152 constraints of 26210 terms
[   1.938s] Prepared 4714 constraints of 85631 terms
first: contract violation
  expected: (and/c list? (not/c empty?))
  given: 'model
  context...:
   src/z3.rkt:78:8: for-loop
   /usr/share/racket/collects/racket/private/more-scheme.rkt:261:28
   src/z3.rkt:103:0: z3-check-sat
   /usr/share/racket/collects/racket/private/more-scheme.rkt:261:28
   [repeats 1 more time]
   src/frontend.rkt:91:0: solve-problem*
   src/run.rkt:7:0: do-accept
   (submod "src/run.rkt" main): [running body]
   temp37_0
   for-loop
   run-module-instance!125

This is with z3 4.8.7 but there are newer versions available eg 4.8.17 and 4.10.2. I know it's somewhat of a hit and miss, so I'm asking should I test with another specific z3 version?

@pavpanchekha
Copy link
Contributor

Very odd. Here's what I get:

~/Dropbox/Work/Cassius $ racket src/run.rkt accept test.rkt example.com
[   0.000s] Read 1 documents with 13 elements, 18 boxes, 114 rules, and 3 fonts
[   0.357s] Produced 2152 constraints of 26210 terms
[   1.361s] Prepared 4714 constraints of 85631 terms
[   2.448s] Found model with 1016 variables
Accepted!
~/Dropbox/Work/Cassius $ racket src/run.rkt -d accept test.rkt example.com
[   0.000s] Read 1 documents with 13 elements, 18 boxes, 114 rules, and 3 fonts
[   0.370s] Produced 2152 constraints of 25875 terms
[   1.263s] Prepared 4714 constraints of 80483 terms
[   3.526s] Found core with 5 constraints
([VIEW :w 1280]
 ([BLOCK :x 0 :y 0 :w 1280 :h 6193/15 :elt 0]
  ([BLOCK :x 0 :y 80 :w 1280 :h 3793/15 :elt 7]
   ([BLOCK :x 308 :y 80 :w 664 :h 3793/15 :elt 8]
    ([BLOCK :x 340 :y 4003/30 :w 600 :h 38 :elt 9]
     ([LINE]
      ([TEXT :x 340 :y 4003/30 :w 1507/5 :h 38])))
    ([BLOCK :x 340 :y 2893/15 :w 600 :h 57 :elt 10]
     ([LINE]
      ([TEXT :x 340 :y 2893/15 :w 2962/5 :h 19]))
     ([LINE]
      ([TEXT :x 340 :y 3178/15 :w 5113/10 :h 19]))
     ([LINE]
      ([TEXT :x 340 :y 3463/15 :w 1849/20 :h 19])))
    ([BLOCK :x 340 :y 3988/15 :w 600 :h 19 :elt 11]
     ([LINE]
      ([INLINE :x 340 :y 3988/15 :w 9139/60 :h 19 :elt 12]
       ([TEXT :x 340 :y 3988/15 :w 9139/60 :h 19]))))))))
Rejected.

So, an "accept" without the -d flag and a "reject" with -d. That's not too surprising; the -d variant turns off some correction for rounding errors which might be impacting this (I didn't investigate more). The problem you're running into when you run without -d is inside Cassius's Z3-interaction code, so it's probably a Z3 version issue. I'm using:

~/Dropbox/Work/Cassius $ z3 --version
Z3 version 4.9.1 - 64 bit

It's pretty hit-or-miss indeed, because Cassius talks to Z3 over the command-line interface, and that changes frequently. So perhaps upgrading will help.

@marcusreichardt
Copy link
Author

I can confirm I get the exact same results as you now with z3 4.9.1. Whereas with z3 4.8.10 (which is what eg current Ubuntu LTS has), the invocation of z3 from cassius/racket appears to hang and not terminate, though oddly not with high CPU load.

I still need to use the version of input.rkt where the :script hash lookup is commented-out as described above for now; I'll let you know if I manage to avoid this on a new Ubuntu 22.04 LTS install (but must re-install selenium, geckodriver, and a couple dependencies etc. for that).

@pavpanchekha
Copy link
Contributor

I think the z3 issue has low CPU load because the issue is a change in Z3's text protocol—probably Cassius is waiting for Z3 to say something but Z3 doesn't think there's more to say. It's probably fixable pretty easily.

I'm not sure why the :script lookup is showing up. (To be clear, the "right" fix is to remove the :script line from the captured file, not to remove the get-from call from input.rkt.) There should be code in get_bench.ts that doesn't generate that line unless there are actually scripts to reference.

Both of these issues I'd be happy to merge fixes for, but I'm unlikely to find the time to debug, especially since they don't happen on my machine. (Cassius is no longer actively developed.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants