fork of go-git with some jj specific features
at main 58 lines 1.8 kB view raw
1package diff 2 3import ( 4 "github.com/go-git/go-git/v5/plumbing" 5 "github.com/go-git/go-git/v5/plumbing/filemode" 6) 7 8// Operation defines the operation of a diff item. 9type Operation int 10 11const ( 12 // Equal item represents an equals diff. 13 Equal Operation = iota 14 // Add item represents an insert diff. 15 Add 16 // Delete item represents a delete diff. 17 Delete 18) 19 20// Patch represents a collection of steps to transform several files. 21type Patch interface { 22 // FilePatches returns a slice of patches per file. 23 FilePatches() []FilePatch 24 // Message returns an optional message that can be at the top of the 25 // Patch representation. 26 Message() string 27} 28 29// FilePatch represents the necessary steps to transform one file into another. 30type FilePatch interface { 31 // IsBinary returns true if this patch is representing a binary file. 32 IsBinary() bool 33 // Files returns the from and to Files, with all the necessary metadata 34 // about them. If the patch creates a new file, "from" will be nil. 35 // If the patch deletes a file, "to" will be nil. 36 Files() (from, to File) 37 // Chunks returns a slice of ordered changes to transform "from" File into 38 // "to" File. If the file is a binary one, Chunks will be empty. 39 Chunks() []Chunk 40} 41 42// File contains all the file metadata necessary to print some patch formats. 43type File interface { 44 // Hash returns the File Hash. 45 Hash() plumbing.Hash 46 // Mode returns the FileMode. 47 Mode() filemode.FileMode 48 // Path returns the complete Path to the file, including the filename. 49 Path() string 50} 51 52// Chunk represents a portion of a file transformation into another. 53type Chunk interface { 54 // Content contains the portion of the file. 55 Content() string 56 // Type contains the Operation to do with this Chunk. 57 Type() Operation 58}