From 627519a31ff43774520ef57e9c02c838a3adb409 Mon Sep 17 00:00:00 2001 From: Aleksey Kulikov Date: Wed, 11 Aug 2021 17:17:09 +0300 Subject: [PATCH] refactor(index): use enum for file modes --- lib/src/index.dart | 44 +++++++++++++++++++++++++++++++++++++++++--- lib/src/types.dart | 11 +++-------- test/index_test.dart | 2 +- 3 files changed, 45 insertions(+), 12 deletions(-) diff --git a/lib/src/index.dart b/lib/src/index.dart index 4317329..01efe16 100644 --- a/lib/src/index.dart +++ b/lib/src/index.dart @@ -3,6 +3,7 @@ import 'package:ffi/ffi.dart'; import 'bindings/libgit2_bindings.dart'; import 'bindings/index.dart' as bindings; import 'oid.dart'; +import 'types.dart'; import 'util.dart'; class Index { @@ -131,10 +132,47 @@ class IndexEntry { /// Returns id of the index entry as sha-1 hex. String get sha => _oidToHex(_indexEntryPointer.ref.id); - /// Mode of the index entry. - int get mode => _indexEntryPointer.ref.mode; + GitFilemode get mode { + switch (_indexEntryPointer.ref.mode) { + case 0: + return GitFilemode.undreadable; + case 16384: + return GitFilemode.tree; + case 33188: + return GitFilemode.blob; + case 33261: + return GitFilemode.blobExecutable; + case 40960: + return GitFilemode.link; + case 57344: + return GitFilemode.commit; + default: + return GitFilemode.undreadable; + } + } - set mode(int mode) => _indexEntryPointer.ref.mode = mode; + set mode(GitFilemode mode) { + switch (mode) { + case GitFilemode.undreadable: + _indexEntryPointer.ref.mode = 0; + break; + case GitFilemode.tree: + _indexEntryPointer.ref.mode = 16384; + break; + case GitFilemode.blob: + _indexEntryPointer.ref.mode = 33188; + break; + case GitFilemode.blobExecutable: + _indexEntryPointer.ref.mode = 33261; + break; + case GitFilemode.link: + _indexEntryPointer.ref.mode = 40960; + break; + case GitFilemode.commit: + _indexEntryPointer.ref.mode = 57344; + break; + } + } String _oidToHex(git_oid oid) { var hex = StringBuffer(); diff --git a/lib/src/types.dart b/lib/src/types.dart index 0a7bdfc..cb09611 100644 --- a/lib/src/types.dart +++ b/lib/src/types.dart @@ -1,11 +1,6 @@ enum ReferenceType { direct, symbolic } +enum GitFilemode { undreadable, tree, blob, blobExecutable, link, commit } + /// Valid modes for index and tree entries. -abstract class GitFilemode { - static const int unreadable = 0; - static const int tree = 16384; - static const int blob = 33188; - static const int blobExecutable = 33261; - static const int link = 40960; - static const int commit = 57344; -} + diff --git a/test/index_test.dart b/test/index_test.dart index 861ee36..dec2262 100644 --- a/test/index_test.dart +++ b/test/index_test.dart @@ -38,7 +38,7 @@ void main() { }); test('returns mode of index entry', () { - expect(index['file'].mode, 33188); + expect(index['file'].mode, GitFilemode.blob); }); test('returns index entry at provided position', () {