annotate cutils/dos2unix.py @ 332:5b98810fe367

treesum: attribute comment for "LS"
author Franz Glasner <fzglas.hg@dom66.de>
date Fri, 28 Mar 2025 15:23:09 +0100
parents 48430941c18c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
73
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
1 # -*- coding: utf-8 -*-
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
2 # :-
323
48430941c18c Adopt copyright and license wordings from https://reuse.software/faq/.
Franz Glasner <fzglas.hg@dom66.de>
parents: 126
diff changeset
3 # SPDX-FileCopyrightText: © 2020-2025 Franz Glasner
48430941c18c Adopt copyright and license wordings from https://reuse.software/faq/.
Franz Glasner <fzglas.hg@dom66.de>
parents: 126
diff changeset
4 # SPDX-License-Identifier: BSD-3-Clause
73
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
5 # :-
116
1856374bbd40 FIX: Typo.
Franz Glasner <fzglas.hg@dom66.de>
parents: 113
diff changeset
6 r"""Pure Python implementation of `dos2unix`.
36
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
7
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
8 """
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
9
72
ae2df602beb4 Make shasum.py and dos2unix sub-modules to the new "cutils" package
Franz Glasner <fzglas.hg@dom66.de>
parents: 44
diff changeset
10 from __future__ import print_function, absolute_import
36
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
11
73
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
12 from . import (__version__, __revision__)
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
13
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
14
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
15 __all__ = []
c3268f4e752f Adjust all license notes to (a) more literally comply with the BSD3 templates and to the style guide
Franz Glasner <fzglas.hg@dom66.de>
parents: 72
diff changeset
16
36
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
18 import argparse
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19 import io
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 import sys
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 def main(argv=None):
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 aparser = argparse.ArgumentParser(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 description="Python implementation of dos2unix",
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 fromfile_prefix_chars='@')
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 aparser.add_argument(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 "--version", "-V", action="version",
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 version="%s (rv:%s)" % (__version__, __revision__))
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 aparser.add_argument(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31 "--keepdate", "-k", action="store_true",
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32 help="Keep the date stamp of output file same as input file.")
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33 aparser.add_argument(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
34 "--oldfile", "-o", action="store_false", dest="newfile", default=False,
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
35 help="Old file mode. Convert the file and write output to it."
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
36 " The program defaults to run in this mode."
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
37 " Wildcard names may be used. ")
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
38 aparser.add_argument(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
39 "--newfile", "-n", action="store_true", dest="newfile", default=False,
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
40 help="New file mode. Convert the infile and write output to outfile."
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
41 " File names must be given in pairs and wildcard names should"
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
42 " NOT be used or you WILL lose your files.")
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
43 aparser.add_argument(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
44 "--quiet", "-q", action="store_true",
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
45 help="Quiet mode. Suppress all warning and messages.")
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
46
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
47 aparser.add_argument(
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
48 "files", nargs="+", metavar="FILE")
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 opts = aparser.parse_args(args=argv)
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 if opts.keepdate:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 raise NotImplementedError("--keepdate, -k")
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54
44
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
55 return dos2unix(opts)
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
56
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
57
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
58 def gen_opts(files=[], newfile=False, keepdate=False, quiet=True):
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
59 if keepdate:
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
60 raise NotImplementedError("--keepdate, -k")
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
61
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
62 if newfile and (len(files) % 2):
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
63 raise ValueError("need pairs of files")
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
64
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
65 opts = argparse.Namespace(files=files,
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
66 newfile=newfile,
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
67 keepdate=keepdate,
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
68 quiet=quiet)
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
69 return opts
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
70
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
71
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
72 def dos2unix(opts):
36
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 if opts.newfile:
44
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
74 return _convert_copy(opts)
36
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75 else:
44
26a8d4e7c8ee Enhance dos2unix to allow it more easily to be used as module from within other Python programs
Franz Glasner <fzglas.hg@dom66.de>
parents: 43
diff changeset
76 return _convert_inplace(opts)
36
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
77
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
78
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
79 def _convert_inplace(opts):
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
80 lines = []
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
81 for filename in opts.files:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
82 with io.open(filename, "rt", encoding="iso-8859-1") as source:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
83 for line in source:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
84 lines.append(line.encode("iso-8859-1"))
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
85 with open(filename, "wb") as dest:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
86 for line in lines:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
87 dest.write(line)
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
90 def _convert_copy(opts):
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
91 if len(opts.files) % 2:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
92 print("ERROR: need pairs of files", file=sys.stderr)
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
93 return 64 # :manpage:`sysexits(3)` EX_USAGE
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 idx = 0
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
95 while idx < len(opts.files):
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
96 with io.open(opts.files[idx], "rt", encoding="iso-8859-1") as source:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97 with open(opts.files[idx+1], "wb") as dest:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 for line in source:
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 dest.write(line.encode("iso-8859-1"))
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 idx += 2
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
101
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 if __name__ == "__main__":
1de48e84a5fb Implemented a dos2unix command.
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 sys.exit(main())