<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pakakeh.go, branch v0.29.1</title>
<subtitle>Collections of packages and tools for working with Go programming language.</subtitle>
<id>http://git.kilabit.info/pakakeh.go/atom?h=v0.29.1</id>
<link rel='self' href='http://git.kilabit.info/pakakeh.go/atom?h=v0.29.1'/>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/'/>
<updated>2021-08-06T13:08:14Z</updated>
<entry>
<title>Release share v0.29.1 (2021-08-06)</title>
<updated>2021-08-06T13:08:14Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T13:08:14Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=594f90a0073aa20deb7971f68c63a23a3fbb31d6'/>
<id>urn:sha1:594f90a0073aa20deb7971f68c63a23a3fbb31d6</id>
<content type='text'>
Revert the "lib/errors: return the internal error only if its not nil on
Unwrap".

Returning instance of e on Unwrap will cause recursive call.

The correct solution to convert an error to errors.E is by implementing
the As method.
</content>
</entry>
<entry>
<title>lib/http: update the errors.As test on EndpointResponse</title>
<updated>2021-08-06T13:03:43Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T13:03:43Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=7a94740956e9a018a81a8fb05dadbc9be4ef4810'/>
<id>urn:sha1:7a94740956e9a018a81a8fb05dadbc9be4ef4810</id>
<content type='text'>
Test errors.As with uninitialized variable of *errors.E.
</content>
</entry>
<entry>
<title>lib/errrors: implement method As</title>
<updated>2021-08-06T13:02:18Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T13:02:18Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=daa6c7dc238bcdd2026441d559ad7f130c5056e0'/>
<id>urn:sha1:daa6c7dc238bcdd2026441d559ad7f130c5056e0</id>
<content type='text'>
The As method will set the target to instance of E only if only target
is **E.
</content>
</entry>
<entry>
<title>Revert "lib/errors: return the internal error only if its not nil on Unwrap"</title>
<updated>2021-08-06T11:50:20Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T11:50:20Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=5024d1c078f9eea37a7cbcb744b9b5ab7acfb127'/>
<id>urn:sha1:5024d1c078f9eea37a7cbcb744b9b5ab7acfb127</id>
<content type='text'>
This reverts commit 8379a3ac6385e811410ec512b414655926163c8d.
</content>
</entry>
<entry>
<title>Release share v0.29.0 (2021-08-06)</title>
<updated>2021-08-06T11:20:20Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T11:20:20Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=46847b5ad2470ff92e5d7e3c3a0cf090625ecba9'/>
<id>urn:sha1:46847b5ad2470ff92e5d7e3c3a0cf090625ecba9</id>
<content type='text'>
===  New feature

ssh/sftp: new package that implement SSH File Transport Protocol v3

The sftp package extend the golang.org/x/crypto/ssh package by
implementing "sftp" subsystem using the ssh.Client connection.

===  Breaking changes

*  text/diff: add functions to compare raw bytes as text and text.Lines

   This changes refactoring some functions, notably,

   * Rename Bytes function to IsEqual
   * Rename Lines function to Bytes
   * Add function Text that compare two text (raw bytes)
   * Add function Lines that compare two instances of text.Lines

===  Enhancements

*  lib/mlog: add function and method Panicf

   The Panicf method is equal to Errf followed by panic.  This signature
   follow the log.Panicf convention.

*  lib/text: implement function to parse raw bytes into Lines

*  lib/text: implement Stringer on Chunk and Line types

*  lib/memfs: implement json.Marshaler on MemFS and Node

   Previously, without MarshalJSON, encoding the MemFS or Node object will
   result in incomplete information, for example, missing name, modification
   time, and size.

   This commit implement the json.Marshaler in MemFS which encode the
   PathNode sorted by keys in ascending order.

*  lib/bytes: print the ASCII character on the right side on PrintHex

   Previously, PrintHex only print the hex value of all bytes with
   specified length.

   This changes also print any printables ASCII characters (char 33 through
   126) in the right side column to view readable contents.

*  lib/totp: lib/totp: increase the maximum steps back on Verify from 2 to 20

   The value 20 means the Verify will check maximum 20 TOTP tokens or 10
   minutes to the past.

*  lib/http: check request path as HTML file on getFSNode

   Previously, if the request path is not exist we check if request
   contains index.html and if still not exist we return nil.

   This commit add another check by appending ".html" to the request path.

   So, for example, if path "/x" not exist in memfs, we check if
   "/x/index.html". If its still not exist, we check "/x.html".

===  Bug fix

*  lib/errors: return the internal error only if its not nil on Unwrap

   If the internal error is nil, the Unwrap method will return the instance
   of e itself.
</content>
</entry>
<entry>
<title>ssh/sftp: fix linter warnings</title>
<updated>2021-08-06T11:19:56Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T11:19:56Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=589c7517d00bebe3beeb614f6bd166b0b44317e2'/>
<id>urn:sha1:589c7517d00bebe3beeb614f6bd166b0b44317e2</id>
<content type='text'>
Comment out unhandled packet types, the Extended and ExtendedReply.
</content>
</entry>
<entry>
<title>lib/http: fix return value on getFSNode</title>
<updated>2021-08-06T11:17:16Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T11:17:16Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=2e41c999ec08bbf01751614e4f93085e6656e6b4'/>
<id>urn:sha1:2e41c999ec08bbf01751614e4f93085e6656e6b4</id>
<content type='text'>
On c8dd20254d, we check the request path by adding .html suffix but
forgot to return node if its not nil.
</content>
</entry>
<entry>
<title>lib/mlog: add function and method Panicf</title>
<updated>2021-08-06T11:04:14Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-08-06T11:04:14Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=f7a4706b9172b23c07bdbb3d1146c8c05d212412'/>
<id>urn:sha1:f7a4706b9172b23c07bdbb3d1146c8c05d212412</id>
<content type='text'>
The Panicf method is equal to Errf followed by panic.  This signature
follow the log.Panicf convention.
</content>
</entry>
<entry>
<title>lib/memfs: fix the unit test due to different modTime result after clone</title>
<updated>2021-07-30T14:05:07Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-07-30T14:05:07Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=e17a2bbf4b5efcbeb26654db660455d284070450'/>
<id>urn:sha1:e17a2bbf4b5efcbeb26654db660455d284070450</id>
<content type='text'>
If someone clone this repository, all the files modTime in the directory
testdata will be set to the current time.  This will cause the test
fail.

This changes fix this issue by setting the modTime of all Node to static,
fixed time value.
</content>
</entry>
<entry>
<title>lib/memfs: add internal method to reset modTime</title>
<updated>2021-07-30T14:03:39Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2021-07-30T14:03:39Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/pakakeh.go/commit/?id=5e34c75a8fd5c89d7fd9aa5951341b42b4edbe63'/>
<id>urn:sha1:5e34c75a8fd5c89d7fd9aa5951341b42b4edbe63</id>
<content type='text'>
The resetAllModTime method set the modTime field from Root to its child
to the value in parameter.
</content>
</entry>
</feed>
