This is the mail archive of the cygwin-apps mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: ITP dos2unix 5.2.1-1


On 03/16/2011 10:38 PM, Charles Wilson wrote:
Moved to main cygwin list for more feedback.

Background: currently the following utilities
	unix2dos
	dos2unix
	u2d
	d2u
are all provided by the cygutils package. They are, in fact, all
hardlinks/copies of the same 'conv.exe' program, developed specifically
for cygwin.

We have a proposal to provide the "dos2unix" package instead, and
removing these utilities from cygutils.  For more info, see:
http://cygwin.com/ml/cygwin-apps/2011-03/msg00067.html
and following.


On 3/16/2011 4:18 PM, Christopher Faylor wrote:
Ah, right.

I didn't get that Eric was referring to this scenario but, regardless,
I should have remembered that alternatives means using symlinks.  Given
the use that d2u is put, I don't think we want to make it a symlink.

So, I guess that means that we poll the community if we want to go ahead
with this.  Either that or the binaries in the new package are given a
different name to avoid conflicts.
Given that the unix2dos package supports pipe operation, the only real
difference is the command line options (and following symlinks on
converted files).


So, compare:


================================================================
unix2dos 5.1.1 (2010-08-18)
Usage: unix2dos [-fhkLlqV] [-c convmode] [-o file ...] [-n infile
outfile ...]
  -c --convmode    conversion mode
    convmode       ascii, 7bit, iso, mac, default to ascii
  -f --force       force conversion of all files
  -h --help        give this help
  -k --keepdate    keep output file date
  -L --license     display software license
  -l --newline     add additional newline
  -n --newfile     write to new file
    infile         original file in new file mode
    outfile        output file in new file mode
  -o --oldfile     write to old file
    file ...       files to convert in old file mode
  -q --quiet       quiet mode, suppress all warnings
                   always on in stdio mode
  -V --version     display version number

That is an old version. Here is the latest:


dos2unix 5.2.1 (2011-03-04)
Usage: dos2unix [options] [file ...] [-n infile outfile ...]
 -ascii           convert only line breaks (default)
 -iso             conversion between DOS and ISO-8859-1 character set
   -1252          Use Windows code page 1252 (Western European)
   -437           Use DOS code page 437 (US) (default)
   -850           Use DOS code page 850 (Western European)
   -860           Use DOS code page 860 (Portuguese)
   -863           Use DOS code page 863 (French Canadian)
   -865           Use DOS code page 865 (Nordic)
 -7               Convert 8 bit characters to 7 bit space
 -c --convmode    conversion mode
   convmode       ascii, 7bit, iso, mac, default to ascii
 -f --force       force conversion of all files
 -h --help        give this help
 -k --keepdate    keep output file date
 -L --license     display software license
 -l --newline     add additional newline
 -n --newfile     write to new file
   infile         original file in new file mode
   outfile        output file in new file mode
 -o --oldfile     write to old file
   file ...       files to convert in old file mode
 -q --quiet       quiet mode, suppress all warnings
                  always on in stdio mode
 -V --version     display version number



================================================================

vs.

================================================================
unix2dos is part of cygutils version 1.4.4
   converts the line endings of text files from
   UNIX style (0x0a) to DOS style (0x0d 0x0a)

Usage: unix2dos [OPTION...] [input file list...]

Main options (not all may apply)
   -A, --auto     Output format will be the opposite of the autodetected
source
                  format
   -D, --u2d      Output will be in DOS format
   --unix2dos     Output will be in DOS format
   -U, --d2u      Output will be in UNIX format
   --dos2unix     Output will be in UNIX format
   --force        Ignore binary file detection
   --safe         Do not modify binary files

Help options
   -?, --help     Show this help message
   --usage        Display brief usage message
   --version      Display version information
   --license      Display licensing information

Other arguments
   [input file list...]       for each file listed, convert in place.
                              If none specified, then use stdin/stdout
================================================================


Now, of the cygutils options, we don't need -D, --u2d, --unix2dos -U, --d2u, --dos2unix because...those really only apply to the generic 'conv.exe' application. cygutils' unix2dos app is really only supposed to be used in, well, unix2dos mode! So, unix2dos explicitly disallows the use of the "opposite" options (--dos2unix etc) and --auto; similarly dos2unix:

   if (progtype == CT_UNIX2DOS) {
     if (opts.ConvType != CT_UNIX2DOS) {
       fprintf(stderr,
               "%s: cannot accept any conversion type argument other\n" \


Similarly, we don't need -A, --auto because, again, it really only makes sense for the generic conv.exe app (and u2d/d2u/etc explicitly disallow its use).

All that leaves are the informational options (--help, -?, --usage,
--version, --license) which, if they go missing or renamed, I doubt that
will break any scripts.

Finally, we have
   --force        Ignore binary file detection
   --safe         Do not modify binary files
All of cygutils' conversion progs operate in safe mode by default, so
the --safe option is a bit redundant (it was added so that if somebody
aliased unix2dos as 'unix2dos --force', they could override on the cmd
line using --safe if necessary).

The proposed package provides a similar --force option, but no --safe.


So, the only real issues are


1) somebody is (redundantly) specifying --safe

In my opinion --safe is redundant. If an administrator forced an alias with --force, you can always run /usr/bin/unix2dos, or create your own alias.


	2) how does the unix2dos "binary detection algorithm" differ
	   from cygutils'?

The new package considers a file binary if there are characters < 0x20, with the exception of line breaks, tabs, and form feeds.


3) Does the unix2dos package handle setmode() on stdio properly?
I think so.
4) Ditto for O_BINARY on physical files?
Ditto.
	5) cygutils always follows symlinks. This new package does not,
	   unless --force, according to the man page (which is
	   unfortunate: the same option means "follow symlinks" AND
	   "convert everything even if you think it is binary"
The new package does not follow symlinks, so you don't damage files on other locations. If you force conversion a copy is created. The symlink target remains unmodified. There is not a separate option to force conversion of symlinks. Perhaps the creation of copies should be default.

	6) dos2unix foo.h foo.c (cygutils), but according to the manpage
	     dos2unix -o foo.h foo.c (new package)
	   However, experimentation shows the man page is wrong.
	     dos2unix foo.h foo.c (new package)
	   works fine.

The option -o (old file mode) works fine. It is the default mode, so you can skip it. You only need it if you used 'paired' conversion (option -n) on the same command-line.


dos2unix -n in.txt out.txt -o inplace.txt


	7) Output messages:
	   cygutils: $ dos2unix bob.c bob.h
		       bob.c: done.
		       bob.h: done.
		on stderr

	   newpkg:   $ dos2unix bob.c bob.h
		     dos2unix: converting file bob.c to UNIX format ...
		     dos2unix: converting file bob.h to UNIX format ...
		on stderr
	8) output status -- both packages report '0' on success, where
	   success means "nothing went wrong".  That is, if you convert
	   a file with unix LE using dos2unix, no changes are made to
	   the file AND 0 status is returned.  Again, this behavior is
	   the same on both pkgs, I just thought it was interesting.

		
I think 2-4 are manageable (but need investigation), and *I* am willing
to break users who are relying on --safe.  Or cygwin's version of the
new package could be patched to add a --safe option.

5: if the new package is used, I think we should patch it to always
follow symlinks (or add a new option, and make it default to follow).

I would propose a new option to follow symlinks. By default not follow, but copy (don't damage files on other locations).


Erwin

7: This might cause a problem if some script is relying on the output
messages of the utility.  I think this is bad practice, and am willing
to break people that are doing this.



So: I don't see any insurmountable problems with entirely replacing
cygutils' unix2dos/dos2unix/u2d/d2u programs with these other versions.
  (I would hope that cygwin's package would provide a u2d.exe hardlinked
to unix2dos.exe, etc)

--
Chuck


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]