This task originally focused narrowly on generated code.
Recently, changesets in Differential have "attributes". There is a large set of behaviors which attributes should expand to handle. Generally, "attributes" mean that arc can specify these behaviors per-changeset with client-side rules, and Differential/Diffusion can optionally also specify these behaviors with rules.
- Generated Code: See PHI64. arc should be able to mark arbitrary changesets as "generated" so they are folded at display time. See PHI1112 for a Go-specific convention.
- Third-Party Code: See PHI1007. This is exactly the same as "generated" code, it just should say "This is third party code..." instead of "This is generated code...".
- Context: See PHI675. By default, arc uploads files with full context. There are several levels of complexity here, but one desirable outcome is likely to let arc selectively send large files with less context (i.e., produce a low-context diff if a change includes a couple of lines in a 10MB text file).
- Tab Widths: See T2495. arc could have rules to say "this file uses 17-space tabstops".
- Syntax Highlighting: arc could have rules to say "by default, highlight this file as though it were python source code".
- Encoding: arc could have rules to say "by default, render this file as encoded with Shift-JIS".
- "Don't Hide this Deleted File": See PHI985, where an install would like Differential to show deleted files by default. Although I don't think this use case is very marginal, it might be reasonable to have an "always show this changeset" flag that's stronger than other behaviors like the "generated" attribute and the default behavior for deleted files. You could then configure arc to set this flag on every changeset if you want "always show deleted files" as a behavior.
- Whitespace: After changes connected to T13161, specifying whitespace behavior no longer makes much sense because whitespace options have been removed.
- Bypass Owners: PHI1061 wants to be able to specify a rule that changes to a specific file by a specific user can bypass audits triggered by Owners.
I think the best clean/general way to accomplish this is to provide "Owners: Skip Audit" and "Owners: Skip Review" attributes, which cause tagged files to be ignored when compiling package lists.I'm less thrilled about this approach after trying to actually do this. Among other reasons, we don't have Changeset objects in PhabricatorRepositoryCommitOwnersWorker. My next-best approach is to try to come at this via T731.