File: diff-methods.Rd

package info (click to toggle)
r-cran-git2r 0.31.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 2,288 kB
  • sloc: ansic: 8,283; sh: 4,116; makefile: 4
file content (174 lines) | stat: -rw-r--r-- 4,905 bytes parent folder | download | duplicates (2)
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/diff.R
\name{diff.git_repository}
\alias{diff.git_repository}
\alias{diff.git_tree}
\title{Changes between commits, trees, working tree, etc.}
\usage{
\method{diff}{git_repository}(
  x,
  index = FALSE,
  as_char = FALSE,
  filename = NULL,
  context_lines = 3,
  interhunk_lines = 0,
  old_prefix = "a",
  new_prefix = "b",
  id_abbrev = NULL,
  path = NULL,
  max_size = NULL,
  ...
)

\method{diff}{git_tree}(
  x,
  new_tree = NULL,
  index = FALSE,
  as_char = FALSE,
  filename = NULL,
  context_lines = 3,
  interhunk_lines = 0,
  old_prefix = "a",
  new_prefix = "b",
  id_abbrev = NULL,
  path = NULL,
  max_size = NULL,
  ...
)
}
\arguments{
\item{x}{A \code{git_repository} object or the old \code{git_tree}
object to compare to.}

\item{index}{\describe{
  \item{\emph{When object equals a git_repository}}{
    Whether to compare the index to HEAD. If FALSE (the default),
    then the working tree is compared to the index.
  }
  \item{\emph{When object equals a git_tree}}{
    Whether to use the working directory (by default), or the index
    (if set to TRUE) in the comparison to \code{object}.
  }
}}

\item{as_char}{logical: should the result be converted to a
character string?. Default is FALSE.}

\item{filename}{If as_char is TRUE, then the diff can be written
to a file with name filename (the file is overwritten if it
exists). Default is NULL.}

\item{context_lines}{The number of unchanged lines that define the
boundary of a hunk (and to display before and after). Defaults
to 3.}

\item{interhunk_lines}{The maximum number of unchanged lines
between hunk boundaries before the hunks will be merged into
one. Defaults to 0.}

\item{old_prefix}{The virtual "directory" prefix for old file
names in hunk headers. Default is "a".}

\item{new_prefix}{The virtual "directory" prefix for new file
names in hunk headers. Defaults to "b".}

\item{id_abbrev}{The abbreviation length to use when formatting
object ids. Defaults to the value of 'core.abbrev' from the
config, or 7 if NULL.}

\item{path}{A character vector of paths / fnmatch patterns to
constrain diff. Default is NULL which include all paths.}

\item{max_size}{A size (in bytes) above which a blob will be
marked as binary automatically; pass a negative value to
disable. Defaults to 512MB when max_size is NULL.}

\item{...}{Not used.}

\item{new_tree}{The new git_tree object to compare, or NULL.  If
NULL, then we use the working directory or the index (see the
\code{index} argument).}
}
\value{
A \code{git_diff} object if as_char is FALSE. If as_char
    is TRUE and filename is NULL, a character string, else NULL.
}
\description{
Changes between commits, trees, working tree, etc.
}
\section{Line endings}{


Different operating systems handle line endings
differently. Windows uses both a carriage-return character and a
linefeed character to represent a newline in a file. While Linux
and macOS use only the linefeed character for a newline in a
file. To avoid problems in your diffs, you can configure Git to
properly handle line endings using the \verb{core.autocrlf}
setting in the Git config file, see the Git documentation
(\url{https://git-scm.com/}).
}

\examples{
\dontrun{
## Initialize a repository
path <- tempfile(pattern="git2r-")
dir.create(path)
repo <- init(path)

## Config user
config(repo, user.name = "Alice", user.email = "alice@example.org")

## Create a file, add, commit
writeLines("Hello world!", file.path(path, "test.txt"))
add(repo, "test.txt")
commit(repo, "Commit message")

## Change the file
writeLines(c("Hello again!", "Here is a second line", "And a third"),
           file.path(path, "test.txt"))

## diff between index and workdir
diff_1 <- diff(repo)
summary(diff_1)
cat(diff(repo, as_char=TRUE))

## Diff between index and HEAD is empty
diff_2 <- diff(repo, index=TRUE)
summary(diff_2)
cat(diff(repo, index=TRUE, as_char=TRUE))

## Diff between tree and working dir, same as diff_1
diff_3 <- diff(tree(commits(repo)[[1]]))
summary(diff_3)
cat(diff(tree(commits(repo)[[1]]), as_char=TRUE))

## Add changes, diff between index and HEAD is the same as diff_1
add(repo, "test.txt")
diff_4 <- diff(repo, index=TRUE)
summary(diff_4)
cat(diff(repo, index=TRUE, as_char=TRUE))

## Diff between tree and index
diff_5 <- diff(tree(commits(repo)[[1]]), index=TRUE)
summary(diff_5)
cat(diff(tree(commits(repo)[[1]]), index=TRUE, as_char=TRUE))

## Diff between two trees
commit(repo, "Second commit")
tree_1 <- tree(commits(repo)[[2]])
tree_2 <- tree(commits(repo)[[1]])
diff_6 <- diff(tree_1, tree_2)
summary(diff_6)
cat(diff(tree_1, tree_2, as_char=TRUE))

## Binary files
set.seed(42)
writeBin(as.raw((sample(0:255, 1000, replace=TRUE))),
         con=file.path(path, "test.bin"))
add(repo, "test.bin")
diff_7 <- diff(repo, index=TRUE)
summary(diff_7)
cat(diff(repo, index=TRUE, as_char=TRUE))
}
}