From c1f2505861f3f96a183ee86a310fe00733f39eae Mon Sep 17 00:00:00 2001
From: web3-bot <web3-bot@protocol.ai>
Date: Wed, 23 Aug 2023 09:27:07 +0000
Subject: [PATCH 1/5] chore: bump go.mod to Go 1.20 and run go fix

---
 go.mod | 196 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 go.sum |   3 -
 2 files changed, 195 insertions(+), 4 deletions(-)

diff --git a/go.mod b/go.mod
index 44c5e74..fddde28 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/ipfs/ipfs-ds-convert
 
-go 1.16
+go 1.20
 
 require (
 	github.com/ipfs/go-datastore v0.4.6
@@ -16,3 +16,197 @@ require (
 	github.com/syndtr/goleveldb v1.0.0
 	github.com/urfave/cli v1.22.4
 )
+
+require (
+	bazil.org/fuse v0.0.0-20200117225306-7b5117fecadc // indirect
+	github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect
+	github.com/Stebalien/go-bitfield v0.0.1 // indirect
+	github.com/alexbrainman/goissue34681 v0.0.0-20191006012335-3fc7a47baff5 // indirect
+	github.com/benbjohnson/clock v1.1.0 // indirect
+	github.com/beorn7/perks v1.0.1 // indirect
+	github.com/blang/semver/v4 v4.0.0 // indirect
+	github.com/btcsuite/btcd v0.22.0-beta // indirect
+	github.com/cenkalti/backoff v2.2.1+incompatible // indirect
+	github.com/cenkalti/backoff/v4 v4.1.1 // indirect
+	github.com/cespare/xxhash v1.1.0 // indirect
+	github.com/cespare/xxhash/v2 v2.1.1 // indirect
+	github.com/cheekybits/genny v1.0.0 // indirect
+	github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d // indirect
+	github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
+	github.com/cskr/pubsub v1.0.2 // indirect
+	github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect
+	github.com/dgraph-io/badger v1.6.2 // indirect
+	github.com/dgraph-io/ristretto v0.0.2 // indirect
+	github.com/dustin/go-humanize v1.0.0 // indirect
+	github.com/facebookgo/atomicfile v0.0.0-20151019160806-2de1f203e7d5 // indirect
+	github.com/flynn/noise v1.0.0 // indirect
+	github.com/francoispqt/gojay v1.2.13 // indirect
+	github.com/fsnotify/fsnotify v1.4.9 // indirect
+	github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect
+	github.com/gogo/protobuf v1.3.2 // indirect
+	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect
+	github.com/google/gopacket v1.1.19 // indirect
+	github.com/google/uuid v1.3.0 // indirect
+	github.com/gorilla/websocket v1.4.2 // indirect
+	github.com/hannahhoward/go-pubsub v0.0.0-20200423002714-8d62886cc36e // indirect
+	github.com/hashicorp/errwrap v1.0.0 // indirect
+	github.com/hashicorp/go-multierror v1.1.1 // indirect
+	github.com/hashicorp/golang-lru v0.5.4 // indirect
+	github.com/huin/goupnp v1.0.2 // indirect
+	github.com/ipfs/bbloom v0.0.4 // indirect
+	github.com/ipfs/go-bitswap v0.4.0 // indirect
+	github.com/ipfs/go-block-format v0.0.3 // indirect
+	github.com/ipfs/go-blockservice v0.1.7 // indirect
+	github.com/ipfs/go-cid v0.0.7 // indirect
+	github.com/ipfs/go-cidutil v0.0.2 // indirect
+	github.com/ipfs/go-fetcher v1.5.0 // indirect
+	github.com/ipfs/go-filestore v0.0.3 // indirect
+	github.com/ipfs/go-graphsync v0.8.0 // indirect
+	github.com/ipfs/go-ipfs-blockstore v0.1.6 // indirect
+	github.com/ipfs/go-ipfs-chunker v0.0.5 // indirect
+	github.com/ipfs/go-ipfs-delay v0.0.1 // indirect
+	github.com/ipfs/go-ipfs-ds-help v0.1.1 // indirect
+	github.com/ipfs/go-ipfs-exchange-interface v0.0.1 // indirect
+	github.com/ipfs/go-ipfs-exchange-offline v0.0.1 // indirect
+	github.com/ipfs/go-ipfs-files v0.0.8 // indirect
+	github.com/ipfs/go-ipfs-keystore v0.0.2 // indirect
+	github.com/ipfs/go-ipfs-pinner v0.1.2 // indirect
+	github.com/ipfs/go-ipfs-posinfo v0.0.1 // indirect
+	github.com/ipfs/go-ipfs-pq v0.0.2 // indirect
+	github.com/ipfs/go-ipfs-provider v0.6.1 // indirect
+	github.com/ipfs/go-ipfs-routing v0.1.0 // indirect
+	github.com/ipfs/go-ipfs-util v0.0.2 // indirect
+	github.com/ipfs/go-ipld-cbor v0.0.5 // indirect
+	github.com/ipfs/go-ipld-format v0.2.0 // indirect
+	github.com/ipfs/go-ipld-git v0.1.1 // indirect
+	github.com/ipfs/go-ipld-legacy v0.1.0 // indirect
+	github.com/ipfs/go-ipns v0.1.2 // indirect
+	github.com/ipfs/go-log v1.0.5 // indirect
+	github.com/ipfs/go-log/v2 v2.3.0 // indirect
+	github.com/ipfs/go-merkledag v0.4.0 // indirect
+	github.com/ipfs/go-metrics-interface v0.0.1 // indirect
+	github.com/ipfs/go-mfs v0.1.2 // indirect
+	github.com/ipfs/go-namesys v0.3.1 // indirect
+	github.com/ipfs/go-path v0.1.2 // indirect
+	github.com/ipfs/go-peertaskqueue v0.4.0 // indirect
+	github.com/ipfs/go-unixfs v0.2.5 // indirect
+	github.com/ipfs/go-unixfsnode v1.1.3 // indirect
+	github.com/ipfs/go-verifcid v0.0.1 // indirect
+	github.com/ipfs/interface-go-ipfs-core v0.5.1 // indirect
+	github.com/ipld/go-codec-dagpb v1.3.0 // indirect
+	github.com/ipld/go-ipld-prime v0.12.2 // indirect
+	github.com/jackpal/go-nat-pmp v1.0.2 // indirect
+	github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
+	github.com/jbenet/goprocess v0.1.4 // indirect
+	github.com/klauspost/compress v1.11.7 // indirect
+	github.com/klauspost/cpuid/v2 v2.0.9 // indirect
+	github.com/koron/go-ssdp v0.0.2 // indirect
+	github.com/libp2p/go-addr-util v0.1.0 // indirect
+	github.com/libp2p/go-buffer-pool v0.0.2 // indirect
+	github.com/libp2p/go-cidranger v1.1.0 // indirect
+	github.com/libp2p/go-conn-security-multistream v0.2.1 // indirect
+	github.com/libp2p/go-doh-resolver v0.3.1 // indirect
+	github.com/libp2p/go-eventbus v0.2.1 // indirect
+	github.com/libp2p/go-flow-metrics v0.0.3 // indirect
+	github.com/libp2p/go-libp2p v0.15.0 // indirect
+	github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 // indirect
+	github.com/libp2p/go-libp2p-autonat v0.4.2 // indirect
+	github.com/libp2p/go-libp2p-blankhost v0.2.0 // indirect
+	github.com/libp2p/go-libp2p-circuit v0.4.0 // indirect
+	github.com/libp2p/go-libp2p-connmgr v0.2.4 // indirect
+	github.com/libp2p/go-libp2p-core v0.9.0 // indirect
+	github.com/libp2p/go-libp2p-discovery v0.5.1 // indirect
+	github.com/libp2p/go-libp2p-kad-dht v0.13.1 // indirect
+	github.com/libp2p/go-libp2p-kbucket v0.4.7 // indirect
+	github.com/libp2p/go-libp2p-loggables v0.1.0 // indirect
+	github.com/libp2p/go-libp2p-mplex v0.4.1 // indirect
+	github.com/libp2p/go-libp2p-nat v0.0.6 // indirect
+	github.com/libp2p/go-libp2p-noise v0.2.2 // indirect
+	github.com/libp2p/go-libp2p-peerstore v0.2.8 // indirect
+	github.com/libp2p/go-libp2p-pnet v0.2.0 // indirect
+	github.com/libp2p/go-libp2p-pubsub v0.5.4 // indirect
+	github.com/libp2p/go-libp2p-pubsub-router v0.4.0 // indirect
+	github.com/libp2p/go-libp2p-quic-transport v0.12.0 // indirect
+	github.com/libp2p/go-libp2p-record v0.1.3 // indirect
+	github.com/libp2p/go-libp2p-routing-helpers v0.2.3 // indirect
+	github.com/libp2p/go-libp2p-swarm v0.5.3 // indirect
+	github.com/libp2p/go-libp2p-tls v0.2.0 // indirect
+	github.com/libp2p/go-libp2p-transport-upgrader v0.4.6 // indirect
+	github.com/libp2p/go-libp2p-xor v0.0.0-20210714161855-5c005aca55db // indirect
+	github.com/libp2p/go-libp2p-yamux v0.5.4 // indirect
+	github.com/libp2p/go-maddr-filter v0.1.0 // indirect
+	github.com/libp2p/go-mplex v0.3.0 // indirect
+	github.com/libp2p/go-msgio v0.0.6 // indirect
+	github.com/libp2p/go-nat v0.0.5 // indirect
+	github.com/libp2p/go-netroute v0.1.6 // indirect
+	github.com/libp2p/go-openssl v0.0.7 // indirect
+	github.com/libp2p/go-reuseport v0.0.2 // indirect
+	github.com/libp2p/go-reuseport-transport v0.0.5 // indirect
+	github.com/libp2p/go-sockaddr v0.1.1 // indirect
+	github.com/libp2p/go-stream-muxer-multistream v0.3.0 // indirect
+	github.com/libp2p/go-tcp-transport v0.2.8 // indirect
+	github.com/libp2p/go-ws-transport v0.5.0 // indirect
+	github.com/libp2p/go-yamux/v2 v2.2.0 // indirect
+	github.com/libp2p/zeroconf/v2 v2.0.0 // indirect
+	github.com/lucas-clemente/quic-go v0.23.0 // indirect
+	github.com/marten-seemann/qtls-go1-16 v0.1.4 // indirect
+	github.com/marten-seemann/qtls-go1-17 v0.1.0 // indirect
+	github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect
+	github.com/mattn/go-isatty v0.0.13 // indirect
+	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+	github.com/miekg/dns v1.1.43 // indirect
+	github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect
+	github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect
+	github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect
+	github.com/minio/sha256-simd v1.0.0 // indirect
+	github.com/mr-tron/base58 v1.2.0 // indirect
+	github.com/multiformats/go-base32 v0.0.3 // indirect
+	github.com/multiformats/go-base36 v0.1.0 // indirect
+	github.com/multiformats/go-multiaddr v0.4.0 // indirect
+	github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect
+	github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect
+	github.com/multiformats/go-multibase v0.0.3 // indirect
+	github.com/multiformats/go-multicodec v0.3.0 // indirect
+	github.com/multiformats/go-multihash v0.0.15 // indirect
+	github.com/multiformats/go-multistream v0.2.2 // indirect
+	github.com/multiformats/go-varint v0.0.6 // indirect
+	github.com/nxadm/tail v1.4.8 // indirect
+	github.com/onsi/ginkgo v1.16.4 // indirect
+	github.com/opentracing/opentracing-go v1.2.0 // indirect
+	github.com/polydawn/refmt v0.0.0-20201211092308-30ac6d18308e // indirect
+	github.com/prometheus/client_golang v1.11.0 // indirect
+	github.com/prometheus/client_model v0.2.0 // indirect
+	github.com/prometheus/common v0.30.0 // indirect
+	github.com/prometheus/procfs v0.7.3 // indirect
+	github.com/russross/blackfriday/v2 v2.0.1 // indirect
+	github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
+	github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect
+	github.com/spaolacci/murmur3 v1.1.0 // indirect
+	github.com/whyrusleeping/base32 v0.0.0-20170828182744-c30ac30633cc // indirect
+	github.com/whyrusleeping/cbor-gen v0.0.0-20210219115102-f37d292932f2 // indirect
+	github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect
+	github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1 // indirect
+	github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9 // indirect
+	github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect
+	github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee // indirect
+	go.opencensus.io v0.23.0 // indirect
+	go.opentelemetry.io/otel v0.20.0 // indirect
+	go.opentelemetry.io/otel/metric v0.20.0 // indirect
+	go.opentelemetry.io/otel/trace v0.20.0 // indirect
+	go.uber.org/atomic v1.9.0 // indirect
+	go.uber.org/dig v1.10.0 // indirect
+	go.uber.org/fx v1.13.1 // indirect
+	go.uber.org/multierr v1.7.0 // indirect
+	go.uber.org/zap v1.19.0 // indirect
+	go4.org v0.0.0-20200411211856-f5505b9728dd // indirect
+	golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e // indirect
+	golang.org/x/mod v0.4.2 // indirect
+	golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect
+	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
+	golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 // indirect
+	golang.org/x/tools v0.1.1 // indirect
+	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
+	google.golang.org/protobuf v1.27.1 // indirect
+	gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
+)
diff --git a/go.sum b/go.sum
index 3b90473..435c1fd 100644
--- a/go.sum
+++ b/go.sum
@@ -144,7 +144,6 @@ github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7
 github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
 github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
 github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
-github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
 github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
@@ -944,7 +943,6 @@ github.com/libp2p/go-yamux v1.3.3/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZ
 github.com/libp2p/go-yamux v1.3.5/go.mod h1:FGTiPvoV/3DVdgWpX+tM0OW3tsM+W5bSE3gZwqQTcow=
 github.com/libp2p/go-yamux v1.3.7/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
 github.com/libp2p/go-yamux v1.4.0/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
-github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI=
 github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE=
 github.com/libp2p/go-yamux/v2 v2.0.0/go.mod h1:NVWira5+sVUIU6tu1JWvaRn1dRnG+cawOJiflsAM+7U=
 github.com/libp2p/go-yamux/v2 v2.1.1/go.mod h1:3So6P6TV6r75R9jiBpiIKgU/66lOarCZjqROGxzPpPQ=
@@ -1212,7 +1210,6 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
 github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
 github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
 github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
-github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
 github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
 github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
 github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=

From 58d722c034fff97e5293009851b80282788f9c67 Mon Sep 17 00:00:00 2001
From: web3-bot <web3-bot@protocol.ai>
Date: Wed, 23 Aug 2023 09:27:08 +0000
Subject: [PATCH 2/5] fix: stop using the deprecated io/ioutil package

---
 cli_test.go               |  3 ++-
 config/util.go            |  4 ++--
 convert/checks_test.go    | 15 +++++++--------
 convert/convert.go        |  7 +++----
 convert/convert_test.go   |  2 +-
 convert/copy.go           |  5 ++---
 convert/copy_test.go      |  7 +++----
 convert/prepare.go        |  3 +--
 revert/log.go             |  4 ++--
 revert/log_test.go        |  9 ++++-----
 revert/revert.go          |  4 ++--
 revert/revert_test.go     | 20 ++++++++++----------
 revert/steps_test.go      |  9 ++++-----
 strategy/strategy.go      |  2 +-
 strategy/strategy_util.go |  2 +-
 testutil/repo.go          |  5 ++---
 16 files changed, 47 insertions(+), 54 deletions(-)

diff --git a/cli_test.go b/cli_test.go
index d30768b..cc3570c 100644
--- a/cli_test.go
+++ b/cli_test.go
@@ -4,8 +4,9 @@ import (
 	"path"
 	"testing"
 
-	"github.com/ipfs/ipfs-ds-convert/testutil"
 	"os"
+
+	"github.com/ipfs/ipfs-ds-convert/testutil"
 )
 
 func TestBasicConvert(t *testing.T) {
diff --git a/config/util.go b/config/util.go
index 4c63bcd..93f933d 100644
--- a/config/util.go
+++ b/config/util.go
@@ -2,11 +2,11 @@ package config
 
 import (
 	"encoding/json"
-	"io/ioutil"
+	"os"
 )
 
 func Load(path string, out *map[string]interface{}) error {
-	cfgbytes, err := ioutil.ReadFile(path)
+	cfgbytes, err := os.ReadFile(path)
 	if err != nil {
 		return err
 	}
diff --git a/convert/checks_test.go b/convert/checks_test.go
index f6589c2..6801a56 100644
--- a/convert/checks_test.go
+++ b/convert/checks_test.go
@@ -2,7 +2,6 @@ package convert_test
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path"
 	"runtime"
@@ -22,7 +21,7 @@ func TestInvalidRepoVersion(t *testing.T) {
 	dir, _close, _, _ := testutil.PrepareTest(t, 10, 10)
 	defer _close(t)
 
-	err := ioutil.WriteFile(path.Join(dir, "version"), []byte("147258369"), 0664)
+	err := os.WriteFile(path.Join(dir, "version"), []byte("147258369"), 0664)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -107,7 +106,7 @@ func TestInvalidVersion(t *testing.T) {
 	dir, _close, _, _ := testutil.PrepareTest(t, 10, 10)
 	defer _close(t)
 
-	err := ioutil.WriteFile(path.Join(dir, "version"), []byte("a"), 0600)
+	err := os.WriteFile(path.Join(dir, "version"), []byte("a"), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -128,7 +127,7 @@ func TestInvalidSpecJson(t *testing.T) {
 	dir, _close, _, _ := testutil.PrepareTest(t, 10, 10)
 	defer _close(t)
 
-	err := ioutil.WriteFile(path.Join(dir, repo.SpecsFile), []byte("}"), 0600)
+	err := os.WriteFile(path.Join(dir, repo.SpecsFile), []byte("}"), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -149,7 +148,7 @@ func TestInvalidSpecFile(t *testing.T) {
 	dir, _close, _, _ := testutil.PrepareTest(t, 10, 10)
 	defer _close(t)
 
-	err := ioutil.WriteFile(path.Join(dir, repo.SpecsFile), []byte("{}"), 0600)
+	err := os.WriteFile(path.Join(dir, repo.SpecsFile), []byte("{}"), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -191,7 +190,7 @@ func TestInvalidConfigJson(t *testing.T) {
 	dir, _close, _, _ := testutil.PrepareTest(t, 10, 10)
 	defer _close(t)
 
-	err := ioutil.WriteFile(path.Join(dir, repo.ConfigFile), []byte("}"), 0600)
+	err := os.WriteFile(path.Join(dir, repo.ConfigFile), []byte("}"), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -212,7 +211,7 @@ func TestInvalidConfigFile(t *testing.T) {
 	dir, _close, _, _ := testutil.PrepareTest(t, 10, 10)
 	defer _close(t)
 
-	err := ioutil.WriteFile(path.Join(dir, repo.ConfigFile), []byte("{}"), 0600)
+	err := os.WriteFile(path.Join(dir, repo.ConfigFile), []byte("{}"), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -231,7 +230,7 @@ func TestInvalidConfigFile(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	err = ioutil.WriteFile(path.Join(dir, repo.ConfigFile), []byte(`{"Datastore":{}}`), 0600)
+	err = os.WriteFile(path.Join(dir, repo.ConfigFile), []byte(`{"Datastore":{}}`), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/convert/convert.go b/convert/convert.go
index 3873acb..5de3afb 100644
--- a/convert/convert.go
+++ b/convert/convert.go
@@ -2,7 +2,6 @@ package convert
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 
@@ -135,7 +134,7 @@ func (c *Conversion) saveNewSpec(backup bool) (err error) {
 		return err
 	}
 
-	err = ioutil.WriteFile(filepath.Join(c.path, repo.SpecsFile), []byte(toDiskId), 0660)
+	err = os.WriteFile(filepath.Join(c.path, repo.SpecsFile), []byte(toDiskId), 0660)
 	if err != nil {
 		return err
 	}
@@ -151,12 +150,12 @@ func (c *Conversion) saveNewSpec(backup bool) (err error) {
 }
 
 func (c *Conversion) backupSpec() error {
-	backupFile, err := ioutil.TempFile(c.path, "datastore_spec_backup")
+	backupFile, err := os.CreateTemp(c.path, "datastore_spec_backup")
 	if err != nil {
 		return err
 	}
 
-	specData, err := ioutil.ReadFile(filepath.Join(c.path, repo.SpecsFile))
+	specData, err := os.ReadFile(filepath.Join(c.path, repo.SpecsFile))
 	if err != nil {
 		return err
 	}
diff --git a/convert/convert_test.go b/convert/convert_test.go
index f5f7112..0c4fffd 100644
--- a/convert/convert_test.go
+++ b/convert/convert_test.go
@@ -47,7 +47,7 @@ func TestLossyConvert(t *testing.T) {
 	t.Errorf("expected error 'adding missing to src spec: couldn't find best match for specA /'")
 }
 
-//should cover noop case in convert.go
+// should cover noop case in convert.go
 func TestNoopConvert(t *testing.T) {
 	//Prepare repo
 	dir, _close, s1, s2 := testutil.PrepareTest(t, 3000, 3000)
diff --git a/convert/copy.go b/convert/copy.go
index 85475e5..a186616 100644
--- a/convert/copy.go
+++ b/convert/copy.go
@@ -3,7 +3,6 @@ package convert
 import (
 	"fmt"
 	"io"
-	"io/ioutil"
 	"os"
 	"path"
 	"path/filepath"
@@ -131,7 +130,7 @@ func (c *Copy) openDatastores() (err error) {
 	}
 	c.logStep("open datastore at %s", c.path)
 
-	c.newDsDir, err = ioutil.TempDir(c.path, "ds-convert")
+	c.newDsDir, err = os.MkdirTemp(c.path, "ds-convert")
 	if err != nil {
 		return errors.Wrapf(err, "error creating temp datastore at %s", c.path)
 	}
@@ -231,7 +230,7 @@ func CopyKeys(fromDs repo.Datastore, toDs repo.Datastore) error {
 }
 
 func (c *Copy) swapDatastores() (err error) {
-	c.oldDsDir, err = ioutil.TempDir(c.path, "ds-convert-old")
+	c.oldDsDir, err = os.MkdirTemp(c.path, "ds-convert-old")
 	if err != nil {
 		return errors.Wrapf(err, "error creating temp datastore at %s", c.path)
 	}
diff --git a/convert/copy_test.go b/convert/copy_test.go
index 5e007d2..76e8fcf 100644
--- a/convert/copy_test.go
+++ b/convert/copy_test.go
@@ -2,7 +2,6 @@ package convert
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strings"
@@ -57,7 +56,7 @@ var (
 )
 
 func TestInvalidSpecLeft(t *testing.T) {
-	d, err := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
+	d, err := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
 	if err != nil {
 		t.Fatalf(err.Error())
 	}
@@ -76,7 +75,7 @@ func TestInvalidSpecLeft(t *testing.T) {
 }
 
 func TestInvalidSpecRight(t *testing.T) {
-	d, err := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
+	d, err := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
 	if err != nil {
 		t.Fatalf(err.Error())
 	}
@@ -94,7 +93,7 @@ func TestInvalidSpecRight(t *testing.T) {
 }
 
 func TestOpenNonexist(t *testing.T) {
-	d, err := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
+	d, err := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
 	if err != nil {
 		t.Fatalf(err.Error())
 	}
diff --git a/convert/prepare.go b/convert/prepare.go
index 061e7cf..bc79b5f 100644
--- a/convert/prepare.go
+++ b/convert/prepare.go
@@ -2,7 +2,6 @@ package convert
 
 import (
 	"fmt"
-	"io/ioutil"
 	"os"
 	"path/filepath"
 	"strconv"
@@ -15,7 +14,7 @@ import (
 )
 
 func (c *Conversion) checkRepoVersion() error {
-	vstr, err := ioutil.ReadFile(filepath.Join(c.path, "version"))
+	vstr, err := os.ReadFile(filepath.Join(c.path, "version"))
 	if err != nil {
 		return err
 	}
diff --git a/revert/log.go b/revert/log.go
index 7f68071..5a051a7 100644
--- a/revert/log.go
+++ b/revert/log.go
@@ -29,8 +29,8 @@ type ActionLogger struct {
 	file *os.File
 }
 
-//NewActionLogger creates revert action logger which logs actions needed to
-//revert conversion steps
+// NewActionLogger creates revert action logger which logs actions needed to
+// revert conversion steps
 func NewActionLogger(repoPath string) (*ActionLogger, error) {
 	if _, err := os.Stat(path.Join(repoPath, ConvertLog)); !os.IsNotExist(err) {
 		return nil, fmt.Errorf("Log file %s already exists, you may want to run revert", path.Join(repoPath, ConvertLog))
diff --git a/revert/log_test.go b/revert/log_test.go
index 3e65f83..4af285c 100644
--- a/revert/log_test.go
+++ b/revert/log_test.go
@@ -1,7 +1,6 @@
 package revert_test
 
 import (
-	"io/ioutil"
 	"os"
 	"path"
 	"strings"
@@ -11,12 +10,12 @@ import (
 )
 
 func TestNewActionLogger(t *testing.T) {
-	d, err := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
+	d, err := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
 	if err != nil {
 		t.Fatal(err)
 	}
 
-	err = ioutil.WriteFile(path.Join(d, revert.ConvertLog), []byte{}, 0664)
+	err = os.WriteFile(path.Join(d, revert.ConvertLog), []byte{}, 0664)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -38,7 +37,7 @@ func TestNewActionLogger(t *testing.T) {
 }
 
 func TestLog(t *testing.T) {
-	d, err := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
+	d, err := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -54,7 +53,7 @@ func TestLog(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	b, err := ioutil.ReadFile(path.Join(d, revert.ConvertLog))
+	b, err := os.ReadFile(path.Join(d, revert.ConvertLog))
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/revert/revert.go b/revert/revert.go
index 42a361d..7cb9aef 100644
--- a/revert/revert.go
+++ b/revert/revert.go
@@ -10,10 +10,10 @@ import (
 	"github.com/ipfs/ipfs-ds-convert/repo"
 
 	"encoding/json"
+
 	lock "github.com/ipfs/go-fs-lock"
 	"github.com/ipfs/ipfs-ds-convert/config"
 	"github.com/pkg/errors"
-	"io/ioutil"
 )
 
 var Log = logging.New(os.Stderr, "revert ", logging.LstdFlags)
@@ -222,7 +222,7 @@ func fixConfig(repoPath string) error {
 		return err
 	}
 
-	err = ioutil.WriteFile(filepath.Join(repoPath, repo.ConfigFile), []byte(confBytes), 0660)
+	err = os.WriteFile(filepath.Join(repoPath, repo.ConfigFile), []byte(confBytes), 0660)
 	if err != nil {
 		return err
 	}
diff --git a/revert/revert_test.go b/revert/revert_test.go
index 3d64e94..b057764 100644
--- a/revert/revert_test.go
+++ b/revert/revert_test.go
@@ -1,7 +1,7 @@
 package revert_test
 
 import (
-	"io/ioutil"
+	"os"
 	"path"
 	"strings"
 	"testing"
@@ -136,7 +136,7 @@ func TestBasicConvertRevertUnknownStep(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"unknownactiontype","arg":[]}`), 0600)
+	os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"unknownactiontype","arg":[]}`), 0600)
 
 	err = revert.Revert(dir, true, false, false)
 	if !strings.Contains(err.Error(), "unknown revert step 'unknownactiontype'") {
@@ -176,35 +176,35 @@ func TestBasicConvertRevertInvalidArgs(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionRemove+`","arg":[]}`), 0600)
+	os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionRemove+`","arg":[]}`), 0600)
 
 	err = revert.Revert(dir, true, false, false)
 	if !strings.Contains(err.Error(), "revert remove: arg count 0 != 1") {
 		t.Fatal(err)
 	}
 
-	ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionMove+`","arg":[]}`), 0600)
+	os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionMove+`","arg":[]}`), 0600)
 
 	err = revert.Revert(dir, true, false, false)
 	if !strings.Contains(err.Error(), "revert move: arg count 0 != 2") {
 		t.Fatal(err)
 	}
 
-	ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionMkdir+`","arg":[]}`), 0600)
+	os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionMkdir+`","arg":[]}`), 0600)
 
 	err = revert.Revert(dir, true, false, false)
 	if !strings.Contains(err.Error(), "revert mkdir: arg count 0 != 1") {
 		t.Fatal(err)
 	}
 
-	ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionCleanup+`","arg":["a"]}`), 0600)
+	os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionCleanup+`","arg":["a"]}`), 0600)
 
 	err = revert.Revert(dir, true, false, true)
 	if !strings.Contains(err.Error(), "cannot cleanup after failed conversion") {
 		t.Fatal(err)
 	}
 
-	ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionCleanup+`","arg":[]}`+"\n"+`{"action":"`+revert.ActionDone+`","arg":[]}`), 0600)
+	os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(`{"action":"`+revert.ActionCleanup+`","arg":[]}`+"\n"+`{"action":"`+revert.ActionDone+`","arg":[]}`), 0600)
 
 	err = revert.Revert(dir, true, false, true)
 	if !strings.Contains(err.Error(), "cleanup arg count 0 != 1") {
@@ -222,7 +222,7 @@ func TestRevertMkdirChecks(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	err = ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(l), 0600)
+	err = os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(l), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -243,7 +243,7 @@ func TestRevertMoveChecks(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	err = ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(l), 0600)
+	err = os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(l), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -258,7 +258,7 @@ func TestRevertMoveChecks(t *testing.T) {
 		t.Fatal(err)
 	}
 
-	err = ioutil.WriteFile(path.Join(dir, revert.ConvertLog), []byte(l), 0600)
+	err = os.WriteFile(path.Join(dir, revert.ConvertLog), []byte(l), 0600)
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/revert/steps_test.go b/revert/steps_test.go
index 732b5da..4986dba 100644
--- a/revert/steps_test.go
+++ b/revert/steps_test.go
@@ -1,7 +1,6 @@
 package revert
 
 import (
-	"io/ioutil"
 	"os"
 	"path"
 	"strings"
@@ -16,22 +15,22 @@ func TestLoadNonexistentLog(t *testing.T) {
 }
 
 func TestLoadInvalidLog(t *testing.T) {
-	dname, _ := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
-	_ = ioutil.WriteFile(path.Join(dname, ConvertLog), []byte("not a json\n"), 0600)
+	dname, _ := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
+	_ = os.WriteFile(path.Join(dname, ConvertLog), []byte("not a json\n"), 0600)
 
 	_, err := loadLog(dname)
 	if !strings.Contains(err.Error(), "invalid character 'o' in literal null (expecting 'u')") {
 		t.Errorf("unexpected error %s, expected invalid character...", err)
 	}
 
-	_ = ioutil.WriteFile(path.Join(dname, ConvertLog), []byte(`{"action":5}`), 0600)
+	_ = os.WriteFile(path.Join(dname, ConvertLog), []byte(`{"action":5}`), 0600)
 
 	_, err = loadLog(dname)
 	if !strings.Contains(err.Error(), "invalid action type in convert steps") {
 		t.Errorf("unexpected error %s, expected invalid action type in convert steps", err)
 	}
 
-	_ = ioutil.WriteFile(path.Join(dname, ConvertLog), []byte(`{"action":"a","arg":[3]}`), 0600)
+	_ = os.WriteFile(path.Join(dname, ConvertLog), []byte(`{"action":"a","arg":[3]}`), 0600)
 
 	_, err = loadLog(dname)
 	if !strings.Contains(err.Error(), "invalid arg 0 in convert steps") {
diff --git a/strategy/strategy.go b/strategy/strategy.go
index ae59ed6..169ad92 100644
--- a/strategy/strategy.go
+++ b/strategy/strategy.go
@@ -22,7 +22,7 @@ var dsTypes = map[string]bool{
 	"badgerds": true,
 }
 
-//datastors that have one directory inside IPFS repo
+// datastors that have one directory inside IPFS repo
 var simpleTypes = map[string]bool{
 	"flatfs":   true,
 	"levelds":  true,
diff --git a/strategy/strategy_util.go b/strategy/strategy_util.go
index ae3bfaf..e4d4e4c 100644
--- a/strategy/strategy_util.go
+++ b/strategy/strategy_util.go
@@ -65,7 +65,7 @@ func (m *SimpleMounts) hasMatching(searched SimpleMount) bool {
 	return false
 }
 
-//filter removes matching mounts from this mounts
+// filter removes matching mounts from this mounts
 func (m *SimpleMounts) filter(filter SimpleMounts) SimpleMounts {
 	out := make([]SimpleMount, 0, len(*m))
 
diff --git a/testutil/repo.go b/testutil/repo.go
index d6fcd62..ff5487b 100644
--- a/testutil/repo.go
+++ b/testutil/repo.go
@@ -3,7 +3,6 @@ package testutil
 import (
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"testing"
 
@@ -46,7 +45,7 @@ func NewTestRepo(t *testing.T, spec map[string]interface{}) (string, func(t *tes
 		conf.Datastore.Spec = spec
 	}
 
-	repoRoot, err := ioutil.TempDir(os.TempDir(), "ds-convert-test-")
+	repoRoot, err := os.MkdirTemp(os.TempDir(), "ds-convert-test-")
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -94,5 +93,5 @@ func PatchConfig(t *testing.T, configPath string, newSpecPath string) {
 	if err != nil {
 		t.Fatal(err)
 	}
-	ioutil.WriteFile(configPath, b, 0660)
+	os.WriteFile(configPath, b, 0660)
 }

From 98d02c1c2e09cf45e46779d1783da6c594d173c9 Mon Sep 17 00:00:00 2001
From: web3-bot <web3-bot@protocol.ai>
Date: Wed, 13 Mar 2024 14:59:55 +0000
Subject: [PATCH 3/5] chore: bump go.mod to Go 1.21 and run go fix

---
 go.mod | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/go.mod b/go.mod
index fddde28..c4d1153 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,7 @@
 module github.com/ipfs/ipfs-ds-convert
 
-go 1.20
+go 1.21
+
 
 require (
 	github.com/ipfs/go-datastore v0.4.6

From 5d00236bc90f78850d460e9fe58efa91ddc80e87 Mon Sep 17 00:00:00 2001
From: web3-bot <web3-bot@protocol.ai>
Date: Wed, 13 Mar 2024 14:59:56 +0000
Subject: [PATCH 4/5] chore: run go mod tidy

---
 go.mod | 1 -
 1 file changed, 1 deletion(-)

diff --git a/go.mod b/go.mod
index c4d1153..a96705d 100644
--- a/go.mod
+++ b/go.mod
@@ -2,7 +2,6 @@ module github.com/ipfs/ipfs-ds-convert
 
 go 1.21
 
-
 require (
 	github.com/ipfs/go-datastore v0.4.6
 	github.com/ipfs/go-ds-badger v0.2.7

From 5afcde0ddc99bb79e53af96cb0e073e07e6fabbb Mon Sep 17 00:00:00 2001
From: web3-bot <web3-bot@protocol.ai>
Date: Fri, 23 Aug 2024 10:39:43 +0000
Subject: [PATCH 5/5] chore: bump go.mod to Go 1.22 and run go fix

---
 go.mod | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/go.mod b/go.mod
index a96705d..69853f4 100644
--- a/go.mod
+++ b/go.mod
@@ -1,6 +1,6 @@
 module github.com/ipfs/ipfs-ds-convert
 
-go 1.21
+go 1.22
 
 require (
 	github.com/ipfs/go-datastore v0.4.6