terminal user interface to jujutsu. Focused on speed and clarity
9
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs

+754 -2282
+732
docs/jj_templating.md
··· 1 + # Templates 2 + 3 + Jujutsu supports a functional language to customize output of commands. 4 + The language consists of literals, keywords, operators, functions, and 5 + methods. 6 + 7 + A couple of `jj` commands accept a template via `-T`/`--template` option. 8 + 9 + ## Keywords 10 + 11 + Keywords represent objects of different types; the types are described in 12 + a follow-up section. In addition to context-specific keywords, the top-level 13 + object can be referenced as `self`. 14 + 15 + ### Commit keywords 16 + 17 + In `jj log` templates, all 0-argument methods of [the `Commit` 18 + type](#commit-type) are available as keywords. For example, `commit_id` is 19 + equivalent to `self.commit_id()`. 20 + 21 + ### Operation keywords 22 + 23 + In `jj op log` templates, all 0-argument methods of [the `Operation` 24 + type](#operation-type) are available as keywords. For example, 25 + `current_operation` is equivalent to `self.current_operation()`. 26 + 27 + ## Operators 28 + 29 + The following operators are supported. 30 + 31 + * `x.f()`: Method call. 32 + * `-x`: Negate integer value. 33 + * `!x`: Logical not. 34 + * `x * y`, `x / y`, `x % y`: Multiplication/division/remainder. Operands must 35 + be `Integer`s. 36 + * `x + y`, `x - y`: Addition/subtraction. Operands must be `Integer`s. 37 + * `x >= y`, `x > y`, `x <= y`, `x < y`: Greater than or equal/greater than/ 38 + lesser than or equal/lesser than. Operands must be `Integer`s. 39 + * `x == y`, `x != y`: Equal/not equal. Operands must be either `Boolean`, 40 + `Integer`, or `String`. 41 + * `x && y`: Logical and, short-circuiting. 42 + * `x || y`: Logical or, short-circuiting. 43 + * `x ++ y`: Concatenate `x` and `y` templates. 44 + 45 + (listed in order of binding strengths) 46 + 47 + ## Global functions 48 + 49 + The following functions are defined. 50 + 51 + * `fill(width: Integer, content: Template) -> Template`: Fill lines at 52 + the given `width`. 53 + * `indent(prefix: Template, content: Template) -> Template`: Indent 54 + non-empty lines by the given `prefix`. 55 + * `pad_start(width: Integer, content: Template, [fill_char: Template])`: Pad (or 56 + right-justify) content by adding leading fill characters. The `content` 57 + shouldn't have newline character. 58 + * `pad_end(width: Integer, content: Template, [fill_char: Template])`: Pad (or 59 + left-justify) content by adding trailing fill characters. The `content` 60 + shouldn't have newline character. 61 + * `pad_centered(width: Integer, content: Template, [fill_char: Template])`: Pad 62 + content by adding both leading and trailing fill characters. If an odd number 63 + of fill characters are needed, the trailing fill will be one longer than the 64 + leading fill. The `content` shouldn't have newline characters. 65 + * `truncate_start(width: Integer, content: Template, [ellipsis: Template])`: 66 + Truncate `content` by removing leading characters. The `content` shouldn't 67 + have newline character. If `ellipsis` is provided and `content` was truncated, 68 + prepend the `ellipsis` to the result. 69 + * `truncate_end(width: Integer, content: Template, [ellipsis: Template])`: 70 + Truncate `content` by removing trailing characters. The `content` shouldn't 71 + have newline character. If `ellipsis` is provided and `content` was truncated, 72 + append the `ellipsis` to the result. 73 + * `hash(content: Stringify) -> String`: 74 + Hash the input and return a hexadecimal string representation of the digest. 75 + * `label(label: Stringify, content: Template) -> Template`: Apply a custom 76 + [color label](#color-labels) to the content. The `label` is evaluated as a 77 + space-separated string. 78 + * `raw_escape_sequence(content: Template) -> Template`: Preserves any escape 79 + sequences in `content` (i.e., bypasses sanitization) and strips labels. 80 + Note: This function is intended for escape sequences and as such, its output 81 + is expected to be invisible / of no display width. Outputting content with 82 + nonzero display width may break wrapping, indentation etc. 83 + * `stringify(content: Stringify) -> String`: Format `content` to string. This 84 + effectively removes color labels. 85 + * `json(value: Serialize) -> String`: Serialize `value` in JSON format. 86 + * `if(condition: Boolean, then: Template, [else: Template]) -> Template`: 87 + Conditionally evaluate `then`/`else` template content. 88 + * `coalesce(content: Template...) -> Template`: Returns the first **non-empty** 89 + content. 90 + * `concat(content: Template...) -> Template`: 91 + Same as `content_1 ++ ... ++ content_n`. 92 + * `join(separator: Template, content: Template...) -> Template`: Insert 93 + `separator` between `content`s. 94 + * `separate(separator: Template, content: Template...) -> Template`: Insert 95 + `separator` between **non-empty** `content`s. 96 + * `surround(prefix: Template, suffix: Template, content: Template) -> Template`: 97 + Surround **non-empty** content with texts such as parentheses. 98 + * `config(name: String) -> ConfigValue`: Look up configuration value by `name`. 99 + 100 + ## Built-in Aliases 101 + 102 + * `hyperlink(url, text)`: Creates a clickable hyperlink using [OSC8 escape sequences](https://github.com/Alhadis/OSC8-Adoption). 103 + The `text` will be displayed and clickable, linking to the given `url` in 104 + terminals that support OSC8 hyperlinks. 105 + 106 + ## Types 107 + 108 + ### `AnnotationLine` type 109 + 110 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 111 + 112 + The following methods are defined. 113 + 114 + * `.commit() -> Commit`: Commit responsible for changing the relevant line. 115 + * `.content() -> Template`: Line content including newline character. 116 + * `.line_number() -> Integer`: 1-based line number. 117 + * `.original_line_number() -> Integer`: 1-based line number in the original commit. 118 + * `.first_line_in_hunk() -> Boolean`: False when the directly preceding line 119 + references the same commit. 120 + 121 + ### `Boolean` type 122 + 123 + _Conversion: `Boolean`: yes, `Serialize`: yes, `Template`: yes_ 124 + 125 + No methods are defined. Can be constructed with `false` or `true` literal. 126 + 127 + ### `Commit` type 128 + 129 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: no_ 130 + 131 + This type cannot be printed. The following methods are defined. 132 + 133 + * `.description() -> String` 134 + * `.trailers() -> List<Trailer>`: The trailers at the end of the commit 135 + description that are formatted as `<key>: <value>`. These are returned in the 136 + same order as they appear in the description, and there may be multiple 137 + `Trailer`s with the same key. 138 + * `.change_id() -> ChangeId` 139 + * `.commit_id() -> CommitId` 140 + * `.parents() -> List<Commit>` 141 + * `.author() -> Signature` 142 + * `.committer() -> Signature` 143 + * `.signature() -> Option<CryptographicSignature>`: Cryptographic signature if 144 + the commit was signed. 145 + * `.mine() -> Boolean`: Commits where the author's email matches the email of 146 + the current user. 147 + * `.working_copies() -> List<WorkspaceRef>`: For multi-workspace repositories, 148 + returns a list of workspace references for each workspace whose working-copy 149 + commit matches the current commit. 150 + * `.current_working_copy() -> Boolean`: True for the working-copy commit of the 151 + current workspace. 152 + * `.bookmarks() -> List<CommitRef>`: Local and remote bookmarks pointing to the 153 + commit. A tracked remote bookmark will be included only if its target is 154 + different from the local one. 155 + * `.local_bookmarks() -> List<CommitRef>`: All local bookmarks pointing to the 156 + commit. 157 + * `.remote_bookmarks() -> List<CommitRef>`: All remote bookmarks pointing to the 158 + commit. 159 + * `.tags() -> List<CommitRef>`: Local and remote tags pointing to the commit. A 160 + tracked remote tag will be included only if its target is different from the 161 + local one. 162 + * `.local_tags() -> List<CommitRef>`: All local tags pointing to the commit. 163 + * `.remote_tags() -> List<CommitRef>`: All remote tags pointing to the commit. 164 + * `.git_refs() -> List<CommitRef>` 165 + * `.git_head() -> Boolean`: True for the Git `HEAD` commit. 166 + * `.divergent() -> Boolean`: True if the commit's change id corresponds to multiple 167 + visible commits. 168 + * `.hidden() -> Boolean`: True if the commit is not visible (a.k.a. abandoned). 169 + * `.immutable() -> Boolean`: True if the commit is included in [the set of 170 + immutable commits](config.md#set-of-immutable-commits). 171 + * `.contained_in(revset: String) -> Boolean`: True if the commit is included in 172 + [the provided revset](revsets.md). 173 + * `.conflict() -> Boolean`: True if the commit contains merge conflicts. 174 + * `.empty() -> Boolean`: True if the commit modifies no files. 175 + * `.diff([files: String]) -> TreeDiff`: Changes from the parents within [the 176 + `files` expression](filesets.md). All files are compared by default, but it is 177 + likely to change in future version to respect the command line path arguments. 178 + * `.files([files: String]) -> List<TreeEntry>`: Files that exist in this commit, 179 + matching [the `files` expression](filesets.md). Use `.diff().files()` to list 180 + changed files. 181 + * `.root() -> Boolean`: True if the commit is the root commit. 182 + 183 + ### `CommitEvolutionEntry` type 184 + 185 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: no_ 186 + 187 + This type cannot be printed. The following methods are defined. 188 + 189 + * `.commit() -> Commit`: New commit. 190 + * `.operation() -> Operation`: Operation where the commit was created or 191 + rewritten. 192 + 193 + ### `ChangeId` type 194 + 195 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 196 + 197 + The following methods are defined. 198 + 199 + * `.normal_hex() -> String`: Normal hex representation (0-9a-f) instead of the 200 + canonical "reversed" (z-k) representation. 201 + * `.short([len: Integer]) -> String` 202 + * `.shortest([min_len: Integer]) -> ShortestIdPrefix`: Shortest unique prefix. 203 + 204 + ### `CommitId` type 205 + 206 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 207 + 208 + The following methods are defined. 209 + 210 + * `.short([len: Integer]) -> String` 211 + * `.shortest([min_len: Integer]) -> ShortestIdPrefix`: Shortest unique prefix. 212 + 213 + ### `CommitRef` type 214 + 215 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 216 + 217 + The following methods are defined. 218 + 219 + * `.name() -> RefSymbol`: Local bookmark or tag name. 220 + * `.remote() -> Option<RefSymbol>`: Remote name if this is a remote ref. 221 + * `.present() -> Boolean`: True if the ref points to any commit. 222 + * `.conflict() -> Boolean`: True if [the bookmark or tag is 223 + conflicted](bookmarks.md#conflicts). 224 + * `.normal_target() -> Option<Commit>`: Target commit if the ref is not 225 + conflicted and points to a commit. 226 + * `.removed_targets() -> List<Commit>`: Old target commits if conflicted. 227 + * `.added_targets() -> List<Commit>`: New target commits. The list usually 228 + contains one "normal" target. 229 + * `.tracked() -> Boolean`: True if the ref is tracked by a local ref. The local 230 + ref might have been deleted (but not pushed yet.) 231 + * `.tracking_present() -> Boolean`: True if the ref is tracked by a local ref, 232 + and if the local ref points to any commit. 233 + * `.tracking_ahead_count() -> SizeHint`: Number of commits ahead of the tracking 234 + local ref. 235 + * `.tracking_behind_count() -> SizeHint`: Number of commits behind of the 236 + tracking local ref. 237 + * `.synced() -> Boolean`: For a local bookmark, true if synced with all tracked 238 + remotes. For a remote bookmark, true if synced with the tracking local 239 + bookmark. 240 + 241 + ### `ConfigValue` type 242 + 243 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 244 + 245 + This type can be printed in TOML syntax. The following methods are defined. 246 + 247 + * `.as_boolean() -> Boolean`: Extract boolean. 248 + * `.as_integer() -> Integer`: Extract integer. 249 + * `.as_string() -> String`: Extract string. This does not convert non-string 250 + value (e.g. integer) to string. 251 + * `.as_string_list() -> List<String>`: Extract list of strings. 252 + 253 + ### `CryptographicSignature` type 254 + 255 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 256 + 257 + The following methods are defined. 258 + 259 + * `.status() -> String`: The signature's status (`"good"`, `"bad"`, `"unknown"`, 260 + `"invalid"`). 261 + * `.key() -> String`: The signature's key id representation (for GPG and SSH, 262 + this is the public key fingerprint). 263 + * `.display() -> String`: The signature's display string (for GPG, this is the 264 + formatted primary user ID; for SSH, this is the principal). 265 + 266 + !!! warning 267 + 268 + Calling any of `.status()`, `.key()`, or `.display()` is slow, as it incurs 269 + the performance cost of verifying the signature (for example shelling out 270 + to `gpg` or `ssh-keygen`). Though consecutive calls will be faster, because 271 + the backend caches the verification result. 272 + 273 + !!! info 274 + 275 + As opposed to calling any of `.status()`, `.key()`, or `.display()`, 276 + checking for signature presence through boolean coercion is fast: 277 + ``` 278 + if(commit.signature(), "commit has a signature", "commit is unsigned") 279 + ``` 280 + 281 + ### `DiffStats` type 282 + 283 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: yes_ 284 + 285 + This type can be printed as a histogram of the changes. The following methods 286 + are defined. 287 + 288 + * `.files() -> List<DiffStatEntry>`: Per-file stats for changed files. 289 + * `.total_added() -> Integer`: Total number of insertions. 290 + * `.total_removed() -> Integer`: Total number of deletions. 291 + 292 + ### `DiffStatEntry` type 293 + 294 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 295 + 296 + This type holds the diff stats per file. The following methods are defined. 297 + 298 + * `.bytes_delta() -> Integer`: The difference in size of the file, in bytes. 299 + * `.lines_added() -> Integer`: Number of lines added. 300 + * `.lines_removed() -> Integer`: Number of lines deleted. 301 + * `.path() -> RepoPath`: Path to the entry. If the entry is a copy/rename, this 302 + points to the target (or right) entry. 303 + * `.status() -> String`: One of `"modified"`, `"added"`, `"removed"`, `"copied"`, or `"renamed"`. 304 + * `.status_char() -> String`: One of `"M"` (modified), `"A"` (added), `"D"` (removed), 305 + `"C"` (copied), or `"R"` (renamed). 306 + 307 + ### `Email` type 308 + 309 + _Conversion: `Boolean`: yes, `Serialize`: yes, `Template`: yes_ 310 + 311 + The email field of a signature may or may not look like an email address. It may 312 + be empty, may not contain the symbol `@`, and could in principle contain 313 + multiple `@`s. 314 + 315 + The following methods are defined. 316 + 317 + * `.local() -> String`: the part of the email before the first `@`, usually the 318 + username. 319 + * `.domain() -> String`: the part of the email after the first `@` or the empty 320 + string. 321 + 322 + ### `Integer` type 323 + 324 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 325 + 326 + No methods are defined. 327 + 328 + ### `List` type 329 + 330 + _Conversion: `Boolean`: yes, `Serialize`: maybe, `Template`: maybe_ 331 + 332 + A list can be implicitly converted to `Boolean`. The following methods are 333 + defined. 334 + 335 + * `.len() -> Integer`: Number of elements in the list. 336 + * `.join(separator: Template) -> Template`: Concatenate elements with 337 + the given `separator`. 338 + * `.filter(|item| expression) -> List`: Filter list elements by predicate 339 + `expression`. Example: `description.lines().filter(|s| s.contains("#"))` 340 + * `.map(|item| expression) -> ListTemplate`: Apply template `expression` 341 + to each element. Example: `parents.map(|c| c.commit_id().short())` 342 + * `.any(|item| expression) -> Boolean`: Returns true if any element satisfies 343 + the predicate `expression`. Example: `parents.any(|c| c.description().contains("fix"))` 344 + * `.all(|item| expression) -> Boolean`: Returns true if all elements satisfy 345 + the predicate `expression`. Example: `parents.all(|c| c.mine())` 346 + 347 + ### `List<Trailer>` type 348 + 349 + The following methods are defined. See also the `List` type. 350 + 351 + * `.contains_key(key: Stringify) -> Boolean`: True if the commit description 352 + contains at least one trailer with the key `key`. 353 + 354 + ### `ListTemplate` type 355 + 356 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: yes_ 357 + 358 + The following methods are defined. See also the `List` type. 359 + 360 + * `.join(separator: Template) -> Template` 361 + 362 + ### `Operation` type 363 + 364 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: no_ 365 + 366 + This type cannot be printed. The following methods are defined. 367 + 368 + * `.current_operation() -> Boolean` 369 + * `.description() -> String` 370 + * `.id() -> OperationId` 371 + * `.tags() -> String` 372 + * `.time() -> TimestampRange` 373 + * `.user() -> String` 374 + * `.snapshot() -> Boolean`: True if the operation is a snapshot operation. 375 + * `.root() -> Boolean`: True if the operation is the root operation. 376 + * `.parents() -> List<Operation>` 377 + 378 + ### `OperationId` type 379 + 380 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 381 + 382 + The following methods are defined. 383 + 384 + * `.short([len: Integer]) -> String` 385 + 386 + ### `Option` type 387 + 388 + _Conversion: `Boolean`: yes, `Serialize`: maybe, `Template`: maybe_ 389 + 390 + An option can be implicitly converted to `Boolean` denoting whether the 391 + contained value is set. If set, all methods of the contained value can be 392 + invoked. If not set, an error will be reported inline on method call. 393 + 394 + On comparison between two optional values or optional and non-optional values, 395 + unset value is not an error. Unset value is considered less than any set values. 396 + 397 + ### `RefSymbol` type 398 + 399 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 400 + 401 + [A `String` type](#string-type), but is formatted as revset symbol by quoting 402 + and escaping if necessary. Unlike strings, this cannot be implicitly converted 403 + to `Boolean`. 404 + 405 + ### `RepoPath` type 406 + 407 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 408 + 409 + A slash-separated path relative to the repository root. The following methods 410 + are defined. 411 + 412 + * `.absolute() -> String`: Format as absolute path using platform-native 413 + separator. 414 + * `.display() -> String`: Format path for display. The formatted path uses 415 + platform-native separator, and is relative to the current working directory. 416 + * `.parent() -> Option<RepoPath>`: Parent directory path. 417 + 418 + ### `Serialize` type 419 + 420 + An expression that can be serialized in machine-readable format such as JSON. 421 + 422 + !!! note 423 + 424 + Field names and value types in the serialized output are usually stable 425 + across jj versions, but the backward compatibility isn't guaranteed. If the 426 + underlying data model is updated, the serialized output may change. 427 + 428 + ### `ShortestIdPrefix` type 429 + 430 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 431 + 432 + The following methods are defined. 433 + 434 + * `.prefix() -> String` 435 + * `.rest() -> String` 436 + * `.upper() -> ShortestIdPrefix` 437 + * `.lower() -> ShortestIdPrefix` 438 + 439 + ### `Signature` type 440 + 441 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 442 + 443 + The following methods are defined. 444 + 445 + * `.name() -> String` 446 + * `.email() -> Email` 447 + * `.timestamp() -> Timestamp` 448 + 449 + ### `SizeHint` type 450 + 451 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: no_ 452 + 453 + This type cannot be printed. The following methods are defined. 454 + 455 + * `.lower() -> Integer`: Lower bound. 456 + * `.upper() -> Option<Integer>`: Upper bound if known. 457 + * `.exact() -> Option<Integer>`: Exact value if upper bound is known and it 458 + equals to the lower bound. 459 + * `.zero() -> Boolean`: True if upper bound is known and is `0`. Equivalent to 460 + `.upper() == 0`. 461 + 462 + ### `String` type 463 + 464 + _Conversion: `Boolean`: yes, `Serialize`: yes, `Template`: yes_ 465 + 466 + A string can be implicitly converted to `Boolean`. The following methods are 467 + defined. 468 + 469 + * `.len() -> Integer`: Length in UTF-8 bytes. 470 + * `.contains(needle: Stringify) -> Boolean`: Whether the string contains the 471 + provided stringifiable value as a substring. 472 + * `.match(needle: StringPattern) -> String`: Extracts 473 + the first matching part of the string for the given pattern. 474 + 475 + An empty string is returned if there is no match. 476 + * `.replace(pattern: StringPattern, replacement: Stringify, [limit: Integer]) -> String`: 477 + Replace occurrences of the given `pattern` with the `replacement` string. 478 + 479 + By default, all occurrences are replaced. If `limit` is specified, at most 480 + that many occurrences are replaced. 481 + 482 + Supports capture groups in patterns using `$0` (entire match), `$1`, `$2` etc. 483 + * `.first_line() -> String` 484 + * `.lines() -> List<String>`: Split into lines excluding newline characters. 485 + * `.split(separator: StringPattern, [limit: Integer]) -> List<String>`: Split into 486 + substrings by the given `separator` pattern. If `limit` is specified, it 487 + determines the maximum number of elements in the result, with the remainder 488 + of the string returned as the final element. A `limit` of 0 returns an empty list. 489 + * `.upper() -> String` 490 + * `.lower() -> String` 491 + * `.starts_with(needle: Stringify) -> Boolean` 492 + * `.ends_with(needle: Stringify) -> Boolean` 493 + * `.remove_prefix(needle: Stringify) -> String`: Removes the passed prefix, if 494 + present. 495 + * `.remove_suffix(needle: Stringify) -> String`: Removes the passed suffix, if 496 + present. 497 + * `.trim() -> String`: Removes leading and trailing whitespace 498 + * `.trim_start() -> String`: Removes leading whitespace 499 + * `.trim_end() -> String`: Removes trailing whitespace 500 + * `.substr(start: Integer, end: Integer) -> String`: Extract substring. The 501 + `start`/`end` indices should be specified in UTF-8 bytes. Indices are 0-based 502 + and `end` is exclusive. Negative values count from the end of the string, 503 + with `-1` being the last byte. If the `start` index is in the middle of a UTF-8 504 + codepoint, the codepoint is fully part of the result. If the `end` index is in 505 + the middle of a UTF-8 codepoint, the codepoint is not part of the result. 506 + * `.escape_json() -> String`: Serializes the string in JSON format. This 507 + function is useful for making machine-readable templates. For example, you 508 + can use it in a template like `'{ "foo": ' ++ foo.escape_json() ++ ' }'` to 509 + return a JSON/JSONL. 510 + 511 + #### String literals 512 + 513 + String literals must be surrounded by single or double quotes (`'` or `"`). 514 + A double-quoted string literal supports the following escape sequences: 515 + 516 + * `\"`: double quote 517 + * `\\`: backslash 518 + * `\t`: horizontal tab 519 + * `\r`: carriage return 520 + * `\n`: new line 521 + * `\0`: null 522 + * `\e`: escape (i.e., `\x1b`) 523 + * `\xHH`: byte with hex value `HH` 524 + 525 + Other escape sequences are not supported. Any UTF-8 characters are allowed 526 + inside a string literal, with two exceptions: unescaped `"`-s and uses of `\` 527 + that don't form a valid escape sequence. 528 + 529 + A single-quoted string literal has no escape syntax. `'` can't be expressed 530 + inside a single-quoted string literal. 531 + 532 + ### `Stringify` type 533 + 534 + An expression that can be converted to a `String`. 535 + 536 + Any types that can be converted to `Template` can also be `Stringify`. Unlike 537 + `Template`, color labels are stripped. 538 + 539 + ### `StringPattern` type 540 + 541 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 542 + 543 + These are the exact same as the [String pattern type] in revsets, except that 544 + quotes are mandatory. 545 + 546 + Literal strings may be used, which are interpreted as case-sensitive substring 547 + matching. 548 + 549 + Currently `StringPattern` values cannot be passed around as values and may 550 + only occur directly in the call site they are used in. 551 + 552 + [String pattern type]: revsets.md#string-patterns 553 + 554 + ### `Template` type 555 + 556 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: yes_ 557 + 558 + Most types can be implicitly converted to `Template`. No methods are defined. 559 + 560 + ### `Timestamp` type 561 + 562 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 563 + 564 + The following methods are defined. 565 + 566 + * `.ago() -> String`: Format as relative timestamp. 567 + * `.format(format: String) -> String`: Format with [the specified strftime-like 568 + format string](https://docs.rs/chrono/latest/chrono/format/strftime/). 569 + * `.utc() -> Timestamp`: Convert timestamp into UTC timezone. 570 + * `.local() -> Timestamp`: Convert timestamp into local timezone. 571 + * `.after(date: String) -> Boolean`: True if the timestamp is exactly at or 572 + after the given date. Supported date formats are the same as the revset 573 + [Date pattern type]. 574 + * `.before(date: String) -> Boolean`: True if the timestamp is before, but 575 + not including, the given date. Supported date formats are the same as the 576 + revset [Date pattern type]. 577 + 578 + [Date pattern type]: revsets.md#date-patterns 579 + 580 + ### `TimestampRange` type 581 + 582 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 583 + 584 + The following methods are defined. 585 + 586 + * `.start() -> Timestamp` 587 + * `.end() -> Timestamp` 588 + * `.duration() -> String` 589 + 590 + ### `Trailer` type 591 + 592 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: yes_ 593 + 594 + The following methods are defined. 595 + 596 + * `.key() -> String` 597 + * `.value() -> String` 598 + 599 + ### `TreeDiff` type 600 + 601 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 602 + 603 + This type cannot be printed. The following methods are defined. 604 + 605 + * `.files() -> List<TreeDiffEntry>`: Changed files. 606 + * `.color_words([context: Integer]) -> Template`: Format as a word-level diff 607 + with changes indicated only by color. 608 + * `.git([context: Integer]) -> Template`: Format as a Git diff. 609 + * `.stat([width: Integer]) -> DiffStats`: Calculate stats of changed lines. 610 + * `.summary() -> Template`: Format as a list of status code and path pairs. 611 + 612 + ### `TreeDiffEntry` type 613 + 614 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 615 + 616 + This type cannot be printed. The following methods are defined. 617 + 618 + * `.path() -> RepoPath`: Path to the entry. If the entry is a copy/rename, this 619 + points to the target (or right) entry. 620 + * `.status() -> String`: One of `"modified"`, `"added"`, `"removed"`, 621 + `"copied"`, or `"renamed"`. 622 + * `.source() -> TreeEntry`: The source (or left) entry. 623 + * `.target() -> TreeEntry`: The target (or right) entry. 624 + 625 + ### `TreeEntry` type 626 + 627 + _Conversion: `Boolean`: no, `Serialize`: no, `Template`: no_ 628 + 629 + This type cannot be printed. The following methods are defined. 630 + 631 + * `.path() -> RepoPath`: Path to the entry. 632 + * `.conflict() -> Boolean`: True if the entry is a merge conflict. 633 + * `.file_type() -> String`: One of `"file"`, `"symlink"`, `"tree"`, 634 + `"git-submodule"`, or `"conflict"`. 635 + * `.executable() -> Boolean`: True if the entry is an executable file. 636 + 637 + ### `WorkspaceRef` type 638 + 639 + _Conversion: `Boolean`: no, `Serialize`: yes, `Template`: yes_ 640 + 641 + The following methods are defined. 642 + 643 + * `.name() -> RefSymbol`: Returns the workspace name as a symbol. 644 + * `.target() -> Commit`: Returns the working-copy commit of this workspace. 645 + 646 + ## Color labels 647 + 648 + You can [customize the output colors][config-colors] by using color labels. `jj` 649 + adds some labels automatically; they can also be added manually. 650 + 651 + Template fragments are usually **automatically** labeled with the command name, 652 + the context (or the top-level object), and the method names. For example, the 653 + following template is labeled as `op_log operation id short` automatically: 654 + 655 + ```sh 656 + jj op log -T 'self.id().short()' 657 + ``` 658 + 659 + The exact names of such labels are often straightforward, but are not currently 660 + documented. You can discover the actual label names used with the 661 + `--color=debug` option, e.g. 662 + 663 + ```sh 664 + jj op log -T 'self.id().short()' --color=debug 665 + ``` 666 + 667 + Additionally, you can **manually** insert arbitrary labels using the 668 + `label(label, content)` function. For example, 669 + 670 + ```sh 671 + jj op log -T '"ID: " ++ self.id().short().substr(0, 1) ++ label("id short", "<redacted>")' 672 + ``` 673 + 674 + will print "ID:" in the default style, and the string `<redacted>` in the same 675 + style as the first character of the id. It would also be fine to use an 676 + arbitrary template instead of the string `"<redacted>"`, possibly including 677 + nested invocations of `label()`. 678 + 679 + You are free to use custom label names as well. This will only have a visible 680 + effect if you also [customize their colors][config-colors] explicitly. 681 + 682 + [config-colors]: config.md#custom-colors-and-styles 683 + 684 + ## Configuration 685 + 686 + The default templates and aliases() are defined in the `[templates]` and 687 + `[template-aliases]` sections of the config respectively. The exact definitions 688 + can be seen in the [`cli/src/config/templates.toml`][1] file in jj's source 689 + tree. 690 + 691 + [1]: https://github.com/jj-vcs/jj/blob/main/cli/src/config/templates.toml 692 + 693 + <!--- TODO: Find a way to embed the default config files in the docs --> 694 + 695 + New keywords and functions can be defined as aliases, by using any 696 + combination of the predefined keywords/functions and other aliases. 697 + 698 + Alias functions can be overloaded by the number of parameters. However, builtin 699 + functions will be shadowed by name, and can't co-exist with aliases. 700 + 701 + For example: 702 + 703 + ```toml 704 + [template-aliases] 705 + 'commit_change_ids' = ''' 706 + concat( 707 + format_field("Commit ID", commit_id), 708 + format_field("Change ID", change_id), 709 + ) 710 + ''' 711 + 'format_field(key, value)' = 'key ++ ": " ++ value ++ "\n"' 712 + ``` 713 + 714 + ## Examples 715 + 716 + Get short commit IDs of the working-copy parents: 717 + 718 + ```sh 719 + jj log --no-graph -r @ -T 'parents.map(|c| c.commit_id().short()).join(",")' 720 + ``` 721 + 722 + Show machine-readable list of full commit and change IDs: 723 + 724 + ```sh 725 + jj log --no-graph -T 'commit_id ++ " " ++ change_id ++ "\n"' 726 + ``` 727 + 728 + Print the description of the current commit, defaulting to `(no description set)`: 729 + 730 + ```sh 731 + jj log -r @ --no-graph -T 'coalesce(description, "(no description set)\n")' 732 + ```
-2282
test
··· 1 - setting value 2 - finished setting value 3 - setting value 4 - finished setting value 5 - setting value 6 - finished setting value 7 - setting value 8 - finished setting value 9 - setting value 10 - finished setting value 11 - setting value 12 - finished setting value 13 - setting value 14 - finished setting value 15 - setting value 16 - finished setting value 17 - setting value 18 - finished setting value 19 - setting value 20 - finished setting value 21 - setting value 22 - finished setting value 23 - setting value 24 - finished setting value 25 - setting value 26 - finished setting value 27 - setting value 28 - finished setting value 29 - setting value 30 - finished setting value 31 - setting value 32 - finished setting value 33 - setting value 34 - finished setting value 35 - setting value 36 - finished setting value 37 - setting value 38 - finished setting value 39 - setting value 40 - finished setting value 41 - setting value 42 - finished setting value 43 - setting value 44 - finished setting value 45 - setting value 46 - finished setting value 47 - setting value 48 - finished setting value 49 - setting value 50 - finished setting value 51 - setting value 52 - finished setting value 53 - setting value 54 - finished setting value 55 - setting value 56 - finished setting value 57 - setting value 58 - finished setting value 59 - setting value 60 - finished setting value 61 - setting value 62 - setting value 63 - finished setting value 64 - finished setting value 65 - setting value 66 - finished setting value 67 - setting value 68 - finished setting value 69 - setting value 70 - finished setting value 71 - setting value 72 - finished setting value 73 - setting value 74 - finished setting value 75 - setting value 76 - finished setting value 77 - setting value 78 - finished setting value 79 - setting value 80 - finished setting value 81 - setting value 82 - finished setting value 83 - setting value 84 - finished setting value 85 - setting value 86 - finished setting value 87 - setting value 88 - finished setting value 89 - setting value 90 - finished setting value 91 - setting value 92 - finished setting value 93 - setting value 94 - finished setting value 95 - setting value 96 - finished setting value 97 - setting value 98 - finished setting value 99 - setting value 100 - finished setting value 101 - setting value 102 - finished setting value 103 - setting value 104 - finished setting value 105 - setting value 106 - finished setting value 107 - setting value 108 - finished setting value 109 - setting value 110 - finished setting value 111 - setting value 112 - finished setting value 113 - setting value 114 - finished setting value 115 - setting value 116 - finished setting value 117 - setting value 118 - finished setting value 119 - setting value 120 - finished setting value 121 - setting value 122 - finished setting value 123 - setting value 124 - finished setting value 125 - setting value 126 - finished setting value 127 - setting value 128 - finished setting value 129 - setting value 130 - finished setting value 131 - setting value 132 - finished setting value 133 - setting value 134 - finished setting value 135 - setting value 136 - finished setting value 137 - setting value 138 - finished setting value 139 - setting value 140 - finished setting value 141 - setting value 142 - finished setting value 143 - setting value 144 - finished setting value 145 - setting value 146 - finished setting value 147 - setting value 148 - finished setting value 149 - setting value 150 - finished setting value 151 - setting value 152 - finished setting value 153 - setting value 154 - finished setting value 155 - setting value 156 - finished setting value 157 - setting value 158 - finished setting value 159 - setting value 160 - finished setting value 161 - setting value 162 - finished setting value 163 - setting value 164 - finished setting value 165 - setting value 166 - finished setting value 167 - setting value 168 - finished setting value 169 - setting value 170 - finished setting value 171 - setting value 172 - finished setting value 173 - setting value 174 - finished setting value 175 - setting value 176 - finished setting value 177 - setting value 178 - finished setting value 179 - setting value 180 - finished setting value 181 - setting value 182 - finished setting value 183 - setting value 184 - finished setting value 185 - setting value 186 - finished setting value 187 - setting value 188 - finished setting value 189 - setting value 190 - finished setting value 191 - setting value 192 - finished setting value 193 - setting value 194 - finished setting value 195 - setting value 196 - finished setting value 197 - setting value 198 - finished setting value 199 - setting value 200 - finished setting value 201 - setting value 202 - finished setting value 203 - setting value 204 - finished setting value 205 - setting value 206 - finished setting value 207 - setting value 208 - finished setting value 209 - setting value 210 - finished setting value 211 - setting value 212 - finished setting value 213 - setting value 214 - finished setting value 215 - setting value 216 - finished setting value 217 - setting value 218 - finished setting value 219 - setting value 220 - finished setting value 221 - setting value 222 - finished setting value 223 - setting value 224 - finished setting value 225 - setting value 226 - finished setting value 227 - setting value 228 - finished setting value 229 - setting value 230 - finished setting value 231 - setting value 232 - finished setting value 233 - setting value 234 - finished setting value 235 - setting value 236 - finished setting value 237 - setting value 238 - finished setting value 239 - setting value 240 - finished setting value 241 - setting value 242 - finished setting value 243 - setting value 244 - finished setting value 245 - setting value 246 - finished setting value 247 - setting value 248 - finished setting value 249 - setting value 250 - finished setting value 251 - setting value 252 - finished setting value 253 - setting value 254 - finished setting value 255 - setting value 256 - finished setting value 257 - setting value 258 - finished setting value 259 - setting value 260 - finished setting value 261 - setting value 262 - finished setting value 263 - setting value 264 - setting value 265 - finished setting value 266 - finished setting value 267 - setting value 268 - finished setting value 269 - setting value 270 - finished setting value 271 - setting value 272 - finished setting value 273 - setting value 274 - finished setting value 275 - setting value 276 - finished setting value 277 - setting value 278 - finished setting value 279 - setting value 280 - finished setting value 281 - setting value 282 - finished setting value 283 - setting value 284 - finished setting value 285 - setting value 286 - finished setting value 287 - setting value 288 - finished setting value 289 - setting value 290 - finished setting value 291 - setting value 292 - finished setting value 293 - setting value 294 - finished setting value 295 - setting value 296 - finished setting value 297 - setting value 298 - finished setting value 299 - setting value 300 - finished setting value 301 - setting value 302 - finished setting value 303 - setting value 304 - finished setting value 305 - setting value 306 - finished setting value 307 - setting value 308 - finished setting value 309 - setting value 310 - finished setting value 311 - setting value 312 - finished setting value 313 - setting value 314 - finished setting value 315 - setting value 316 - finished setting value 317 - setting value 318 - finished setting value 319 - setting value 320 - finished setting value 321 - setting value 322 - finished setting value 323 - setting value 324 - finished setting value 325 - setting value 326 - finished setting value 327 - setting value 328 - finished setting value 329 - setting value 330 - finished setting value 331 - setting value 332 - finished setting value 333 - setting value 334 - finished setting value 335 - setting value 336 - finished setting value 337 - setting value 338 - finished setting value 339 - setting value 340 - finished setting value 341 - setting value 342 - finished setting value 343 - setting value 344 - finished setting value 345 - setting value 346 - finished setting value 347 - setting value 348 - finished setting value 349 - setting value 350 - finished setting value 351 - setting value 352 - finished setting value 353 - setting value 354 - finished setting value 355 - setting value 356 - finished setting value 357 - setting value 358 - finished setting value 359 - setting value 360 - finished setting value 361 - setting value 362 - finished setting value 363 - setting value 364 - finished setting value 365 - setting value 366 - finished setting value 367 - setting value 368 - finished setting value 369 - setting value 370 - finished setting value 371 - setting value 372 - finished setting value 373 - setting value 374 - finished setting value 375 - setting value 376 - finished setting value 377 - setting value 378 - finished setting value 379 - setting value 380 - finished setting value 381 - setting value 382 - finished setting value 383 - setting value 384 - finished setting value 385 - setting value 386 - finished setting value 387 - setting value 388 - finished setting value 389 - setting value 390 - finished setting value 391 - setting value 392 - finished setting value 393 - setting value 394 - finished setting value 395 - setting value 396 - finished setting value 397 - setting value 398 - finished setting value 399 - setting value 400 - finished setting value 401 - setting value 402 - finished setting value 403 - setting value 404 - finished setting value 405 - setting value 406 - finished setting value 407 - setting value 408 - finished setting value 409 - setting value 410 - finished setting value 411 - setting value 412 - finished setting value 413 - setting value 414 - finished setting value 415 - setting value 416 - finished setting value 417 - setting value 418 - finished setting value 419 - setting value 420 - finished setting value 421 - setting value 422 - finished setting value 423 - setting value 424 - finished setting value 425 - setting value 426 - finished setting value 427 - setting value 428 - finished setting value 429 - setting value 430 - finished setting value 431 - setting value 432 - finished setting value 433 - setting value 434 - finished setting value 435 - setting value 436 - finished setting value 437 - setting value 438 - finished setting value 439 - setting value 440 - finished setting value 441 - setting value 442 - finished setting value 443 - setting value 444 - finished setting value 445 - setting value 446 - finished setting value 447 - setting value 448 - finished setting value 449 - setting value 450 - finished setting value 451 - setting value 452 - finished setting value 453 - setting value 454 - finished setting value 455 - setting value 456 - finished setting value 457 - setting value 458 - finished setting value 459 - setting value 460 - finished setting value 461 - setting value 462 - finished setting value 463 - setting value 464 - finished setting value 465 - setting value 466 - finished setting value 467 - setting value 468 - finished setting value 469 - setting value 470 - finished setting value 471 - setting value 472 - finished setting value 473 - setting value 474 - finished setting value 475 - setting value 476 - finished setting value 477 - setting value 478 - finished setting value 479 - setting value 480 - finished setting value 481 - setting value 482 - finished setting value 483 - setting value 484 - finished setting value 485 - setting value 486 - finished setting value 487 - setting value 488 - finished setting value 489 - setting value 490 - finished setting value 491 - setting value 492 - finished setting value 493 - setting value 494 - finished setting value 495 - setting value 496 - finished setting value 497 - setting value 498 - finished setting value 499 - setting value 500 - finished setting value 501 - setting value 502 - finished setting value 503 - setting value 504 - finished setting value 505 - setting value 506 - finished setting value 507 - setting value 508 - finished setting value 509 - setting value 510 - finished setting value 511 - setting value 512 - finished setting value 513 - setting value 514 - finished setting value 515 - setting value 516 - finished setting value 517 - setting value 518 - finished setting value 519 - setting value 520 - finished setting value 521 - setting value 522 - finished setting value 523 - setting value 524 - finished setting value 525 - setting value 526 - finished setting value 527 - setting value 528 - finished setting value 529 - setting value 530 - finished setting value 531 - setting value 532 - finished setting value 533 - setting value 534 - finished setting value 535 - setting value 536 - finished setting value 537 - setting value 538 - finished setting value 539 - setting value 540 - finished setting value 541 - setting value 542 - finished setting value 543 - setting value 544 - finished setting value 545 - setting value 546 - finished setting value 547 - setting value 548 - finished setting value 549 - setting value 550 - finished setting value 551 - setting value 552 - finished setting value 553 - setting value 554 - finished setting value 555 - setting value 556 - finished setting value 557 - setting value 558 - finished setting value 559 - setting value 560 - finished setting value 561 - setting value 562 - finished setting value 563 - setting value 564 - finished setting value 565 - setting value 566 - finished setting value 567 - setting value 568 - finished setting value 569 - setting value 570 - finished setting value 571 - setting value 572 - finished setting value 573 - setting value 574 - finished setting value 575 - setting value 576 - finished setting value 577 - setting value 578 - finished setting value 579 - setting value 580 - finished setting value 581 - setting value 582 - finished setting value 583 - setting value 584 - finished setting value 585 - setting value 586 - finished setting value 587 - setting value 588 - finished setting value 589 - setting value 590 - finished setting value 591 - setting value 592 - finished setting value 593 - setting value 594 - finished setting value 595 - setting value 596 - finished setting value 597 - setting value 598 - finished setting value 599 - setting value 600 - finished setting value 601 - setting value 602 - finished setting value 603 - setting value 604 - finished setting value 605 - setting value 606 - finished setting value 607 - setting value 608 - finished setting value 609 - setting value 610 - finished setting value 611 - setting value 612 - finished setting value 613 - setting value 614 - finished setting value 615 - setting value 616 - setting value 617 - finished setting value 618 - setting value 619 - finished setting value 620 - finished setting value 621 - setting value 622 - finished setting value 623 - setting value 624 - finished setting value 625 - setting value 626 - finished setting value 627 - setting value 628 - finished setting value 629 - setting value 630 - finished setting value 631 - setting value 632 - finished setting value 633 - setting value 634 - finished setting value 635 - setting value 636 - finished setting value 637 - setting value 638 - finished setting value 639 - setting value 640 - finished setting value 641 - setting value 642 - finished setting value 643 - setting value 644 - finished setting value 645 - setting value 646 - finished setting value 647 - setting value 648 - finished setting value 649 - setting value 650 - finished setting value 651 - setting value 652 - finished setting value 653 - setting value 654 - finished setting value 655 - setting value 656 - finished setting value 657 - setting value 658 - finished setting value 659 - setting value 660 - finished setting value 661 - setting value 662 - finished setting value 663 - setting value 664 - finished setting value 665 - setting value 666 - finished setting value 667 - setting value 668 - finished setting value 669 - setting value 670 - finished setting value 671 - setting value 672 - finished setting value 673 - setting value 674 - finished setting value 675 - setting value 676 - finished setting value 677 - setting value 678 - finished setting value 679 - setting value 680 - finished setting value 681 - setting value 682 - finished setting value 683 - setting value 684 - finished setting value 685 - setting value 686 - finished setting value 687 - setting value 688 - finished setting value 689 - setting value 690 - finished setting value 691 - setting value 692 - finished setting value 693 - setting value 694 - finished setting value 695 - setting value 696 - finished setting value 697 - setting value 698 - finished setting value 699 - setting value 700 - finished setting value 701 - setting value 702 - finished setting value 703 - setting value 704 - finished setting value 705 - setting value 706 - finished setting value 707 - setting value 708 - finished setting value 709 - setting value 710 - finished setting value 711 - setting value 712 - finished setting value 713 - setting value 714 - finished setting value 715 - setting value 716 - finished setting value 717 - setting value 718 - finished setting value 719 - setting value 720 - finished setting value 721 - setting value 722 - finished setting value 723 - setting value 724 - finished setting value 725 - setting value 726 - finished setting value 727 - setting value 728 - finished setting value 729 - setting value 730 - finished setting value 731 - setting value 732 - finished setting value 733 - setting value 734 - finished setting value 735 - setting value 736 - finished setting value 737 - setting value 738 - finished setting value 739 - setting value 740 - finished setting value 741 - setting value 742 - finished setting value 743 - setting value 744 - finished setting value 745 - setting value 746 - finished setting value 747 - setting value 748 - finished setting value 749 - setting value 750 - finished setting value 751 - setting value 752 - finished setting value 753 - setting value 754 - finished setting value 755 - setting value 756 - finished setting value 757 - setting value 758 - finished setting value 759 - setting value 760 - finished setting value 761 - setting value 762 - finished setting value 763 - setting value 764 - finished setting value 765 - setting value 766 - finished setting value 767 - setting value 768 - finished setting value 769 - setting value 770 - finished setting value 771 - setting value 772 - finished setting value 773 - setting value 774 - finished setting value 775 - setting value 776 - finished setting value 777 - setting value 778 - finished setting value 779 - setting value 780 - finished setting value 781 - setting value 782 - finished setting value 783 - setting value 784 - finished setting value 785 - setting value 786 - finished setting value 787 - setting value 788 - finished setting value 789 - setting value 790 - finished setting value 791 - setting value 792 - finished setting value 793 - setting value 794 - finished setting value 795 - setting value 796 - finished setting value 797 - setting value 798 - finished setting value 799 - setting value 800 - finished setting value 801 - setting value 802 - finished setting value 803 - setting value 804 - finished setting value 805 - setting value 806 - finished setting value 807 - setting value 808 - finished setting value 809 - setting value 810 - finished setting value 811 - setting value 812 - setting value 813 - finished setting value 814 - finished setting value 815 - setting value 816 - finished setting value 817 - setting value 818 - finished setting value 819 - setting value 820 - finished setting value 821 - setting value 822 - finished setting value 823 - setting value 824 - finished setting value 825 - setting value 826 - finished setting value 827 - setting value 828 - finished setting value 829 - setting value 830 - finished setting value 831 - setting value 832 - finished setting value 833 - setting value 834 - finished setting value 835 - setting value 836 - finished setting value 837 - setting value 838 - finished setting value 839 - setting value 840 - finished setting value 841 - setting value 842 - finished setting value 843 - setting value 844 - finished setting value 845 - setting value 846 - finished setting value 847 - setting value 848 - finished setting value 849 - setting value 850 - finished setting value 851 - setting value 852 - finished setting value 853 - setting value 854 - finished setting value 855 - setting value 856 - finished setting value 857 - setting value 858 - finished setting value 859 - setting value 860 - finished setting value 861 - setting value 862 - finished setting value 863 - setting value 864 - finished setting value 865 - setting value 866 - finished setting value 867 - setting value 868 - finished setting value 869 - setting value 870 - finished setting value 871 - setting value 872 - finished setting value 873 - setting value 874 - finished setting value 875 - setting value 876 - finished setting value 877 - setting value 878 - finished setting value 879 - setting value 880 - finished setting value 881 - setting value 882 - finished setting value 883 - setting value 884 - finished setting value 885 - setting value 886 - finished setting value 887 - setting value 888 - finished setting value 889 - setting value 890 - finished setting value 891 - setting value 892 - finished setting value 893 - setting value 894 - finished setting value 895 - setting value 896 - finished setting value 897 - setting value 898 - finished setting value 899 - setting value 900 - finished setting value 901 - setting value 902 - finished setting value 903 - setting value 904 - finished setting value 905 - setting value 906 - finished setting value 907 - setting value 908 - finished setting value 909 - setting value 910 - finished setting value 911 - setting value 912 - finished setting value 913 - setting value 914 - finished setting value 915 - setting value 916 - finished setting value 917 - setting value 918 - finished setting value 919 - setting value 920 - finished setting value 921 - setting value 922 - finished setting value 923 - setting value 924 - finished setting value 925 - setting value 926 - finished setting value 927 - setting value 928 - finished setting value 929 - setting value 930 - finished setting value 931 - setting value 932 - finished setting value 933 - setting value 934 - finished setting value 935 - setting value 936 - finished setting value 937 - setting value 938 - finished setting value 939 - setting value 940 - finished setting value 941 - setting value 942 - finished setting value 943 - setting value 944 - finished setting value 945 - setting value 946 - finished setting value 947 - setting value 948 - finished setting value 949 - setting value 950 - finished setting value 951 - setting value 952 - finished setting value 953 - setting value 954 - finished setting value 955 - setting value 956 - finished setting value 957 - setting value 958 - finished setting value 959 - setting value 960 - finished setting value 961 - setting value 962 - finished setting value 963 - setting value 964 - finished setting value 965 - setting value 966 - finished setting value 967 - setting value 968 - finished setting value 969 - setting value 970 - finished setting value 971 - setting value 972 - finished setting value 973 - setting value 974 - finished setting value 975 - setting value 976 - finished setting value 977 - setting value 978 - finished setting value 979 - setting value 980 - finished setting value 981 - setting value 982 - finished setting value 983 - setting value 984 - finished setting value 985 - setting value 986 - finished setting value 987 - setting value 988 - finished setting value 989 - setting value 990 - finished setting value 991 - setting value 992 - finished setting value 993 - setting value 994 - finished setting value 995 - setting value 996 - finished setting value 997 - setting value 998 - finished setting value 999 - setting value 1000 - finished setting value 1001 - setting value 1002 - finished setting value 1003 - setting value 1004 - finished setting value 1005 - setting value 1006 - finished setting value 1007 - setting value 1008 - finished setting value 1009 - setting value 1010 - finished setting value 1011 - setting value 1012 - finished setting value 1013 - setting value 1014 - finished setting value 1015 - setting value 1016 - finished setting value 1017 - setting value 1018 - finished setting value 1019 - setting value 1020 - finished setting value 1021 - setting value 1022 - finished setting value 1023 - setting value 1024 - finished setting value 1025 - setting value 1026 - finished setting value 1027 - setting value 1028 - finished setting value 1029 - setting value 1030 - finished setting value 1031 - setting value 1032 - setting value 1033 - finished setting value 1034 - finished setting value 1035 - setting value 1036 - finished setting value 1037 - setting value 1038 - finished setting value 1039 - setting value 1040 - finished setting value 1041 - setting value 1042 - finished setting value 1043 - setting value 1044 - finished setting value 1045 - setting value 1046 - finished setting value 1047 - setting value 1048 - finished setting value 1049 - setting value 1050 - finished setting value 1051 - setting value 1052 - finished setting value 1053 - setting value 1054 - finished setting value 1055 - setting value 1056 - finished setting value 1057 - setting value 1058 - finished setting value 1059 - setting value 1060 - finished setting value 1061 - setting value 1062 - finished setting value 1063 - setting value 1064 - finished setting value 1065 - setting value 1066 - finished setting value 1067 - setting value 1068 - finished setting value 1069 - setting value 1070 - finished setting value 1071 - setting value 1072 - finished setting value 1073 - setting value 1074 - finished setting value 1075 - setting value 1076 - finished setting value 1077 - setting value 1078 - finished setting value 1079 - setting value 1080 - finished setting value 1081 - setting value 1082 - finished setting value 1083 - setting value 1084 - finished setting value 1085 - setting value 1086 - finished setting value 1087 - setting value 1088 - finished setting value 1089 - setting value 1090 - finished setting value 1091 - setting value 1092 - finished setting value 1093 - setting value 1094 - finished setting value 1095 - setting value 1096 - finished setting value 1097 - setting value 1098 - finished setting value 1099 - setting value 1100 - finished setting value 1101 - setting value 1102 - setting value 1103 - finished setting value 1104 - finished setting value 1105 - setting value 1106 - finished setting value 1107 - setting value 1108 - finished setting value 1109 - setting value 1110 - finished setting value 1111 - setting value 1112 - finished setting value 1113 - setting value 1114 - finished setting value 1115 - setting value 1116 - finished setting value 1117 - setting value 1118 - finished setting value 1119 - setting value 1120 - finished setting value 1121 - setting value 1122 - finished setting value 1123 - setting value 1124 - finished setting value 1125 - setting value 1126 - finished setting value 1127 - setting value 1128 - finished setting value 1129 - setting value 1130 - finished setting value 1131 - setting value 1132 - finished setting value 1133 - setting value 1134 - finished setting value 1135 - setting value 1136 - finished setting value 1137 - setting value 1138 - finished setting value 1139 - setting value 1140 - finished setting value 1141 - setting value 1142 - finished setting value 1143 - setting value 1144 - finished setting value 1145 - setting value 1146 - finished setting value 1147 - setting value 1148 - finished setting value 1149 - setting value 1150 - finished setting value 1151 - setting value 1152 - finished setting value 1153 - setting value 1154 - finished setting value 1155 - setting value 1156 - finished setting value 1157 - setting value 1158 - finished setting value 1159 - setting value 1160 - finished setting value 1161 - setting value 1162 - finished setting value 1163 - setting value 1164 - finished setting value 1165 - setting value 1166 - finished setting value 1167 - setting value 1168 - finished setting value 1169 - setting value 1170 - finished setting value 1171 - setting value 1172 - finished setting value 1173 - setting value 1174 - finished setting value 1175 - setting value 1176 - finished setting value 1177 - setting value 1178 - finished setting value 1179 - setting value 1180 - finished setting value 1181 - setting value 1182 - finished setting value 1183 - setting value 1184 - finished setting value 1185 - setting value 1186 - finished setting value 1187 - setting value 1188 - finished setting value 1189 - setting value 1190 - finished setting value 1191 - setting value 1192 - finished setting value 1193 - setting value 1194 - finished setting value 1195 - setting value 1196 - finished setting value 1197 - setting value 1198 - finished setting value 1199 - setting value 1200 - finished setting value 1201 - setting value 1202 - finished setting value 1203 - setting value 1204 - finished setting value 1205 - setting value 1206 - finished setting value 1207 - setting value 1208 - finished setting value 1209 - setting value 1210 - finished setting value 1211 - setting value 1212 - finished setting value 1213 - setting value 1214 - finished setting value 1215 - setting value 1216 - finished setting value 1217 - setting value 1218 - finished setting value 1219 - setting value 1220 - setting value 1221 - finished setting value 1222 - finished setting value 1223 - setting value 1224 - finished setting value 1225 - setting value 1226 - finished setting value 1227 - setting value 1228 - finished setting value 1229 - setting value 1230 - finished setting value 1231 - setting value 1232 - finished setting value 1233 - setting value 1234 - finished setting value 1235 - setting value 1236 - finished setting value 1237 - setting value 1238 - finished setting value 1239 - setting value 1240 - finished setting value 1241 - setting value 1242 - finished setting value 1243 - setting value 1244 - finished setting value 1245 - setting value 1246 - finished setting value 1247 - setting value 1248 - finished setting value 1249 - setting value 1250 - finished setting value 1251 - setting value 1252 - finished setting value 1253 - setting value 1254 - finished setting value 1255 - setting value 1256 - finished setting value 1257 - setting value 1258 - finished setting value 1259 - setting value 1260 - finished setting value 1261 - setting value 1262 - finished setting value 1263 - setting value 1264 - finished setting value 1265 - setting value 1266 - finished setting value 1267 - setting value 1268 - finished setting value 1269 - setting value 1270 - finished setting value 1271 - setting value 1272 - finished setting value 1273 - setting value 1274 - finished setting value 1275 - setting value 1276 - finished setting value 1277 - setting value 1278 - finished setting value 1279 - setting value 1280 - finished setting value 1281 - setting value 1282 - finished setting value 1283 - setting value 1284 - finished setting value 1285 - setting value 1286 - finished setting value 1287 - setting value 1288 - finished setting value 1289 - setting value 1290 - finished setting value 1291 - setting value 1292 - finished setting value 1293 - setting value 1294 - finished setting value 1295 - setting value 1296 - finished setting value 1297 - setting value 1298 - finished setting value 1299 - setting value 1300 - finished setting value 1301 - setting value 1302 - finished setting value 1303 - setting value 1304 - finished setting value 1305 - setting value 1306 - finished setting value 1307 - setting value 1308 - finished setting value 1309 - setting value 1310 - finished setting value 1311 - setting value 1312 - finished setting value 1313 - setting value 1314 - finished setting value 1315 - setting value 1316 - finished setting value 1317 - setting value 1318 - finished setting value 1319 - setting value 1320 - finished setting value 1321 - setting value 1322 - finished setting value 1323 - setting value 1324 - finished setting value 1325 - setting value 1326 - finished setting value 1327 - setting value 1328 - finished setting value 1329 - setting value 1330 - finished setting value 1331 - setting value 1332 - finished setting value 1333 - setting value 1334 - finished setting value 1335 - setting value 1336 - finished setting value 1337 - setting value 1338 - finished setting value 1339 - setting value 1340 - finished setting value 1341 - setting value 1342 - finished setting value 1343 - setting value 1344 - finished setting value 1345 - setting value 1346 - finished setting value 1347 - setting value 1348 - finished setting value 1349 - setting value 1350 - finished setting value 1351 - setting value 1352 - finished setting value 1353 - setting value 1354 - finished setting value 1355 - setting value 1356 - finished setting value 1357 - setting value 1358 - finished setting value 1359 - setting value 1360 - finished setting value 1361 - setting value 1362 - finished setting value 1363 - setting value 1364 - finished setting value 1365 - setting value 1366 - finished setting value 1367 - setting value 1368 - finished setting value 1369 - setting value 1370 - finished setting value 1371 - setting value 1372 - finished setting value 1373 - setting value 1374 - finished setting value 1375 - setting value 1376 - finished setting value 1377 - setting value 1378 - finished setting value 1379 - setting value 1380 - finished setting value 1381 - setting value 1382 - finished setting value 1383 - setting value 1384 - finished setting value 1385 - setting value 1386 - finished setting value 1387 - setting value 1388 - finished setting value 1389 - setting value 1390 - finished setting value 1391 - setting value 1392 - finished setting value 1393 - setting value 1394 - finished setting value 1395 - setting value 1396 - finished setting value 1397 - setting value 1398 - finished setting value 1399 - setting value 1400 - finished setting value 1401 - setting value 1402 - finished setting value 1403 - setting value 1404 - finished setting value 1405 - setting value 1406 - finished setting value 1407 - setting value 1408 - finished setting value 1409 - setting value 1410 - finished setting value 1411 - setting value 1412 - finished setting value 1413 - setting value 1414 - finished setting value 1415 - setting value 1416 - finished setting value 1417 - setting value 1418 - finished setting value 1419 - setting value 1420 - finished setting value 1421 - setting value 1422 - finished setting value 1423 - setting value 1424 - finished setting value 1425 - setting value 1426 - finished setting value 1427 - setting value 1428 - finished setting value 1429 - setting value 1430 - finished setting value 1431 - setting value 1432 - finished setting value 1433 - setting value 1434 - finished setting value 1435 - setting value 1436 - finished setting value 1437 - setting value 1438 - finished setting value 1439 - setting value 1440 - finished setting value 1441 - setting value 1442 - finished setting value 1443 - setting value 1444 - finished setting value 1445 - setting value 1446 - finished setting value 1447 - setting value 1448 - finished setting value 1449 - setting value 1450 - finished setting value 1451 - setting value 1452 - finished setting value 1453 - setting value 1454 - finished setting value 1455 - setting value 1456 - finished setting value 1457 - setting value 1458 - finished setting value 1459 - setting value 1460 - finished setting value 1461 - setting value 1462 - finished setting value 1463 - setting value 1464 - finished setting value 1465 - setting value 1466 - finished setting value 1467 - setting value 1468 - finished setting value 1469 - setting value 1470 - finished setting value 1471 - setting value 1472 - finished setting value 1473 - setting value 1474 - finished setting value 1475 - setting value 1476 - finished setting value 1477 - setting value 1478 - finished setting value 1479 - setting value 1480 - finished setting value 1481 - setting value 1482 - finished setting value 1483 - setting value 1484 - finished setting value 1485 - setting value 1486 - finished setting value 1487 - setting value 1488 - finished setting value 1489 - setting value 1490 - finished setting value 1491 - setting value 1492 - finished setting value 1493 - setting value 1494 - finished setting value 1495 - setting value 1496 - finished setting value 1497 - setting value 1498 - finished setting value 1499 - setting value 1500 - finished setting value 1501 - setting value 1502 - finished setting value 1503 - setting value 1504 - finished setting value 1505 - setting value 1506 - finished setting value 1507 - setting value 1508 - finished setting value 1509 - setting value 1510 - finished setting value 1511 - setting value 1512 - finished setting value 1513 - setting value 1514 - finished setting value 1515 - setting value 1516 - finished setting value 1517 - setting value 1518 - finished setting value 1519 - setting value 1520 - finished setting value 1521 - setting value 1522 - finished setting value 1523 - setting value 1524 - finished setting value 1525 - setting value 1526 - finished setting value 1527 - setting value 1528 - finished setting value 1529 - setting value 1530 - finished setting value 1531 - setting value 1532 - finished setting value 1533 - setting value 1534 - finished setting value 1535 - setting value 1536 - finished setting value 1537 - setting value 1538 - finished setting value 1539 - setting value 1540 - finished setting value 1541 - setting value 1542 - finished setting value 1543 - setting value 1544 - finished setting value 1545 - setting value 1546 - finished setting value 1547 - setting value 1548 - finished setting value 1549 - setting value 1550 - finished setting value 1551 - setting value 1552 - finished setting value 1553 - setting value 1554 - finished setting value 1555 - setting value 1556 - finished setting value 1557 - setting value 1558 - finished setting value 1559 - setting value 1560 - finished setting value 1561 - setting value 1562 - finished setting value 1563 - setting value 1564 - finished setting value 1565 - setting value 1566 - finished setting value 1567 - setting value 1568 - finished setting value 1569 - setting value 1570 - finished setting value 1571 - setting value 1572 - finished setting value 1573 - setting value 1574 - finished setting value 1575 - setting value 1576 - finished setting value 1577 - setting value 1578 - finished setting value 1579 - setting value 1580 - finished setting value 1581 - setting value 1582 - finished setting value 1583 - setting value 1584 - finished setting value 1585 - setting value 1586 - finished setting value 1587 - setting value 1588 - finished setting value 1589 - setting value 1590 - finished setting value 1591 - setting value 1592 - finished setting value 1593 - setting value 1594 - finished setting value 1595 - setting value 1596 - finished setting value 1597 - setting value 1598 - finished setting value 1599 - setting value 1600 - finished setting value 1601 - setting value 1602 - finished setting value 1603 - setting value 1604 - finished setting value 1605 - setting value 1606 - finished setting value 1607 - setting value 1608 - finished setting value 1609 - setting value 1610 - finished setting value 1611 - setting value 1612 - finished setting value 1613 - setting value 1614 - finished setting value 1615 - setting value 1616 - finished setting value 1617 - setting value 1618 - finished setting value 1619 - setting value 1620 - finished setting value 1621 - setting value 1622 - finished setting value 1623 - setting value 1624 - finished setting value 1625 - setting value 1626 - finished setting value 1627 - setting value 1628 - finished setting value 1629 - setting value 1630 - finished setting value 1631 - setting value 1632 - finished setting value 1633 - setting value 1634 - finished setting value 1635 - setting value 1636 - finished setting value 1637 - setting value 1638 - finished setting value 1639 - setting value 1640 - finished setting value 1641 - setting value 1642 - finished setting value 1643 - setting value 1644 - finished setting value 1645 - setting value 1646 - finished setting value 1647 - setting value 1648 - finished setting value 1649 - setting value 1650 - finished setting value 1651 - setting value 1652 - finished setting value 1653 - setting value 1654 - finished setting value 1655 - setting value 1656 - finished setting value 1657 - setting value 1658 - finished setting value 1659 - setting value 1660 - finished setting value 1661 - setting value 1662 - finished setting value 1663 - setting value 1664 - finished setting value 1665 - setting value 1666 - finished setting value 1667 - setting value 1668 - finished setting value 1669 - setting value 1670 - finished setting value 1671 - setting value 1672 - finished setting value 1673 - setting value 1674 - finished setting value 1675 - setting value 1676 - finished setting value 1677 - setting value 1678 - finished setting value 1679 - setting value 1680 - finished setting value 1681 - setting value 1682 - finished setting value 1683 - setting value 1684 - finished setting value 1685 - setting value 1686 - finished setting value 1687 - setting value 1688 - finished setting value 1689 - setting value 1690 - finished setting value 1691 - setting value 1692 - finished setting value 1693 - setting value 1694 - finished setting value 1695 - setting value 1696 - finished setting value 1697 - setting value 1698 - finished setting value 1699 - setting value 1700 - finished setting value 1701 - setting value 1702 - finished setting value 1703 - setting value 1704 - finished setting value 1705 - setting value 1706 - finished setting value 1707 - setting value 1708 - finished setting value 1709 - setting value 1710 - finished setting value 1711 - setting value 1712 - finished setting value 1713 - setting value 1714 - finished setting value 1715 - setting value 1716 - finished setting value 1717 - setting value 1718 - finished setting value 1719 - setting value 1720 - finished setting value 1721 - setting value 1722 - finished setting value 1723 - setting value 1724 - finished setting value 1725 - setting value 1726 - finished setting value 1727 - setting value 1728 - finished setting value 1729 - setting value 1730 - finished setting value 1731 - setting value 1732 - finished setting value 1733 - setting value 1734 - finished setting value 1735 - setting value 1736 - finished setting value 1737 - setting value 1738 - finished setting value 1739 - setting value 1740 - finished setting value 1741 - setting value 1742 - finished setting value 1743 - setting value 1744 - finished setting value 1745 - setting value 1746 - finished setting value 1747 - setting value 1748 - finished setting value 1749 - setting value 1750 - finished setting value 1751 - setting value 1752 - finished setting value 1753 - setting value 1754 - finished setting value 1755 - setting value 1756 - finished setting value 1757 - setting value 1758 - finished setting value 1759 - setting value 1760 - finished setting value 1761 - setting value 1762 - finished setting value 1763 - setting value 1764 - finished setting value 1765 - setting value 1766 - finished setting value 1767 - setting value 1768 - finished setting value 1769 - setting value 1770 - finished setting value 1771 - setting value 1772 - finished setting value 1773 - setting value 1774 - finished setting value 1775 - setting value 1776 - finished setting value 1777 - setting value 1778 - finished setting value 1779 - setting value 1780 - finished setting value 1781 - setting value 1782 - finished setting value 1783 - setting value 1784 - finished setting value 1785 - setting value 1786 - finished setting value 1787 - setting value 1788 - finished setting value 1789 - setting value 1790 - finished setting value 1791 - setting value 1792 - finished setting value 1793 - setting value 1794 - finished setting value 1795 - setting value 1796 - finished setting value 1797 - setting value 1798 - finished setting value 1799 - setting value 1800 - finished setting value 1801 - setting value 1802 - finished setting value 1803 - setting value 1804 - finished setting value 1805 - setting value 1806 - finished setting value 1807 - setting value 1808 - finished setting value 1809 - setting value 1810 - finished setting value 1811 - setting value 1812 - finished setting value 1813 - setting value 1814 - finished setting value 1815 - setting value 1816 - finished setting value 1817 - setting value 1818 - finished setting value 1819 - setting value 1820 - finished setting value 1821 - setting value 1822 - finished setting value 1823 - setting value 1824 - finished setting value 1825 - setting value 1826 - finished setting value 1827 - setting value 1828 - finished setting value 1829 - setting value 1830 - finished setting value 1831 - setting value 1832 - finished setting value 1833 - setting value 1834 - finished setting value 1835 - setting value 1836 - finished setting value 1837 - setting value 1838 - finished setting value 1839 - setting value 1840 - finished setting value 1841 - setting value 1842 - finished setting value 1843 - setting value 1844 - finished setting value 1845 - setting value 1846 - finished setting value 1847 - setting value 1848 - finished setting value 1849 - setting value 1850 - finished setting value 1851 - setting value 1852 - finished setting value 1853 - setting value 1854 - finished setting value 1855 - setting value 1856 - finished setting value 1857 - setting value 1858 - finished setting value 1859 - setting value 1860 - finished setting value 1861 - setting value 1862 - finished setting value 1863 - setting value 1864 - finished setting value 1865 - setting value 1866 - finished setting value 1867 - setting value 1868 - finished setting value 1869 - setting value 1870 - finished setting value 1871 - setting value 1872 - finished setting value 1873 - setting value 1874 - finished setting value 1875 - setting value 1876 - finished setting value 1877 - setting value 1878 - finished setting value 1879 - setting value 1880 - finished setting value 1881 - setting value 1882 - finished setting value 1883 - setting value 1884 - finished setting value 1885 - setting value 1886 - finished setting value 1887 - setting value 1888 - finished setting value 1889 - setting value 1890 - finished setting value 1891 - setting value 1892 - finished setting value 1893 - setting value 1894 - finished setting value 1895 - setting value 1896 - finished setting value 1897 - setting value 1898 - finished setting value 1899 - setting value 1900 - finished setting value 1901 - setting value 1902 - finished setting value 1903 - setting value 1904 - finished setting value 1905 - setting value 1906 - finished setting value 1907 - setting value 1908 - finished setting value 1909 - setting value 1910 - finished setting value 1911 - setting value 1912 - finished setting value 1913 - setting value 1914 - finished setting value 1915 - setting value 1916 - finished setting value 1917 - setting value 1918 - finished setting value 1919 - setting value 1920 - finished setting value 1921 - setting value 1922 - finished setting value 1923 - setting value 1924 - finished setting value 1925 - setting value 1926 - finished setting value 1927 - setting value 1928 - finished setting value 1929 - setting value 1930 - finished setting value 1931 - setting value 1932 - finished setting value 1933 - setting value 1934 - finished setting value 1935 - setting value 1936 - finished setting value 1937 - setting value 1938 - finished setting value 1939 - setting value 1940 - finished setting value 1941 - setting value 1942 - finished setting value 1943 - setting value 1944 - finished setting value 1945 - setting value 1946 - finished setting value 1947 - setting value 1948 - finished setting value 1949 - setting value 1950 - finished setting value 1951 - setting value 1952 - finished setting value 1953 - setting value 1954 - finished setting value 1955 - setting value 1956 - finished setting value 1957 - setting value 1958 - finished setting value 1959 - setting value 1960 - finished setting value 1961 - setting value 1962 - finished setting value 1963 - setting value 1964 - finished setting value 1965 - setting value 1966 - finished setting value 1967 - setting value 1968 - finished setting value 1969 - setting value 1970 - finished setting value 1971 - setting value 1972 - finished setting value 1973 - setting value 1974 - finished setting value 1975 - setting value 1976 - finished setting value 1977 - setting value 1978 - finished setting value 1979 - setting value 1980 - finished setting value 1981 - setting value 1982 - finished setting value 1983 - setting value 1984 - finished setting value 1985 - setting value 1986 - finished setting value 1987 - setting value 1988 - finished setting value 1989 - setting value 1990 - finished setting value 1991 - setting value 1992 - finished setting value 1993 - setting value 1994 - finished setting value 1995 - setting value 1996 - finished setting value 1997 - setting value 1998 - finished setting value 1999 - setting value 2000 - finished setting value 2001 - setting value 2002 - finished setting value 2003 - setting value 2004 - finished setting value 2005 - setting value 2006 - finished setting value 2007 - setting value 2008 - finished setting value 2009 - setting value 2010 - finished setting value 2011 - setting value 2012 - finished setting value 2013 - setting value 2014 - finished setting value 2015 - setting value 2016 - finished setting value 2017 - setting value 2018 - finished setting value 2019 - setting value 2020 - finished setting value 2021 - setting value 2022 - finished setting value 2023 - setting value 2024 - finished setting value 2025 - setting value 2026 - finished setting value 2027 - setting value 2028 - finished setting value 2029 - setting value 2030 - finished setting value 2031 - setting value 2032 - finished setting value 2033 - setting value 2034 - finished setting value 2035 - setting value 2036 - finished setting value 2037 - setting value 2038 - finished setting value 2039 - setting value 2040 - finished setting value 2041 - setting value 2042 - finished setting value 2043 - setting value 2044 - finished setting value 2045 - setting value 2046 - finished setting value 2047 - setting value 2048 - finished setting value 2049 - setting value 2050 - finished setting value 2051 - setting value 2052 - finished setting value 2053 - setting value 2054 - finished setting value 2055 - setting value 2056 - finished setting value 2057 - setting value 2058 - finished setting value 2059 - setting value 2060 - finished setting value 2061 - setting value 2062 - finished setting value 2063 - setting value 2064 - finished setting value 2065 - setting value 2066 - finished setting value 2067 - setting value 2068 - finished setting value 2069 - setting value 2070 - finished setting value 2071 - setting value 2072 - finished setting value 2073 - setting value 2074 - finished setting value 2075 - setting value 2076 - finished setting value 2077 - setting value 2078 - finished setting value 2079 - setting value 2080 - finished setting value 2081 - setting value 2082 - finished setting value 2083 - setting value 2084 - finished setting value 2085 - setting value 2086 - finished setting value 2087 - setting value 2088 - finished setting value 2089 - setting value 2090 - finished setting value 2091 - setting value 2092 - finished setting value 2093 - setting value 2094 - finished setting value 2095 - setting value 2096 - finished setting value 2097 - setting value 2098 - finished setting value 2099 - setting value 2100 - finished setting value 2101 - setting value 2102 - finished setting value 2103 - setting value 2104 - finished setting value 2105 - setting value 2106 - finished setting value 2107 - setting value 2108 - finished setting value 2109 - setting value 2110 - finished setting value 2111 - setting value 2112 - finished setting value 2113 - setting value 2114 - finished setting value 2115 - setting value 2116 - finished setting value 2117 - setting value 2118 - finished setting value 2119 - setting value 2120 - finished setting value 2121 - setting value 2122 - finished setting value 2123 - setting value 2124 - finished setting value 2125 - setting value 2126 - finished setting value 2127 - setting value 2128 - finished setting value 2129 - setting value 2130 - finished setting value 2131 - setting value 2132 - finished setting value 2133 - setting value 2134 - finished setting value 2135 - setting value 2136 - finished setting value 2137 - setting value 2138 - finished setting value 2139 - setting value 2140 - finished setting value 2141 - setting value 2142 - finished setting value 2143 - setting value 2144 - finished setting value 2145 - setting value 2146 - finished setting value 2147 - setting value 2148 - finished setting value 2149 - setting value 2150 - finished setting value 2151 - setting value 2152 - finished setting value 2153 - setting value 2154 - finished setting value 2155 - setting value 2156 - finished setting value 2157 - setting value 2158 - finished setting value 2159 - setting value 2160 - finished setting value 2161 - setting value 2162 - finished setting value 2163 - setting value 2164 - finished setting value 2165 - setting value 2166 - finished setting value 2167 - setting value 2168 - finished setting value 2169 - setting value 2170 - finished setting value 2171 - setting value 2172 - finished setting value 2173 - setting value 2174 - finished setting value 2175 - setting value 2176 - finished setting value 2177 - setting value 2178 - finished setting value 2179 - setting value 2180 - finished setting value 2181 - setting value 2182 - finished setting value 2183 - setting value 2184 - finished setting value 2185 - setting value 2186 - finished setting value 2187 - setting value 2188 - finished setting value 2189 - setting value 2190 - finished setting value 2191 - setting value 2192 - finished setting value 2193 - setting value 2194 - finished setting value 2195 - setting value 2196 - finished setting value 2197 - setting value 2198 - finished setting value 2199 - setting value 2200 - finished setting value 2201 - setting value 2202 - finished setting value 2203 - setting value 2204 - finished setting value 2205 - setting value 2206 - finished setting value 2207 - setting value 2208 - finished setting value 2209 - setting value 2210 - finished setting value 2211 - setting value 2212 - finished setting value 2213 - setting value 2214 - finished setting value 2215 - setting value 2216 - finished setting value 2217 - setting value 2218 - finished setting value 2219 - setting value 2220 - finished setting value 2221 - setting value 2222 - finished setting value 2223 - setting value 2224 - setting value 2225 - finished setting value 2226 - finished setting value 2227 - setting value 2228 - finished setting value 2229 - setting value 2230 - finished setting value 2231 - setting value 2232 - finished setting value 2233 - setting value 2234 - finished setting value 2235 - setting value 2236 - finished setting value 2237 - setting value 2238 - finished setting value 2239 - setting value 2240 - finished setting value 2241 - setting value 2242 - finished setting value 2243 - setting value 2244 - finished setting value 2245 - setting value 2246 - finished setting value 2247 - setting value 2248 - finished setting value 2249 - setting value 2250 - finished setting value 2251 - setting value 2252 - finished setting value 2253 - setting value 2254 - finished setting value 2255 - setting value 2256 - finished setting value 2257 - setting value 2258 - finished setting value 2259 - setting value 2260 - finished setting value 2261 - setting value 2262 - finished setting value 2263 - setting value 2264 - finished setting value 2265 - setting value 2266 - finished setting value 2267 - setting value 2268 - finished setting value 2269 - setting value 2270 - finished setting value 2271 - setting value 2272 - finished setting value 2273 - setting value 2274 - finished setting value 2275 - setting value 2276 - finished setting value 2277 - setting value 2278 - finished setting value 2279 - setting value 2280 - finished setting value 2281 - setting value 2282 - finished setting value
+22
test/jj_log.json
··· 1 + {"commit_id":"ad5c56c36937bbe32cf28c84995b1ecdb128a316","parents":["e0b6949987fac4e0eea6a3a25c0a6baa3af5a422"],"change_id":"oyksztqkrlptsrtqypkuwywprkommwyw","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:18:41+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 2 + {"commit_id":"56bfa4ebde87b60031cbf3d6f4daf18e910b743a","parents":["1ece15f3968dacd34d6b82f9f75bf8ad48517727","288da14d60989db2b114f661f724197184339a80"],"change_id":"ryytrytktumkkzknwwutqztmvuxlzzzt","description":"22\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:18:25+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 3 + {"commit_id":"288da14d60989db2b114f661f724197184339a80","parents":["3467204493ea4501b87ddcdc89811b817588f308"],"change_id":"qxpnouvlkkknpwupwlottoutzortmmzz","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:18:16+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 4 + {"commit_id":"3467204493ea4501b87ddcdc89811b817588f308","parents":["d4deb604d80e25f7eca71d17c23dc7c1c408d9e1"],"change_id":"lrrvvvpkpwznkwulrmynxqpmzmzpuwwt","description":"222\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:17:28+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 5 + {"commit_id":"d4deb604d80e25f7eca71d17c23dc7c1c408d9e1","parents":["36a62c631949cdc12a148241f2e73a23effa7c09"],"change_id":"pqplusztrmmklmosskmxlkkpksqolmtl","description":"222\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:18:10+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 6 + {"commit_id":"586553f52a40f54482e62b7fd457f80132da2b5c","parents":["36a62c631949cdc12a148241f2e73a23effa7c09","e0b6949987fac4e0eea6a3a25c0a6baa3af5a422","1ece15f3968dacd34d6b82f9f75bf8ad48517727","2654e022a51769299a0351f034073f1ef2252c28"],"change_id":"owrxkmrkzqmsrkmpnotoptsxmsupnzyq","description":"22\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T18:27:14+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 7 + {"commit_id":"36a62c631949cdc12a148241f2e73a23effa7c09","parents":["e0b6949987fac4e0eea6a3a25c0a6baa3af5a422","1ece15f3968dacd34d6b82f9f75bf8ad48517727"],"change_id":"sqvmzllpqtqvvswlkkpvxuquputsowwt","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T18:27:16+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":false,"immutable":false,"wip":false} 8 + {"commit_id":"e0b6949987fac4e0eea6a3a25c0a6baa3af5a422","parents":["2654e022a51769299a0351f034073f1ef2252c28"],"change_id":"nqvkmksporsourrpzqwtvrpvllnnpvus","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T18:25:55+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-06T14:33:24+08:00"},"working_copy":true,"immutable":false,"wip":false} 9 + {"commit_id":"2271919927f7b342b6ef51fe8732dd0653aa3496","parents":["ec28d2ea113664b05a196ceea9779fc485a676d2"],"change_id":"uunkomlmyuszvyxvrrnoqpwwqynomlpq","description":"2\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:16:53+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:16:53+08:00"},"working_copy":false,"immutable":false,"wip":false} 10 + {"commit_id":"1ece15f3968dacd34d6b82f9f75bf8ad48517727","parents":["2654e022a51769299a0351f034073f1ef2252c28"],"change_id":"wyxswxtpvsypppknvrzmltvnypsyuqtm","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T18:25:36+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":false} 11 + {"commit_id":"2654e022a51769299a0351f034073f1ef2252c28","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e","67a7da0d9c3f6d995e60a867b0c33af5a5cf99cf"],"change_id":"lqvvmmrvqlwxwvxmpnunslvrnrutluoz","description":"22\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T17:57:41+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":false} 12 + {"commit_id":"ec28d2ea113664b05a196ceea9779fc485a676d2","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e","67a7da0d9c3f6d995e60a867b0c33af5a5cf99cf"],"change_id":"pxnknktulrwtrqptkktsopqzpwxunnym","description":"2\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T17:51:25+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":false} 13 + {"commit_id":"67a7da0d9c3f6d995e60a867b0c33af5a5cf99cf","parents":["3386e4f5827ccb7f05473f09217b9d9107bf4192"],"change_id":"urrykmzkmrtulnzsousvkuytxotplyku","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T17:51:16+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":false} 14 + {"commit_id":"3386e4f5827ccb7f05473f09217b9d9107bf4192","parents":["d9b6e8ee3c3082659c392b819ef34607c5306dfc"],"change_id":"qwpmxoltwxskqtpzxuxtkuyrstuymvlt","description":"wip:5\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:12:50+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":true} 15 + {"commit_id":"d9b6e8ee3c3082659c392b819ef34607c5306dfc","parents":["a8f75d20713496cacfffec5a3669976a14ff7f86","74a5db23865de05e3b05ebed4904413fe9791bcb","832b8aafa20c8fc6b3663da9a72f2623551a3087"],"change_id":"pymnwxmzqlxpmszpsupxlxosnvtwxsrx","description":"3\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:12:38+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":false} 16 + {"commit_id":"a8f75d20713496cacfffec5a3669976a14ff7f86","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e"],"change_id":"punyqstqnuttlxnoyyyxylqwqxwpxtln","description":"66\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:56:33+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T09:13:06+08:00"},"working_copy":false,"immutable":false,"wip":false} 17 + {"commit_id":"74a5db23865de05e3b05ebed4904413fe9791bcb","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e"],"change_id":"xxyqrwlsvqtsmxrsyrxymonrlltskzrt","description":"22\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:12:43+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T08:59:32+08:00"},"working_copy":false,"immutable":false,"wip":false} 18 + {"commit_id":"8e6225509a1144b6ddae51163a6878e2df96be3f","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e"],"change_id":"uslsksyxmwsspownwxsqkoqxvwzyvwss","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T08:57:51+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2026-01-02T08:57:51+08:00"},"working_copy":false,"immutable":false,"wip":false} 19 + {"commit_id":"c5f072c36ee17ff1f35a7b171d5d8fd536e7eb42","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e"],"change_id":"toyqvunsxtyyxrzpryuwxnwtvttoqqwv","description":"2\\\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T17:53:22+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T17:53:22+08:00"},"working_copy":false,"immutable":false,"wip":false} 20 + {"commit_id":"832b8aafa20c8fc6b3663da9a72f2623551a3087","parents":["af63945d4563be2dc9d0b37592417f38ae5b6a8e"],"change_id":"nulwxyuovkzqopkyslmvumtlvmqozvtt","description":"2\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:11:00+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:11:00+08:00"},"working_copy":false,"immutable":false,"wip":false} 21 + {"commit_id":"af63945d4563be2dc9d0b37592417f38ae5b6a8e","parents":["0000000000000000000000000000000000000000"],"change_id":"ykkkpqptrszzqyzmrlqkzszxlkuuyqsk","description":"1\n","author":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:10:54+08:00"},"committer":{"name":"Eli Dowling","email":"eli.jambu@gmail.com","timestamp":"2025-12-23T16:10:54+08:00"},"working_copy":false,"immutable":false,"wip":false} 22 + {"commit_id":"0000000000000000000000000000000000000000","parents":[],"change_id":"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz","description":"","author":{"name":"","email":"","timestamp":"1970-01-01T00:00:00Z"},"committer":{"name":"","email":"","timestamp":"1970-01-01T00:00:00Z"},"working_copy":false,"immutable":true,"wip":false}