summaryrefslogtreecommitdiff
path: root/rules/patch/RULES
blob: 4de3ddbe41699c1773d44985836cb374636d47ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
{ "file":
  { "doc": ["Replace a file, logically in place, by a patched version"]
  , "target_fields": ["src", "patch"]
  , "config_vars": ["PATCH", "ENV"]
  , "field_doc":
    { "src":
      [ "The single source file to patch, typically an explicit file reference."
      ]
    , "patch": ["The patch to apply."]
    }
  , "artifacts_doc":
    ["The patched file, staged to the position the of the original file"]
  , "runfiles_doc": ["Same as artifacts"]
  , "imports":
    { "stage_field": ["./", "..", "stage_singleton_field"]
    , "stage_artifact": ["./", "..", "stage_artifact_to_singleton_field"]
    }
  , "expression":
    { "type": "let*"
    , "bindings":
      [ [ "orig"
        , { "type": "let*"
          , "bindings": [["fieldname", "src"], ["location", "orig"]]
          , "body": {"type": "CALL_EXPRESSION", "name": "stage_field"}
          }
        ]
      , [ "patch"
        , { "type": "let*"
          , "bindings": [["fieldname", "patch"], ["location", "patch"]]
          , "body": {"type": "CALL_EXPRESSION", "name": "stage_field"}
          }
        ]
      , [ "inputs"
        , { "type": "map_union"
          , "$1":
            [{"type": "var", "name": "orig"}, {"type": "var", "name": "patch"}]
          }
        ]
      , [ "patched"
        , { "type": "ACTION"
          , "inputs": {"type": "var", "name": "inputs"}
          , "outs": ["patched"]
          , "cmd":
            [ {"type": "var", "name": "PATCH", "default": "patch"}
            , "-s"
            , "--read-only=ignore"
            , "--follow-symlinks"
            , "-o"
            , "patched"
            , "orig"
            , "patch"
            ]
          }
        ]
      , [ "result"
        , { "type": "let*"
          , "bindings":
            [ ["artifact", {"type": "var", "name": "patched"}]
            , ["fieldname", "src"]
            ]
          , "body": {"type": "CALL_EXPRESSION", "name": "stage_artifact"}
          }
        ]
      ]
    , "body":
      { "type": "RESULT"
      , "artifacts": {"type": "var", "name": "result"}
      , "runfiles": {"type": "var", "name": "result"}
      }
    }
  }
}