public void DirnameTest() { Assert.AreEqual("/a", PathLib.Dirname("/a/b/")); Assert.AreEqual("/a", PathLib.Dirname("/a/b")); Assert.AreEqual("/", PathLib.Dirname("/a")); Assert.AreEqual(".", PathLib.Dirname("")); Assert.AreEqual("/", PathLib.Dirname("/")); Assert.AreEqual("/", PathLib.Dirname("////")); Assert.AreEqual("//", PathLib.Dirname("//a")); Assert.AreEqual(".", PathLib.Dirname("foo")); }
private async ValueTask <long> IndexFile( IDbTransaction transaction, string path, FileHandle fileHandle, FileStats fileStats, FileChangeEventBuilder eventBuilder) { if (path == "/") { return(0); } var fileType = fileStats.Type; var isDirectory = fileStats.Type.HasFlag(FileType.Directory); var oldFile = await _databaseTable.SelectByPathAsync(transaction, path); if (oldFile == null) { long?parentId = await CreateDirectory(transaction, PathLib.Dirname(path), eventBuilder); var newId = await _databaseTable.InsertAsync( transaction, path, parentId, fileType.HasFlag(FileType.Directory), fileHandle.Identifier, fileStats.Hash.ContentTag); eventBuilder.Created(fileHandle); return(newId); } if (oldFile.IsDirectory != isDirectory) { await Delete(transaction, oldFile, eventBuilder); var parentId = await CreateDirectory(transaction, PathLib.Dirname(path), eventBuilder); var newId = await _databaseTable.InsertAsync( transaction, path, parentId, fileType.HasFlag(FileType.Directory), fileHandle.Identifier, fileStats.Hash.ContentTag); eventBuilder.Created(fileHandle); return(newId); } if (oldFile.IdentifierTag == null) { await _databaseTable.UpdateIdentifierTagByIdAsync( transaction, oldFile.Id, fileHandle.Identifier, fileStats.Hash.ContentTag); eventBuilder.Created(fileHandle); return(oldFile.Id); } if (oldFile.IdentifierTag != fileHandle.Identifier) { await Delete(transaction, oldFile, eventBuilder); var parentId = await CreateDirectory(transaction, PathLib.Dirname(path), eventBuilder); var newId = await _databaseTable.InsertAsync( transaction, path, parentId, fileType.HasFlag(FileType.Directory), fileHandle.Identifier, fileStats.Hash.ContentTag); eventBuilder.Created(fileHandle); return(newId); } if (oldFile.ContentTag != fileStats.Hash.ContentTag) { await _databaseTable.UpdateStatsByIdAsync( transaction, oldFile.Id, fileStats.Hash.ContentTag); await _databaseTable.DeletePropertyOnFileUpdated(transaction, oldFile.Id); eventBuilder.Changed(fileHandle); return(oldFile.Id); } return(oldFile.Id); }