mirror of
https://github.com/SkinnyMind/libgit2dart.git
synced 2025-05-05 04:39:07 -04:00
style: use "map/where" instead of "for" loop
This commit is contained in:
parent
3a0fa75929
commit
cfa5268af2
28 changed files with 193 additions and 323 deletions
|
@ -19,15 +19,18 @@ void head({
|
|||
String? directory,
|
||||
List<String>? paths,
|
||||
}) {
|
||||
final initOpts =
|
||||
initOptions(strategy: strategy, directory: directory, paths: paths);
|
||||
final initOpts = initOptions(
|
||||
strategy: strategy,
|
||||
directory: directory,
|
||||
paths: paths,
|
||||
);
|
||||
final optsC = initOpts[0];
|
||||
final pathPointers = initOpts[1];
|
||||
final strArray = initOpts[2];
|
||||
|
||||
final error = libgit2.git_checkout_head(repoPointer, optsC);
|
||||
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
|
||||
|
@ -48,15 +51,18 @@ void index({
|
|||
String? directory,
|
||||
List<String>? paths,
|
||||
}) {
|
||||
final initOpts =
|
||||
initOptions(strategy: strategy, directory: directory, paths: paths);
|
||||
final initOpts = initOptions(
|
||||
strategy: strategy,
|
||||
directory: directory,
|
||||
paths: paths,
|
||||
);
|
||||
final optsC = initOpts[0];
|
||||
final pathPointers = initOpts[1];
|
||||
final strArray = initOpts[2];
|
||||
|
||||
final error = libgit2.git_checkout_index(repoPointer, nullptr, optsC);
|
||||
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
|
||||
|
@ -90,7 +96,7 @@ void tree({
|
|||
|
||||
final error = libgit2.git_checkout_tree(repoPointer, treeishPointer, optsC);
|
||||
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
|
||||
|
@ -128,9 +134,5 @@ List<dynamic> initOptions({
|
|||
optsC.ref.paths.count = paths.length;
|
||||
}
|
||||
|
||||
var result = <dynamic>[];
|
||||
result.add(optsC);
|
||||
result.add(pathPointers);
|
||||
result.add(strArray);
|
||||
return result;
|
||||
return [optsC, pathPointers, strArray];
|
||||
}
|
||||
|
|
|
@ -230,7 +230,7 @@ void addAll({
|
|||
);
|
||||
|
||||
calloc.free(pathspecC);
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
calloc.free(strArray);
|
||||
|
@ -296,7 +296,7 @@ void removeAll({
|
|||
);
|
||||
|
||||
calloc.free(pathspecC);
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
calloc.free(strArray);
|
||||
|
|
|
@ -66,14 +66,13 @@ void merge({
|
|||
required Pointer<Pointer<git_annotated_commit>> theirHeadsPointer,
|
||||
required int theirHeadsLen,
|
||||
}) {
|
||||
final mergeOpts = calloc<git_merge_options>(sizeOf<git_merge_options>());
|
||||
final mergeOpts = calloc<git_merge_options>();
|
||||
libgit2.git_merge_options_init(mergeOpts, GIT_MERGE_OPTIONS_VERSION);
|
||||
|
||||
final checkoutOpts =
|
||||
calloc<git_checkout_options>(sizeOf<git_checkout_options>());
|
||||
final checkoutOpts = calloc<git_checkout_options>();
|
||||
libgit2.git_checkout_options_init(checkoutOpts, GIT_CHECKOUT_OPTIONS_VERSION);
|
||||
checkoutOpts.ref.checkout_strategy =
|
||||
git_checkout_strategy_t.GIT_CHECKOUT_SAFE +
|
||||
git_checkout_strategy_t.GIT_CHECKOUT_SAFE |
|
||||
git_checkout_strategy_t.GIT_CHECKOUT_RECREATE_MISSING;
|
||||
|
||||
final error = libgit2.git_merge(
|
||||
|
@ -131,24 +130,26 @@ Pointer<git_index> mergeCommits({
|
|||
required Pointer<git_repository> repoPointer,
|
||||
required Pointer<git_commit> ourCommitPointer,
|
||||
required Pointer<git_commit> theirCommitPointer,
|
||||
required Map<String, int> opts,
|
||||
required int favor,
|
||||
required int mergeFlags,
|
||||
required int fileFlags,
|
||||
}) {
|
||||
final out = calloc<Pointer<git_index>>();
|
||||
final optsC = calloc<git_merge_options>(sizeOf<git_merge_options>());
|
||||
optsC.ref.file_favor = opts['favor']!;
|
||||
optsC.ref.flags = opts['mergeFlags']!;
|
||||
optsC.ref.file_flags = opts['fileFlags']!;
|
||||
optsC.ref.version = GIT_MERGE_OPTIONS_VERSION;
|
||||
final opts = _initMergeOptions(
|
||||
favor: favor,
|
||||
mergeFlags: mergeFlags,
|
||||
fileFlags: fileFlags,
|
||||
);
|
||||
|
||||
final error = libgit2.git_merge_commits(
|
||||
out,
|
||||
repoPointer,
|
||||
ourCommitPointer,
|
||||
theirCommitPointer,
|
||||
optsC,
|
||||
opts,
|
||||
);
|
||||
|
||||
calloc.free(optsC);
|
||||
calloc.free(opts);
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
|
@ -170,14 +171,16 @@ Pointer<git_index> mergeTrees({
|
|||
required Pointer<git_tree> ancestorTreePointer,
|
||||
required Pointer<git_tree> ourTreePointer,
|
||||
required Pointer<git_tree> theirTreePointer,
|
||||
required Map<String, int> opts,
|
||||
required int favor,
|
||||
required int mergeFlags,
|
||||
required int fileFlags,
|
||||
}) {
|
||||
final out = calloc<Pointer<git_index>>();
|
||||
final optsC = calloc<git_merge_options>(sizeOf<git_merge_options>());
|
||||
optsC.ref.file_favor = opts['favor']!;
|
||||
optsC.ref.flags = opts['mergeFlags']!;
|
||||
optsC.ref.file_flags = opts['fileFlags']!;
|
||||
optsC.ref.version = GIT_MERGE_OPTIONS_VERSION;
|
||||
final opts = _initMergeOptions(
|
||||
favor: favor,
|
||||
mergeFlags: mergeFlags,
|
||||
fileFlags: fileFlags,
|
||||
);
|
||||
|
||||
final error = libgit2.git_merge_trees(
|
||||
out,
|
||||
|
@ -185,10 +188,10 @@ Pointer<git_index> mergeTrees({
|
|||
ancestorTreePointer,
|
||||
ourTreePointer,
|
||||
theirTreePointer,
|
||||
optsC,
|
||||
opts,
|
||||
);
|
||||
|
||||
calloc.free(optsC);
|
||||
calloc.free(opts);
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
|
@ -215,3 +218,25 @@ void cherryPick({
|
|||
throw LibGit2Error(libgit2.git_error_last());
|
||||
}
|
||||
}
|
||||
|
||||
Pointer<git_merge_options> _initMergeOptions({
|
||||
required int favor,
|
||||
required int mergeFlags,
|
||||
required int fileFlags,
|
||||
}) {
|
||||
final opts = calloc<git_merge_options>();
|
||||
final error = libgit2.git_merge_options_init(
|
||||
opts,
|
||||
GIT_MERGE_OPTIONS_VERSION,
|
||||
);
|
||||
|
||||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
}
|
||||
|
||||
opts.ref.file_favor = favor;
|
||||
opts.ref.flags = mergeFlags;
|
||||
opts.ref.file_flags = fileFlags;
|
||||
|
||||
return opts;
|
||||
}
|
||||
|
|
|
@ -17,9 +17,8 @@ List<String> list(Pointer<git_repository> repo) {
|
|||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
} else {
|
||||
final count = out.ref.count;
|
||||
var result = <String>[];
|
||||
for (var i = 0; i < count; i++) {
|
||||
for (var i = 0; i < out.ref.count; i++) {
|
||||
result.add(out.ref.strings[i].cast<Utf8>().toDartString());
|
||||
}
|
||||
calloc.free(out);
|
||||
|
@ -151,9 +150,8 @@ List<String> rename({
|
|||
if (error < 0) {
|
||||
throw LibGit2Error(libgit2.git_error_last());
|
||||
} else {
|
||||
final count = out.ref.count;
|
||||
var result = <String>[];
|
||||
for (var i = 0; i < count; i++) {
|
||||
for (var i = 0; i < out.ref.count; i++) {
|
||||
result.add(out.ref.strings[i].cast<Utf8>().toDartString());
|
||||
}
|
||||
calloc.free(out);
|
||||
|
@ -249,8 +247,7 @@ List<String> fetchRefspecs(Pointer<git_remote> remote) {
|
|||
libgit2.git_remote_get_fetch_refspecs(out, remote);
|
||||
|
||||
var result = <String>[];
|
||||
final count = out.ref.count;
|
||||
for (var i = 0; i < count; i++) {
|
||||
for (var i = 0; i < out.ref.count; i++) {
|
||||
result.add(out.ref.strings[i].cast<Utf8>().toDartString());
|
||||
}
|
||||
calloc.free(out);
|
||||
|
@ -263,8 +260,7 @@ List<String> pushRefspecs(Pointer<git_remote> remote) {
|
|||
libgit2.git_remote_get_push_refspecs(out, remote);
|
||||
|
||||
var result = <String>[];
|
||||
final count = out.ref.count;
|
||||
for (var i = 0; i < count; i++) {
|
||||
for (var i = 0; i < out.ref.count; i++) {
|
||||
result.add(out.ref.strings[i].cast<Utf8>().toDartString());
|
||||
}
|
||||
calloc.free(out);
|
||||
|
@ -462,7 +458,7 @@ void fetch({
|
|||
reflogMessageC,
|
||||
);
|
||||
|
||||
for (var p in refspecsPointers) {
|
||||
for (final p in refspecsPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
calloc.free(strArray);
|
||||
|
@ -516,7 +512,7 @@ void push({
|
|||
|
||||
final error = libgit2.git_remote_push(remotePointer, refspecsC, opts);
|
||||
|
||||
for (var p in refspecsPointers) {
|
||||
for (final p in refspecsPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
calloc.free(strArray);
|
||||
|
|
|
@ -71,10 +71,9 @@ void apply({
|
|||
throw LibGit2Error(libgit2.git_error_last());
|
||||
}
|
||||
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
|
||||
calloc.free(strArray);
|
||||
calloc.free(optsC);
|
||||
calloc.free(options);
|
||||
|
@ -125,10 +124,9 @@ void pop({
|
|||
throw LibGit2Error(libgit2.git_error_last());
|
||||
}
|
||||
|
||||
for (var p in pathPointers) {
|
||||
for (final p in pathPointers) {
|
||||
calloc.free(p);
|
||||
}
|
||||
|
||||
calloc.free(strArray);
|
||||
calloc.free(optsC);
|
||||
calloc.free(options);
|
||||
|
|
|
@ -46,8 +46,7 @@ class Blame with IterableMixin<BlameHunk> {
|
|||
}) {
|
||||
libgit2.git_libgit2_init();
|
||||
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
_blamePointer = bindings.file(
|
||||
repoPointer: repo.pointer,
|
||||
|
|
|
@ -87,8 +87,7 @@ class Blob {
|
|||
int contextLines = 3,
|
||||
int interhunkLines = 0,
|
||||
}) {
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
final result = patch_bindings.fromBlobs(
|
||||
oldBlobPointer: _blobPointer,
|
||||
|
@ -116,8 +115,7 @@ class Blob {
|
|||
int contextLines = 3,
|
||||
int interhunkLines = 0,
|
||||
}) {
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
final result = patch_bindings.fromBlobAndBuffer(
|
||||
oldBlobPointer: _blobPointer,
|
||||
|
|
|
@ -84,12 +84,7 @@ class Branch {
|
|||
flags: type.value,
|
||||
);
|
||||
|
||||
final result = <Branch>[];
|
||||
for (var pointer in pointers) {
|
||||
result.add(Branch(pointer));
|
||||
}
|
||||
|
||||
return result;
|
||||
return pointers.map((e) => Branch(e)).toList();
|
||||
}
|
||||
|
||||
/// Deletes an existing branch reference.
|
||||
|
|
|
@ -196,14 +196,9 @@ class ConfigEntry {
|
|||
|
||||
/// Returns which config file this was found in.
|
||||
GitConfigLevel get level {
|
||||
late GitConfigLevel result;
|
||||
for (var level in GitConfigLevel.values) {
|
||||
if (_configEntryPointer.ref.level == level.value) {
|
||||
result = level;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return GitConfigLevel.values.singleWhere(
|
||||
(e) => _configEntryPointer.ref.level == e.value,
|
||||
);
|
||||
}
|
||||
|
||||
/// Releases memory allocated for config entry object.
|
||||
|
|
|
@ -96,8 +96,7 @@ class Diff {
|
|||
int breakRewriteThreshold = 60,
|
||||
int renameLimit = 200,
|
||||
}) {
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
bindings.findSimilar(
|
||||
diffPointer: _diffPointer,
|
||||
|
@ -136,14 +135,9 @@ class DiffDelta {
|
|||
|
||||
/// Returns type of change.
|
||||
GitDelta get status {
|
||||
late final GitDelta status;
|
||||
for (var type in GitDelta.values) {
|
||||
if (_diffDeltaPointer.ref.status == type.value) {
|
||||
status = type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return status;
|
||||
return GitDelta.values.singleWhere(
|
||||
(e) => _diffDeltaPointer.ref.status == e.value,
|
||||
);
|
||||
}
|
||||
|
||||
/// Looks up the single character abbreviation for a delta status code.
|
||||
|
@ -156,14 +150,9 @@ class DiffDelta {
|
|||
|
||||
/// Returns flags for the delta object.
|
||||
Set<GitDiffFlag> get flags {
|
||||
var flags = <GitDiffFlag>{};
|
||||
for (var flag in GitDiffFlag.values) {
|
||||
if (_diffDeltaPointer.ref.flags & flag.value == flag.value) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
return GitDiffFlag.values
|
||||
.where((e) => _diffDeltaPointer.ref.flags & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
|
||||
/// Returns a similarity score for renamed or copied files between 0 and 100
|
||||
|
@ -206,26 +195,14 @@ class DiffFile {
|
|||
|
||||
/// Returns flags for the diff file object.
|
||||
Set<GitDiffFlag> get flags {
|
||||
var flags = <GitDiffFlag>{};
|
||||
for (var flag in GitDiffFlag.values) {
|
||||
if (_diffFile.flags & flag.value == flag.value) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
return GitDiffFlag.values
|
||||
.where((e) => _diffFile.flags & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
|
||||
/// Returns one of the [GitFilemode] values.
|
||||
GitFilemode get mode {
|
||||
late final GitFilemode result;
|
||||
for (var mode in GitFilemode.values) {
|
||||
if (_diffFile.mode == mode.value) {
|
||||
result = mode;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return GitFilemode.values.singleWhere((e) => _diffFile.mode == e.value);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -252,8 +229,7 @@ class DiffStats {
|
|||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
String print({required Set<GitDiffStats> format, required int width}) {
|
||||
final int formatInt =
|
||||
format.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int formatInt = format.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
return bindings.statsPrint(
|
||||
statsPointer: _diffStatsPointer,
|
||||
|
@ -335,15 +311,9 @@ class DiffLine {
|
|||
|
||||
/// Returns type of the line.
|
||||
GitDiffLine get origin {
|
||||
final originInt = _diffLinePointer.ref.origin;
|
||||
late final GitDiffLine result;
|
||||
for (var type in GitDiffLine.values) {
|
||||
if (originInt == type.value) {
|
||||
result = type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return GitDiffLine.values.singleWhere(
|
||||
(e) => _diffLinePointer.ref.origin == e.value,
|
||||
);
|
||||
}
|
||||
|
||||
/// Returns line number in old file or -1 for added line.
|
||||
|
|
|
@ -3,16 +3,10 @@ import 'util.dart';
|
|||
|
||||
class Features {
|
||||
/// Returns list of compile time options for libgit2.
|
||||
static List<GitFeature> get list {
|
||||
var result = <GitFeature>[];
|
||||
static Set<GitFeature> get list {
|
||||
final featuresInt = libgit2.git_libgit2_features();
|
||||
|
||||
for (var feature in GitFeature.values) {
|
||||
if (featuresInt & feature.value == feature.value) {
|
||||
result.add(feature);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return GitFeature.values
|
||||
.where((e) => featuresInt & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ class Index with IterableMixin<IndexEntry> {
|
|||
final conflicts = bindings.conflictList(_indexPointer);
|
||||
var result = <String, ConflictEntry>{};
|
||||
|
||||
for (var entry in conflicts) {
|
||||
for (final entry in conflicts) {
|
||||
IndexEntry? ancestor, our, their;
|
||||
String path;
|
||||
|
||||
|
@ -190,8 +190,7 @@ class Index with IterableMixin<IndexEntry> {
|
|||
int interhunkLines = 0,
|
||||
}) {
|
||||
final repo = bindings.owner(_indexPointer);
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
return Diff(diff_bindings.indexToWorkdir(
|
||||
repoPointer: repo,
|
||||
|
@ -212,8 +211,7 @@ class Index with IterableMixin<IndexEntry> {
|
|||
int interhunkLines = 0,
|
||||
}) {
|
||||
final repo = bindings.owner(_indexPointer);
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
return Diff(diff_bindings.treeToIndex(
|
||||
repoPointer: repo,
|
||||
|
|
|
@ -82,15 +82,12 @@ class Note {
|
|||
/// Throws a [LibGit2Error] if error occured.
|
||||
static List<Note> list(Repository repo) {
|
||||
final notesPointers = bindings.list(repo.pointer);
|
||||
var result = <Note>[];
|
||||
for (var note in notesPointers) {
|
||||
result.add(Note(
|
||||
note['note'] as Pointer<git_note>,
|
||||
note['annotatedId'] as Pointer<git_oid>,
|
||||
));
|
||||
}
|
||||
|
||||
return result;
|
||||
return notesPointers
|
||||
.map((e) => Note(
|
||||
e['note'] as Pointer<git_note>,
|
||||
e['annotatedId'] as Pointer<git_oid>,
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Returns the note object's [Oid].
|
||||
|
|
|
@ -109,15 +109,8 @@ class OdbObject {
|
|||
|
||||
/// Returns the type of an ODB object.
|
||||
GitObject get type {
|
||||
late GitObject result;
|
||||
final typeInt = bindings.objectType(_odbObjectPointer);
|
||||
for (var type in GitObject.values) {
|
||||
if (typeInt == type.value) {
|
||||
result = type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return GitObject.values.singleWhere((e) => typeInt == e.value);
|
||||
}
|
||||
|
||||
/// Returns the data of an ODB object.
|
||||
|
|
|
@ -31,8 +31,7 @@ class Patch {
|
|||
}) {
|
||||
libgit2.git_libgit2_init();
|
||||
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
var result = <String, dynamic>{};
|
||||
|
||||
if (a is Blob || a == null) {
|
||||
|
|
|
@ -121,14 +121,9 @@ class RebaseOperation {
|
|||
|
||||
/// Returns the type of rebase operation.
|
||||
GitRebaseOperation get type {
|
||||
late final GitRebaseOperation result;
|
||||
for (var operation in GitRebaseOperation.values) {
|
||||
if (_rebaseOperationPointer.ref.type == operation.value) {
|
||||
result = operation;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return GitRebaseOperation.values.singleWhere(
|
||||
(e) => _rebaseOperationPointer.ref.type == e.value,
|
||||
);
|
||||
}
|
||||
|
||||
/// The commit ID being cherry-picked. This will be populated for
|
||||
|
|
|
@ -42,7 +42,7 @@ class Repository {
|
|||
}) {
|
||||
libgit2.git_libgit2_init();
|
||||
|
||||
int flagsInt = flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
if (bare) {
|
||||
flagsInt |= GitRepositoryInit.bare.value;
|
||||
|
@ -717,15 +717,12 @@ class Repository {
|
|||
.toDartString();
|
||||
}
|
||||
|
||||
var statuses = <GitStatus>{};
|
||||
// Skipping GitStatus.current because entry that is in the list can't be without changes
|
||||
// but `&` on `0` value falsly adds it to the set of flags
|
||||
for (var status in GitStatus.values.skip(1)) {
|
||||
if (entry.ref.status & status.value == status.value) {
|
||||
statuses.add(status);
|
||||
}
|
||||
}
|
||||
result[path] = statuses;
|
||||
result[path] = GitStatus.values
|
||||
.skip(1)
|
||||
.where((e) => entry.ref.status & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
|
||||
status_bindings.listFree(list);
|
||||
|
@ -747,19 +744,15 @@ class Repository {
|
|||
path: path,
|
||||
);
|
||||
|
||||
var statuses = <GitStatus>{};
|
||||
if (statusInt == GitStatus.current.value) {
|
||||
statuses.add(GitStatus.current);
|
||||
return {GitStatus.current};
|
||||
} else {
|
||||
// Skipping GitStatus.current because `&` on `0` value falsly adds it to the set of flags
|
||||
for (var status in GitStatus.values.skip(1)) {
|
||||
if (statusInt & status.value == status.value) {
|
||||
statuses.add(status);
|
||||
}
|
||||
}
|
||||
return GitStatus.values
|
||||
.skip(1)
|
||||
.where((e) => statusInt & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
|
||||
return statuses;
|
||||
}
|
||||
|
||||
/// Finds a merge base between two commits.
|
||||
|
@ -782,7 +775,7 @@ class Repository {
|
|||
/// respectively.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
List<Set<dynamic>> mergeAnalysis({
|
||||
List mergeAnalysis({
|
||||
required Oid theirHead,
|
||||
String ourRef = 'HEAD',
|
||||
}) {
|
||||
|
@ -791,29 +784,24 @@ class Repository {
|
|||
repoPointer: _repoPointer,
|
||||
oidPointer: theirHead.pointer,
|
||||
);
|
||||
|
||||
var result = <Set<dynamic>>[];
|
||||
var analysisSet = <GitMergeAnalysis>{};
|
||||
final analysisInt = merge_bindings.analysis(
|
||||
repoPointer: _repoPointer,
|
||||
ourRefPointer: ref.pointer,
|
||||
theirHeadPointer: head,
|
||||
theirHeadsLen: 1,
|
||||
);
|
||||
for (var analysis in GitMergeAnalysis.values) {
|
||||
if (analysisInt[0] & analysis.value == analysis.value) {
|
||||
analysisSet.add(analysis);
|
||||
}
|
||||
}
|
||||
result.add(analysisSet);
|
||||
result.add(
|
||||
{GitMergePreference.values.singleWhere((e) => analysisInt[1] == e.value)},
|
||||
|
||||
final analysisSet = GitMergeAnalysis.values
|
||||
.where((e) => analysisInt[0] & e.value == e.value)
|
||||
.toSet();
|
||||
final mergePreference = GitMergePreference.values.singleWhere(
|
||||
(e) => analysisInt[1] == e.value,
|
||||
);
|
||||
|
||||
commit_bindings.annotatedFree(head.value);
|
||||
ref.free();
|
||||
|
||||
return result;
|
||||
return [analysisSet, mergePreference];
|
||||
}
|
||||
|
||||
/// Merges the given commit(s) oid into HEAD, writing the results into the working directory.
|
||||
|
@ -870,21 +858,14 @@ class Repository {
|
|||
Set<GitMergeFlag> mergeFlags = const {GitMergeFlag.findRenames},
|
||||
Set<GitMergeFileFlag> fileFlags = const {GitMergeFileFlag.defaults},
|
||||
}) {
|
||||
var opts = <String, int>{};
|
||||
opts['favor'] = favor.value;
|
||||
opts['mergeFlags'] =
|
||||
mergeFlags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
opts['fileFlags'] =
|
||||
fileFlags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
final result = merge_bindings.mergeCommits(
|
||||
return Index(merge_bindings.mergeCommits(
|
||||
repoPointer: _repoPointer,
|
||||
ourCommitPointer: ourCommit.pointer,
|
||||
theirCommitPointer: theirCommit.pointer,
|
||||
opts: opts,
|
||||
);
|
||||
|
||||
return Index(result);
|
||||
favor: favor.value,
|
||||
mergeFlags: mergeFlags.fold(0, (acc, e) => acc | e.value),
|
||||
fileFlags: fileFlags.fold(0, (acc, e) => acc | e.value),
|
||||
));
|
||||
}
|
||||
|
||||
/// Reverts the given commit against the given "our" commit, producing an index that
|
||||
|
@ -924,26 +905,15 @@ class Repository {
|
|||
List<GitMergeFlag> mergeFlags = const [GitMergeFlag.findRenames],
|
||||
List<GitMergeFileFlag> fileFlags = const [GitMergeFileFlag.defaults],
|
||||
}) {
|
||||
var opts = <String, int>{};
|
||||
opts['favor'] = favor.value;
|
||||
opts['mergeFlags'] = mergeFlags.fold(
|
||||
0,
|
||||
(previousValue, element) => previousValue + element.value,
|
||||
);
|
||||
opts['fileFlags'] = fileFlags.fold(
|
||||
0,
|
||||
(previousValue, element) => previousValue + element.value,
|
||||
);
|
||||
|
||||
final result = merge_bindings.mergeTrees(
|
||||
return Index(merge_bindings.mergeTrees(
|
||||
repoPointer: _repoPointer,
|
||||
ancestorTreePointer: ancestorTree.pointer,
|
||||
ourTreePointer: ourTree.pointer,
|
||||
theirTreePointer: theirTree.pointer,
|
||||
opts: opts,
|
||||
);
|
||||
|
||||
return Index(result);
|
||||
favor: favor.value,
|
||||
mergeFlags: mergeFlags.fold(0, (acc, element) => acc | element.value),
|
||||
fileFlags: fileFlags.fold(0, (acc, element) => acc | element.value),
|
||||
));
|
||||
}
|
||||
|
||||
/// Cherry-picks the provided commit, producing changes in the index and working directory.
|
||||
|
@ -980,8 +950,7 @@ class Repository {
|
|||
String? directory,
|
||||
List<String>? paths,
|
||||
}) {
|
||||
final int strat =
|
||||
strategy.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int strat = strategy.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
if (refName == null) {
|
||||
checkout_bindings.index(
|
||||
|
@ -1057,8 +1026,7 @@ class Repository {
|
|||
int contextLines = 3,
|
||||
int interhunkLines = 0,
|
||||
}) {
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
final int flagsInt = flags.fold(0, (acc, e) => acc | e.value);
|
||||
|
||||
if (a is Tree && b is Tree) {
|
||||
return Diff(diff_bindings.treeToTree(
|
||||
|
@ -1173,15 +1141,11 @@ class Repository {
|
|||
String? directory,
|
||||
List<String>? paths,
|
||||
}) {
|
||||
int flags = reinstateIndex ? GitStashApply.reinstateIndex.value : 0;
|
||||
final int strat =
|
||||
strategy.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
stash_bindings.apply(
|
||||
repoPointer: _repoPointer,
|
||||
index: index,
|
||||
flags: flags,
|
||||
strategy: strat,
|
||||
flags: reinstateIndex ? GitStashApply.reinstateIndex.value : 0,
|
||||
strategy: strategy.fold(0, (acc, e) => acc | e.value),
|
||||
directory: directory,
|
||||
paths: paths,
|
||||
);
|
||||
|
@ -1210,15 +1174,11 @@ class Repository {
|
|||
String? directory,
|
||||
List<String>? paths,
|
||||
}) {
|
||||
int flags = reinstateIndex ? GitStashApply.reinstateIndex.value : 0;
|
||||
final int strat =
|
||||
strategy.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
stash_bindings.pop(
|
||||
repoPointer: _repoPointer,
|
||||
index: index,
|
||||
flags: flags,
|
||||
strategy: strat,
|
||||
flags: reinstateIndex ? GitStashApply.reinstateIndex.value : 0,
|
||||
strategy: strategy.fold(0, (acc, e) => acc | e.value),
|
||||
directory: directory,
|
||||
paths: paths,
|
||||
);
|
||||
|
@ -1292,12 +1252,9 @@ class Repository {
|
|||
required String name,
|
||||
Set<GitAttributeCheck> flags = const {GitAttributeCheck.fileThenIndex},
|
||||
}) {
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
return attr_bindings.getAttribute(
|
||||
repoPointer: _repoPointer,
|
||||
flags: flagsInt,
|
||||
flags: flags.fold(0, (acc, e) => acc | e.value),
|
||||
path: path,
|
||||
name: name,
|
||||
);
|
||||
|
@ -1532,10 +1489,13 @@ class Repository {
|
|||
/// let libgit2 to autodetect number of CPUs.
|
||||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
int pack(
|
||||
{String? path, void Function(PackBuilder)? packDelegate, int? threads}) {
|
||||
int pack({
|
||||
String? path,
|
||||
void Function(PackBuilder)? packDelegate,
|
||||
int? threads,
|
||||
}) {
|
||||
void packAll(PackBuilder packbuilder) {
|
||||
for (var object in odb.objects) {
|
||||
for (final object in odb.objects) {
|
||||
packbuilder.add(object);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,22 +78,15 @@ class RevSpec {
|
|||
|
||||
/// The right element of the revspec; must be freed by the user.
|
||||
Commit? get to {
|
||||
if (_revSpecPointer.ref.to == nullptr) {
|
||||
return null;
|
||||
} else {
|
||||
return Commit(_revSpecPointer.ref.to.cast());
|
||||
}
|
||||
return _revSpecPointer.ref.to == nullptr
|
||||
? null
|
||||
: Commit(_revSpecPointer.ref.to.cast());
|
||||
}
|
||||
|
||||
/// The intent of the revspec.
|
||||
Set<GitRevSpec> get flags {
|
||||
final flagInt = _revSpecPointer.ref.flags;
|
||||
var flags = <GitRevSpec>{};
|
||||
for (var flag in GitRevSpec.values) {
|
||||
if (flagInt & flag.value == flag.value) {
|
||||
flags.add(flag);
|
||||
}
|
||||
}
|
||||
return flags;
|
||||
return GitRevSpec.values
|
||||
.where((e) => _revSpecPointer.ref.flags & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,17 +18,13 @@ class RevWalk {
|
|||
/// Default sorting is reverse chronological order (default in git).
|
||||
List<Commit> walk() {
|
||||
final repoPointer = bindings.repository(_revWalkPointer);
|
||||
var result = <Commit>[];
|
||||
|
||||
final commits = bindings.walk(
|
||||
final pointers = bindings.walk(
|
||||
repoPointer: repoPointer,
|
||||
walkerPointer: _revWalkPointer,
|
||||
);
|
||||
for (var commit in commits) {
|
||||
result.add(Commit(commit));
|
||||
}
|
||||
|
||||
return result;
|
||||
return pointers.map((e) => Commit(e)).toList();
|
||||
}
|
||||
|
||||
/// Changes the sorting mode when iterating through the repository's contents.
|
||||
|
@ -37,11 +33,10 @@ class RevWalk {
|
|||
///
|
||||
/// Throws a [LibGit2Error] if error occured.
|
||||
void sorting(Set<GitSort> sorting) {
|
||||
final int sort = sorting.fold(
|
||||
0,
|
||||
(previousValue, e) => previousValue | e.value,
|
||||
bindings.sorting(
|
||||
walkerPointer: _revWalkPointer,
|
||||
sortMode: sorting.fold(0, (acc, e) => acc | e.value),
|
||||
);
|
||||
bindings.sorting(walkerPointer: _revWalkPointer, sortMode: sort);
|
||||
}
|
||||
|
||||
/// Adds a new root for the traversal.
|
||||
|
|
|
@ -141,20 +141,16 @@ class Submodule {
|
|||
GitSubmoduleIgnore ignore = GitSubmoduleIgnore.unspecified,
|
||||
}) {
|
||||
final repo = bindings.owner(_submodulePointer);
|
||||
|
||||
final resultInt = bindings.status(
|
||||
repoPointer: repo,
|
||||
name: name,
|
||||
ignore: ignore.value,
|
||||
);
|
||||
|
||||
var result = <GitSubmoduleStatus>{};
|
||||
for (var status in GitSubmoduleStatus.values) {
|
||||
if (resultInt & status.value == status.value) {
|
||||
result.add(status);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return GitSubmoduleStatus.values
|
||||
.where((e) => resultInt & e.value == e.value)
|
||||
.toSet();
|
||||
}
|
||||
|
||||
/// Copies submodule remote info into submodule repo.
|
||||
|
@ -242,17 +238,8 @@ class Submodule {
|
|||
|
||||
/// Returns the ignore rule that will be used for the submodule.
|
||||
GitSubmoduleIgnore get ignore {
|
||||
late GitSubmoduleIgnore result;
|
||||
final ruleInt = bindings.ignore(_submodulePointer);
|
||||
|
||||
for (var rule in GitSubmoduleIgnore.values) {
|
||||
if (ruleInt == rule.value) {
|
||||
result = rule;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return GitSubmoduleIgnore.values.singleWhere((e) => ruleInt == e.value);
|
||||
}
|
||||
|
||||
/// Sets the ignore rule for the submodule in the configuration.
|
||||
|
@ -269,17 +256,8 @@ class Submodule {
|
|||
///
|
||||
/// This value controls the behavior of the `git submodule update` command.
|
||||
GitSubmoduleUpdate get updateRule {
|
||||
late GitSubmoduleUpdate result;
|
||||
final ruleInt = bindings.updateRule(_submodulePointer);
|
||||
|
||||
for (var rule in GitSubmoduleUpdate.values) {
|
||||
if (ruleInt == rule.value) {
|
||||
result = rule;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
return GitSubmoduleUpdate.values.singleWhere((e) => ruleInt == e.value);
|
||||
}
|
||||
|
||||
/// Sets the update rule for the submodule in the configuration.
|
||||
|
|
|
@ -83,14 +83,10 @@ class Tree {
|
|||
int contextLines = 3,
|
||||
int interhunkLines = 0,
|
||||
}) {
|
||||
final repo = bindings.owner(_treePointer);
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
return Diff(diff_bindings.treeToWorkdir(
|
||||
repoPointer: repo,
|
||||
repoPointer: bindings.owner(_treePointer),
|
||||
treePointer: _treePointer,
|
||||
flags: flagsInt,
|
||||
flags: flags.fold(0, (acc, e) => acc | e.value),
|
||||
contextLines: contextLines,
|
||||
interhunkLines: interhunkLines,
|
||||
));
|
||||
|
@ -105,15 +101,11 @@ class Tree {
|
|||
int contextLines = 3,
|
||||
int interhunkLines = 0,
|
||||
}) {
|
||||
final repo = bindings.owner(_treePointer);
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
return Diff(diff_bindings.treeToIndex(
|
||||
repoPointer: repo,
|
||||
repoPointer: bindings.owner(_treePointer),
|
||||
treePointer: _treePointer,
|
||||
indexPointer: index.pointer,
|
||||
flags: flagsInt,
|
||||
flags: flags.fold(0, (acc, e) => acc | e.value),
|
||||
contextLines: contextLines,
|
||||
interhunkLines: interhunkLines,
|
||||
));
|
||||
|
@ -128,15 +120,11 @@ class Tree {
|
|||
int contextLines = 3,
|
||||
int interhunkLines = 0,
|
||||
}) {
|
||||
final repo = bindings.owner(_treePointer);
|
||||
final int flagsInt =
|
||||
flags.fold(0, (previousValue, e) => previousValue | e.value);
|
||||
|
||||
return Diff(diff_bindings.treeToTree(
|
||||
repoPointer: repo,
|
||||
repoPointer: bindings.owner(_treePointer),
|
||||
oldTreePointer: _treePointer,
|
||||
newTreePointer: tree.pointer,
|
||||
flags: flagsInt,
|
||||
flags: flags.fold(0, (acc, e) => acc | e.value),
|
||||
contextLines: contextLines,
|
||||
interhunkLines: interhunkLines,
|
||||
));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue