Below is the file 'revision_parser.mly' from this revision. You can also download the file.
%token NEW_MANIFEST
%token OLD_REVISION
%token OLD_MANIFEST
%token PATCH
%token FROM
%token TO
%token ADD_FILE
%token DELETE_FILE
%token DELETE_DIR
%token RENAME_FILE
%token RENAME_DIR
%token EOF
%token <string> ID
%token <string> STRING
%start revision_set
%type <Revision_types.t> revision_set
%%
revision_set:
NEW_MANIFEST ID edge_list { ($2, Q.to_list $3) }
;
edge_list:
edge { Q.push Q.empty $1 }
| edge_list edge { Q.push $1 $2 }
;
edge:
OLD_REVISION ID
OLD_MANIFEST ID change_set_opt { { Revision_types.old_revision = $2 ;
Revision_types.old_manifest = $4 ;
Revision_types.change_set = Q.to_list $5 } }
;
change_set_opt:
/* empty */ { Q.empty }
| change_set { $1 }
;
change_set:
| change { Q.push Q.empty $1 }
| change_set change { Q.push $1 $2 }
;
change:
| PATCH STRING FROM ID TO ID { Revision_types.PATCH ($2, $4, $6) }
| ADD_FILE STRING { Revision_types.ADD_FILE $2 }
| DELETE_FILE STRING { Revision_types.DELETE_FILE $2 }
| DELETE_DIR STRING { Revision_types.DELETE_DIR $2 }
| RENAME_FILE STRING TO STRING { Revision_types.RENAME_FILE ($2, $4) }
| RENAME_DIR STRING TO STRING { Revision_types.RENAME_DIR ($2, $4) }
;