summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-04-18Release pakakeh.go v0.60.1 (2025-04-18)v0.60.1Shulhan
=== lib/bytes [NEW FEATURE] Add method Peek to Parser. + The Peek method take a look on n bytes inside the buffer without using delimiters. The returned bytes may empty or have length less than n.
2025-04-18go.mod: update all dependenciesShulhan
2025-04-18lib/bytes: add method Peek to ParserShulhan
The Peek method take a look on n bytes inside the buffer without using delimiters. The returned bytes may empty or have length less than n.
2025-04-18lib/bytes: complete the SkipLine example until the endShulhan
This is to see the return value when no token can be parsed and to make the test coverage become 100%.
2025-02-04all: remove the nolint tagsShulhan
The "nolint" tag is used to ignore lines from being processed by golangci-lint. Since we are not using golangci-lint anymore, now and in the future, those lines can be removed.
2025-02-01Release pakakeh.go v0.60.0 (2025-02-01)v0.60.0Shulhan
Some changes that affected almost all packages are * replacing "interface{}" with "any" (added since Go 1.18), * using for-range on numeric value (supported on Go 1.22). === lib/bytes [BREAKING CHANGES] We remove Copy and Concat functions in favor of standard library. Since Go 1.20, the standard bytes package have the Copy function. Since Go 1.22, the standard slices package have the Concat function. [BREAKING CHANGES] We also remove "lib/bytes.AppendXxx", "lib/bytes.ReadXxx", and "lib/bytes.WriteXxx" in favor of standard library. Since Go 1.19, package "encoding/binary" support appending byte order. The ReadXxx and WriteXxx can be replaced with standard library BigEndian/LittleEndian UintXxx and PutUintXxx. === lib/debug [BREAKING CHANGES] The global Value variable has been removed. Using global variable inside one package is a mistake. If, for example, package X set debug.Value to 1, another packages that does need to be debugged will print unnecessary log messages. === lib/dns [BUG FIX] We fix unpacking HTTPS where the response answers contains RR other than SVCB parameters, for example CNAME. [ENHANCEMENT] This release now detect invalid response header earlier, like invalid op code and response code, before we continue unpacking the rest data. Previously, we unpack the header and then question without detecting whether the header itself is valid or not. This cause the unpacking question return an error like label length overflow at index xxx One of the case is when someone sent random or HTTP request to DoT port. [ENHANCEMENT] In the logging part, we improve the logging prefix on serveTCPClient. The serveTCPClient is used to serve TCP and DoT clients. Previously, the error returned from this method is prefixed based on the kind, for example serveTCPClient TCP: ... serveTCPClient DoT: ... This changes pass the log prefix to the method so now it become serveTCPClient: ... serveDoTClient: ... === lib/http [ENHANCEMENT] On server with TryDirect is true, a GET request to a directory now always rescan the content and the generate the new "index.html". In the generated "index.html" we display the file time in UTC instead of local time. The ParseContentRange function now return an error instead of nil "*RangePosition". === lib/goanalysis [NEW FEATURE] Package goanalysis implement go static analysis using [Analyzer] that are not included in the default "go vet", but included in the [passes] directory, including: fieldalignment, nilness, reflectvaluecompare, shadow, sortslice, unusedwrite, and waitgroup. This package is not mean to be imported directly by other package except main, like we have in [cmd/gocheck]. === lib/hunspell This package has been renamed to "_hunspell". The hunspell is still in progress and we did not have time to continue it, so we rename it to "_hunspell" for now to prevent it being checked by linters or being imported. === lib/memfs [BUG FIX] Fix possible panic on AddChild if path is not included. === lib/play [ENHANCEMENT] One of the major issue that we previously have is the Run and Test functions can write file in any unsafe path. Another issue is default GoVersion and Timeout is set on the package level. This release introduce new type "Go" as the top level type that can be instantiate with different Root, GoVersion, and Timeout. The instance of Go then can Format, Run, or Test the Go code in their own scope. Any request to Run or Test Go code that requires writing new files now joined with the [GoOptions.Root] first. If the final absolute path does not have Root as the prefix it will return an error [os.ErrPermission]. This fix possible security issue where file may be written outside of the Root directory. === lib/test [ENHANCEMENT] Inside the Assert, we call the [T.Helper] method. The Helper method mark the Assert function as test helper, which when printing file and line information, the stack trace from Assert function will be skipped. This remove manual lines skipping that previously we have.
2025-01-26lib/goanalysis: package to complement "go vet"Shulhan
Package goanalysis implement go static analysis using [Analyzer] that are not included in the default "go vet", but included in the [passes] directory, including: fieldalignment, nilness, reflectvaluecompare, shadow, sortslice, unusedwrite, and waitgroup. This package is not mean to be imported directly by other package except main, like we have in [cmd/gocheck]. The rest (and previous) of the changes are affect running gocheck on it.
2025-01-26lib/memfs: return nil on AddChild if path is not includedShulhan
Checking if child is nil is impossible here, because the AddChild create and return new child.
2025-01-25lib/http: return an error when parsing Content-RangeShulhan
Instead of returning nil only, return the error to report the input parameter back to the caller.
2025-01-25lib/hunspell: rename the package to "_hunspell"Shulhan
The hunspell is still in progress and we did not have time to continue it, so we rename it to _hunspell to prevent it being checked by linters or being imported.
2025-01-25go.mod: update all dependenciesShulhan
2025-01-25lib/slices: copy the random test data on each runShulhan
Since the "sorts.Ints", "IndirectSort", and "InplaceMergesort" store the sorted value in-place, it is incorrect to run the sort again using the same slice, the second run will use sorted input. While at it, call ResetTime in testing InplaceMergesort for float64.
2025-01-23all: use for-range with numericShulhan
Go 1.22 now support for-range on numeric value.
2025-01-23all: replace "interface{}" with "any"Shulhan
2025-01-23lib/net: remove old build tagsShulhan
2025-01-23lib/debug: remove the global Value variableShulhan
Using global variable inside one package is a mistake. If, for example, package X set debug.Value to 1, another packages that does need to be debugged will print unnecessary log messages.
2025-01-23all: replace [lib/bytes.WriteXxx] with standard libraryShulhan
The "encoding/binary.BigEndian" in standard library provides method PutXxx that do the same thing.
2025-01-23all: replace "lib/bytes.ReadXxx" with standard libraryShulhan
Package "encoding/binary" from standard library support reading integer from bytes using BigEndian, LittleEndian variables.
2025-01-23all: replace "lib/bytes.AppendXxx" with standard libraryShulhan
Since Go 1.19, package "encoding/binary.BigEndian" support appending byte order.
2025-01-22make: do not ignore error when running "go vet"Shulhan
2025-01-22lib/bytes: replace Copy and Concat with standard libraryShulhan
Since Go 1.20, the standard bytes package have the Copy function. Since Go 1.22, the standard slices package have the Concat function.
2025-01-22lib/play: use [T.Error] instead of [T.Fatal] on non-test goroutineShulhan
Using [T.Fatal] on non-test goroutines is not recommended and caught by go vet.
2025-01-22lib/http: always refresh a directory on GET requestShulhan
On server with TryDirect is true, any GET request to a directory should always rescan the content and the generate the new index.html. While at it, return the generated time in UTC instead of local time.
2025-01-22lib/test: call Helper method inside AssertShulhan
The Helper method mark the Assert function as test helper, which when printing file and line information, the stack trace from Assert function will be skipped. This remove manual lines skipping that previously we have.
2025-01-17lib/dns: improve the logging prefix on serveTCPClientShulhan
The serveTCPClient is used to serve TCP and DoT clients. Previously, the error returned from this method is prefixed based on the kind, for example serveTCPClient TCP: ... serveTCPClient DoT: ... This changes pass the log prefix to the method so now it become serveTCPClient: ... serveDoTClient: ...
2025-01-17lib/dns: detect invalid header earlierShulhan
Previously, we unpack the header and then question without detecting whether the header itself is valid or not, for example the op-code, the response code. This cause the unpacking question return an error like label length overflow at index xxx One of the case is when someone sent random or HTTP request to DoT port.
2025-01-16lib/play: handle writing files outside the [GoOptions.Root]Shulhan
Any request to Run or Test Go code that requires writing new files will be joined with the [GoOptions.Root] first. If the final absolute path does not have Root as the prefix it will return an error [os.ErrPermission].
2025-01-16lib/play: refactor functions as methods of type GoShulhan
One of the major issue that we previously have is the Run and Test functions can write file in any unsafe path. Another issue is changing the default GoVersion and Timeout is set on the package level. This changes introduce new type Go as the top level type that can be instantiate with different Root, GoVersion, and Timeout. The instance of Go then can Format, Run, or Test the Go code in their own scope.
2025-01-15lib/dns: fix unpacking resource data on HTTPS recordShulhan
Instead of passing the whole packet, pass the packet for unpacking target name only and rdata for unpacking the SVCB HTTPS record.
2025-01-06Release pakakeh.go v0.59.0 (2025-01-06)v0.59.0Shulhan
This is the first release of pakakeh.go on the year 2025. There are many new features and cleaning up, including packages that merged into single package with help of type parameters. The first major changes is indicated by using "go 1.23.4" as minimum Go version in this module, to allow us using new packages like "slices" and "maps". In this release notes, we try new format. Instead of grouping each changes by Breaking changes, New features, Bug fixes, Enhancements, and/or Chores; we group them by package. Each paragraph in the package sections will be prefixed with tag "[BREAKING CHANGE]", "[NEW FEATURE]", "[BUG FIX]", "[ENHANCEMENT]", "[CHORE]" to indicates the type of changes. === lib/binary The "lib/binary] is new package that complement the standard binary package. [NEW FEATURE] Implement append-only binary that encode the data using [binary.Writer]. We call them "Apo" for short. [NEW FEATURE] Implement buffer for reading/writing in BigEndian. The BigEndianBuffer provides backing storage for writing (most of) Go native types into binary in big-endian order. The zero value of BigEndianBuffer is an empty buffer ready to use. The following basic types are supported for Write and Read: bool, byte, int, float, complex, and string. The slice and array are also supported as long as the slice’s element type is one of basic types. === lib/bytes [BREAKING CHANGE] In the "lib/bytes" we split the hexdump related functions to separate package, "lib/hexdump". === lib/floats64 [BREAKING CHANGE] This package has been removed, merged into "slices" package. === lib/hexdump [NEW FEATURE] Package hexdump implements reading and writing bytes from and into hexadecimal number. It support parsing output from hexdump(1) tool. === lib/http [NEW FEATURE] In the [lib/http.Client] we add new method Transport that return default HTTP Transport. The returned [http.Transport] is created after the Client instantiated. Their value can be customized by user when needed, which should affect the Transport inside the Client. === lib/ints [BREAKING CHANGE] This package has been removed, merged into "slices" package. === lib/ints64 [BREAKING CHANGE] This package has been removed, merged into "slices" package. === lib/memfs [ENHANCEMENT] In the "lib/memfs" we refactoring the Watch method to use the new "watchfs/v2" package. [BREAKING CHANGE] The old Watcher and DirWatcher types now moved to watchfs package. This changes require exporting method [memfs.MemFS.UpdateContent]. === lib/numbers [CHORE] In the package level, we remove unused README and LICENSE files. This package README has been merged into the package documentation and the LICENSE is same with the module one. We also remove some package documentation that should be in "lib/slices". === lib/play [NEW FEATURE] The [lib/play] now has function and HTTP handler to run Go test code. Since the test must run inside the directory that contains the Go file to be tested, the [HTTPHandleTest] API accept the following request format, { "goversion": <string>, "file": <string>, "body": <string>, "without_race": <boolean> } The "file" field define the path to the "_test.go" file, default to "test_test.go" if its empty. The "body" field contains the Go code that will be saved to "file". The test will run, by default, with "go test -count=1 -race $dirname" where "$dirname" is the path directory to the "file" relative to where the program is running. If "without_race" is true, the test command will not run with "-race" option. [ENHANCEMENT] On package level, the home and cache directory now initialized on package init since there are never changes when program running. If Go failed to get the home and cache it will be set to system temporary directory. [ENHANCEMENT] We also simplify running Go code by removing the field pid in the struct command that wait for process ID. Instead we execute cmd with Run directly. In the Run function, we use the UnsafeRun to store temporary directory and move the statements that writes go.mod and main.go into the method writes of Request. This remove unnecessary unsafeRun function. === lib/reflect [BREAKING CHANGE] This release changes the Equal signature from "Equal(v any) bool" to "Equal(v any) error". The reason for this changes is to force the method to return an error message that is understand-able by caller. === lib/slices [NEW FEATURE] Package "lib/ints", "lib/ints64", and "lib/floats64" are merged into "slices". Now that Go has type parameter, we can use it to use the same function that accept different types for working with slice of int, int64, and float64. === lib/ssh [ENHANCEMENT] In the lib/ssh, we implement Run with context internally. Instead of depends on fork of crypto with CL that needs proposal, we implement them in here so we can update crypto module to the latest release. === lib/watchfs The watchfs package now contains the original, v1, of the Watcher and DirWatcher types from "lib/memfs". === lib/watchfs/v2 [NEW FEATURE] The "lib/watchfs/v2" is the new package that implement new file and directory watcher, that replace the Watcher and DirWatcher in the "lib/memfs". The new implementation, FileWatcher, much more simple than what we have in [memfs.Watcher]. The new directory watcher, DirWatcher, scan the content of directory in [fs.DirWatcherOptions.Root] recursively for the files to be watched, using the [fs.DirWatcherOptions.Includes] field. A single file, [fs.DirWatcherOptions.FileWatcherOptions.FilePath], will be watched for changes that trigger re-scanning the content of Root recursively. The result of re-scanning is list of the Includes files (only files not new directory) that are changes, which send to channel C. On each [os.FileInfo] received from C, a deleted file have [os.FileInfo.Size] equal to [NodeFlagDeleted]. The channel send an empty slice if no changes. The implementation of file changes in this code is naive, using loop and comparison of mode, modification time, and size; at least it should works on most operating system.
2025-01-06lib/memfs: remove GoEmbed test that generate dynamic timesShulhan
The GoEmbed test that write Go embedded code into "internal/test/embed/" may create unnecessary changes when the test run on new clone of this repository, or when we run "go test" again on that package after rebasing.
2025-01-06lib/binary: implement buffer for reading/writing in BigEndianShulhan
BigEndianBuffer provides backing storage for writing (most of) Go native types into binary in big-endian order. The zero value of BigEndianBuffer is an empty buffer ready to use. The following basic types are supported for Write and Read: bool, byte, int, float, complex, and string. The slice and array are also supported as long as the slice's element type is one of basic types.
2024-12-29all: update READMEShulhan
Add and remove missing packages under api/, program under cmd/, and library under lib/ directory.
2024-12-29cmd/ansua: add and update documentationShulhan
2024-12-29lib/numbers: fix package documentation that should be lib/slicesShulhan
2024-12-29all: merge package "lib/floats64" into "slices"Shulhan
Now that Go has type parameter, we can use it to use the same function that accept different types for working with slice of float64.
2024-12-29all: merge package "lib/ints" and "lib/ints64" into "slices"Shulhan
Now that Go has type parameter, we can use it to use the same function that accept different types for working with slice of int, int64.
2024-12-29lib/numbers: remove unused README and LICENSEShulhan
This package README has been merged into the package and the LICENSE is same with the module.
2024-12-28lib/bytes: split the hexdump related functions to separate packageShulhan
Package hexdump implements reading and writing bytes from and into hexadecimal number. It support parsing output from hexdump(1) tool.
2024-12-28lib/binary: implement append-only binary fileShulhan
The binary is new package that complement the standard binary package Currently it implement append-only binary that encode the data using [binary.Writer]. We call them "Apo" for short.
2024-12-28lib/watchfs: cleaning up, merge shared identifiers to package fileShulhan
2024-12-28lib/watchfs: detach the options from memfsShulhan
2024-12-28lib/memfs: move the old Watcher and DirWatcher to watchfsShulhan
The watchfs package now contains the original, v1, of the Watcher and DirWatcher types. This changes require exporting method [memfs.MemFS.UpdateContent].
2024-12-28lib/memfs: refactoring Watch to use "watchfs/v2"Shulhan
2024-12-28watchfs/v2: implement new directory watcherShulhan
DirWatcher scan the content of directory in [fs.DirWatcherOptions.Root] recursively for the files to be watched, using the [fs.DirWatcherOptions.Includes] field. A single file, [fs.DirWatcherOptions.FileWatcherOptions.FilePath], will be watched for changes that will trigger re-scanning the content of Root recursively. The result of re-scanning is list of the Includes files (only files not new directory) that are changes, which will be send to channel C. On each [os.FileInfo] received from C, a deleted file have [os.FileInfo.Size] equal to [NodeFlagDeleted]. The channel will send an empty slice if no changes. The implementation of file changes in this code is naive, using loop and comparison of mode, modification time, and size; at least it should works on most operating system.
2024-12-28watchfs/v2: implement new file watcherShulhan
The watchfs package contains new FileWatcher, more simple than what we have in [memfs.Watcher].
2024-12-28go.mod: update Go toolchains to version 1.23.4Shulhan
We will needs slices and maps packages that are available since Go 1.23.
2024-12-28lib/test: update comment to show link on reflect.EqualerShulhan
2024-12-28lib/reflect: refactor the Equaler method EqualShulhan
This changes the Equal signature from "Equal(v any) bool" to "Equal(v any) error". The reason for this changes is to force the method to return an error message that is understand-able by caller. While at it, simplify checking for Equaler interface in internal doEqualStruct function.
2024-12-28lib/http: simplify setting Client TransportShulhan
While at it, set the ExpectContinueTimeout using the Timeout from ClientOptions.