summaryrefslogtreecommitdiff
path: root/CHANGELOG.adoc
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2021-10-04 19:21:47 +0700
committerShulhan <ms@kilabit.info>2021-10-04 19:21:47 +0700
commit7cbb6e520d7ac93a3ba864580655fbb7b3207b12 (patch)
treea7c3c482c90298ceb566b07ed80890b31c6b3d57 /CHANGELOG.adoc
parenta4d62261e82d3b7dd036cc83be407b73b321ddae (diff)
downloadpakakeh.go-0.30.0.tar.xz
Release share v0.30.0 (2021-10-04)v0.30.0
=== Breaking changes * lib/io: separate FileState for updated mode and content Previously, when content of file being watched is modified, it will trigger the callback with State set to FileStateModified. When the mode of file is modified, it will also trigger the callback with the same state. This changes separated those state into two kind: FileStateUpdateMode for update on file mode, and FileStateUpdateContent for update on file content. === New features * lib/memfs: export the Node Update method The Update method update the node metadata or content based on new file information. It accept two parameters: the new file information, newInfo, and maximum file size, maxFileSize. The newInfo parameter is optional, if its nil, it will read the file information based on node's SysPath. The maxFileSize parameter is also optional. If its negative, the node content will not be updated. If its zero, it will default to 5 MB. There are two possible changes that will happen: its either change on mode or change on content (size and modtime). Change on mode will not affect the content of node. * lib/strings: add function Alnum The Alnum remove non alpha-numeric character from text and return it. Its accept the string to be cleanup and boolean parameter withSpace. If withSpace is true then white space is allowed, otherwise it would also be removed from text. === Bug fixes * lib/memfs: fix symlink to directory not included on mount During mounting and scanning a directory, if the node is symlink to a directory, the isIncluded will return false because the node is not a file nor directory. The fix is to check if node mode is symlink first and then get the the real stat. * lib/io: fix NewWatcher when called DirWatcher When NewWatcher called from DirWatcher's Start(), it will called NewNode with nil parent parameter. If the parent parameter is nil on NewNode the SysPath of new node will be set to the FileInfo.Name() instead of full or relative path based on current working directory. Any operation using new node SysPath will failed because the path does not exist or reachable from current directory. For example, let say we have the following directory tree, testdata | +--- A | +--- B We then set DirWatcher Root to "testdata" from current directory. The DirWatcher Start then iterate over all child of "testdata" directory, and call NewWatcher("testdata/A", ...). On the NewWatcher, it will call NewNode(nil, FileInfo, -1). Now since the parent is nil, the Node.SysPath will be set to FileInfo.Name() or base name of the file, which is "A". Later, when node content need to be read, ioutil.ReadFile("A") will fail because the path to "A" does not exist on current directory. This fix require to force the parameter "parent" on NewNode to be required. * lib/memfs: fix possible data race on PathNode During Memfs Get(), if the node returned by PathNodes.Get() is null, the memfs instance will try to refresh the directory tree. In case the requested path exist, the memfs will write to PathNodes through AddChild() At the same time, there maybe a request to access another path, which cause both read and write occured. * lib/memfs: fix NewNode if node is symlink to directory Previously, if a symlink point to directory the memfs NewNode function will return an error, AddChild wui: NewNode: read x/y: is a directory which cause the files inside y cannot be scanned (404). This commit fix this issue by checking if the original node mode is a directory and return immediately. === Enhancements * lib/memfs: check error on File Close on GoGenerate Previously, we ignore the error for call to Close when there is an error in previous operation. This changes check the error returned from Close and add it to the returned error message. While at it, use consisten prefix for all returned error: "MemFS.GoGenerate". * lib/http: support server caching file system using ETag If the Server handle file system using MemFS, server will set the ETag [1] header using the file epoch as value. On the next request, server will compare the request header If-None-Match with the requested file epoch. If its equal server will return the response as 304 StatusNotModified. [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag * lib/xmlrpc: convert the value using Sprintf on GetFieldAsString Previously, the GetFieldAsString will return empty string if the Value type is not string. In this commit, we force the value to be string by converted it using fmt.Sprintf. * math/big: add some examples of Rat.Int64() and RoundToNearestAway === Chores * github: update the Go version to v1.17.1 * lib/strings: update comment and example of TrimAlnum
Diffstat (limited to 'CHANGELOG.adoc')
-rw-r--r--CHANGELOG.adoc147
1 files changed, 147 insertions, 0 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 857bbb42..0c353ac1 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -3,6 +3,153 @@
This library is released every month, usually at the first week of month.
+== share v0.30.0 (2021-10-04)
+
+=== Breaking changes
+
+* lib/io: separate FileState for updated mode and content
+
+ Previously, when content of file being watched is modified, it will
+ trigger the callback with State set to FileStateModified. When the
+ mode of file is modified, it will also trigger the callback with
+ the same state.
+
+ This changes separated those state into two kind: FileStateUpdateMode
+ for update on file mode, and FileStateUpdateContent for update on
+ file content.
+
+=== New features
+
+* lib/memfs: export the Node Update method
+
+ The Update method update the node metadata or content based on new
+ file information.
+ It accept two parameters: the new file information, newInfo, and
+ maximum file size, maxFileSize.
+
+ The newInfo parameter is optional, if its nil, it will read the file
+ information based on node's SysPath.
+
+ The maxFileSize parameter is also optional.
+ If its negative, the node content will not be updated.
+ If its zero, it will default to 5 MB.
+
+ There are two possible changes that will happen: its either change on
+ mode or change on content (size and modtime).
+ Change on mode will not affect the content of node.
+
+* lib/strings: add function Alnum
+
+ The Alnum remove non alpha-numeric character from text and return it.
+ Its accept the string to be cleanup and boolean parameter withSpace.
+ If withSpace is true then white space is allowed, otherwise it would
+ also be removed from text.
+
+=== Bug fixes
+
+* lib/memfs: fix symlink to directory not included on mount
+
+ During mounting and scanning a directory, if the node is symlink to a
+ directory, the isIncluded will return false because the node is not
+ a file nor directory.
+
+ The fix is to check if node mode is symlink first and then get the
+ the real stat.
+
+* lib/io: fix NewWatcher when called DirWatcher
+
+ When NewWatcher called from DirWatcher's Start(), it will called NewNode
+ with nil parent parameter. If the parent parameter is nil on NewNode
+ the SysPath of new node will be set to the FileInfo.Name() instead of
+ full or relative path based on current working directory.
+
+ Any operation using new node SysPath will failed because the path
+ does not exist or reachable from current directory.
+
+ For example, let say we have the following directory tree,
+
+ testdata
+ |
+ +--- A
+ |
+ +--- B
+
+ We then set DirWatcher Root to "testdata" from current directory.
+ The DirWatcher Start then iterate over all child of "testdata" directory,
+ and call NewWatcher("testdata/A", ...). On the NewWatcher, it will
+ call NewNode(nil, FileInfo, -1). Now since the parent is nil,
+ the Node.SysPath will be set to FileInfo.Name() or base name of the file,
+ which is "A".
+
+ Later, when node content need to be read, ioutil.ReadFile("A") will
+ fail because the path to "A" does not exist on current directory.
+
+ This fix require to force the parameter "parent" on NewNode to be
+ required.
+
+* lib/memfs: fix possible data race on PathNode
+
+ During Memfs Get(), if the node returned by PathNodes.Get() is null,
+ the memfs instance will try to refresh the directory tree. In case
+ the requested path exist, the memfs will write to PathNodes through
+ AddChild()
+
+ At the same time, there maybe a request to access another path, which
+ cause both read and write occured.
+
+* lib/memfs: fix NewNode if node is symlink to directory
+
+ Previously, if a symlink point to directory the memfs NewNode function
+ will return an error,
+
+ AddChild wui: NewNode: read x/y: is a directory
+
+ which cause the files inside y cannot be scanned (404).
+
+ This commit fix this issue by checking if the original node mode is a
+ directory and return immediately.
+
+=== Enhancements
+
+* lib/memfs: check error on File Close on GoGenerate
+
+ Previously, we ignore the error for call to Close when there is an
+ error in previous operation.
+
+ This changes check the error returned from Close and add it to the
+ returned error message.
+
+ While at it, use consisten prefix for all returned error:
+ "MemFS.GoGenerate".
+
+* lib/http: support server caching file system using ETag
+
+ If the Server handle file system using MemFS, server will set the
+ ETag [1] header using the file epoch as value.
+
+ On the next request, server will compare the request header
+ If-None-Match with the requested file epoch. If its equal server will
+ return the response as 304 StatusNotModified.
+
+ [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag
+
+* lib/xmlrpc: convert the value using Sprintf on GetFieldAsString
+
+ Previously, the GetFieldAsString will return empty string if the
+ Value type is not string.
+
+ In this commit, we force the value to be string by converted it using
+ fmt.Sprintf.
+
+* math/big: add some examples of Rat.Int64() and RoundToNearestAway
+
+=== Chores
+
+* github: update the Go version to v1.17.1
+
+* lib/strings: update comment and example of TrimAlnum
+
+
== share v0.29.2 (2021-09-06)
=== Bug fixes