Browse Source

twexport prune: handle overlong filenames

The MMGen Project 2 years ago
parent
commit
f58b1e27a2
2 changed files with 19 additions and 8 deletions
  1. 1 1
      mmgen/data/version
  2. 18 7
      mmgen/tw/json.py

+ 1 - 1
mmgen/data/version

@@ -1 +1 @@
-13.3.dev24
+13.3.dev25

+ 18 - 7
mmgen/tw/json.py

@@ -12,9 +12,10 @@
 tw.json: export and import tracking wallet to JSON format
 """
 
-import json
+import os,json
 from collections import namedtuple
 
+from ..opts import opt
 from ..util import msg,ymsg,fmt,suf,die,make_timestamp,make_chksum_8,compare_or_die
 from ..base_obj import AsyncInit
 from ..objmethods import MMGenObject
@@ -41,14 +42,24 @@ class TwJSON:
 
 		@property
 		def dump_fn(self):
+
+			def get_fn(prune_id):
+				return '{a}{b}-{c}-{d}.json'.format(
+					a = self.fn_pfx,
+					b = f'-pruned[{prune_id}]' if prune_id else '',
+					c = self.coin,
+					d = self.network )
+
 			if self.pruned:
 				from ..addrlist import AddrIdxList
-				pruned_id = AddrIdxList(idx_list=self.pruned).id_str
-			return '{a}{b}-{c}-{d}.json'.format(
-				a = self.fn_pfx,
-				b = f'-pruned[{pruned_id}]' if self.pruned else '',
-				c = self.coin,
-				d = self.network )
+				prune_id = AddrIdxList(idx_list=self.pruned).id_str
+				fn = get_fn(prune_id)
+				if len(fn) > os.statvfs(opt.outdir or os.curdir).f_namemax:
+					fn = get_fn(f'idhash={make_chksum_8(prune_id.encode()).lower()}')
+			else:
+				fn = get_fn(None)
+
+			return fn
 
 		def json_dump(self,data,pretty=False):
 			return json.dumps(