[fossil-users] Find and fix text files committed as binary files

2014-04-14 Thread Urmil Parikh
Hi,

I use a locally modified version of fossil, where customizations are in a
separate branch. I often merge from trunk to get latest updates.

This time when I tried to merge, I got 4 conflicts indicating binary files:

$ fossil merge trunk
...
MERGE src/clone.c
* Cannot merge binary file src/clone.c
MERGE src/diffcmd.c
* Cannot merge binary file src/diffcmd.c
MERGE src/file.c
* Cannot merge binary file src/file.c
MERGE src/timeline.c
* Cannot merge binary file src/timeline.c
WARNING: 4 merge conflicts

I assume last time when I merged and committed these files, they got
committed as binary files.

How do I find cause of them considered as binary and how do I fix them so
that I can merge without any issues?

I have attached one of the file for reference.
/*
** Copyright (c) 2006 D. Richard Hipp
**
** This program is free software; you can redistribute it and/or
** modify it under the terms of the Simplified BSD License (also
** known as the 2-Clause License or FreeBSD License.)

** This program is distributed in the hope that it will be useful,
** but without any warranty; without even the implied warranty of
** merchantability or fitness for a particular purpose.
**
** Author contact information:
**   d...@hwaci.com
**   http://www.hwaci.com/drh/
**
***
**
** File utilities.
**
** Functions named file_* are generic functions that always follow symlinks.
**
** Functions named file_wd_* are to be used for files inside working
** directories. They follow symlinks depending on 'allow-symlinks' setting.
*/
#include config.h
#include sys/types.h
#include sys/stat.h
#include unistd.h
#include string.h
#include errno.h
#include file.h

/*
** On Windows, include the Platform SDK header file.
*/
#ifdef _WIN32
# include direct.h
# include windows.h
# include sys/utime.h
#else
# include sys/time.h
#endif

#if INTERFACE

#include dirent.h
#if defined(_WIN32)
# define DIR _WDIR
# define dirent _wdirent
# define opendir _wopendir
# define readdir _wreaddir
# define closedir _wclosedir
#endif /* _WIN32 */

#if defined(_WIN32)  (defined(__MSVCRT__) || defined(_MSC_VER))
struct fossilStat {
i64 st_size;
i64 st_mtime;
int st_mode;
};
#endif

#endif /* INTERFACE */

#if !defined(_WIN32) || !(defined(__MSVCRT__) || defined(_MSC_VER))
# define fossilStat stat
#endif

/*
** On Windows S_ISLNK always returns FALSE.
*/
#if !defined(S_ISLNK)
# define S_ISLNK(x) (0)
#endif
static int fileStatValid = 0;
static struct fossilStat fileStat;

/*
** Fill stat buf with information received from stat() or lstat().
** lstat() is called on Unix if isWd is TRUE and allow-symlinks setting is on.
**
*/
static int fossil_stat(const char *zFilename, struct fossilStat *buf, int isWd){
#if !defined(_WIN32)
  int rc;
  char *zMbcs = fossil_utf8_to_filename(zFilename);
  if( isWd  g.allowSymlinks ){
rc = lstat(zMbcs, buf);
  }else{
rc = stat(zMbcs, buf);
  }
  fossil_filename_free(zMbcs);
  return rc;
#else
  return win32_stat(zFilename, buf, isWd);
#endif
}

/*
** Fill in the fileStat variable for the file named zFilename.
** If zFilename==0, then use the previous value of fileStat if
** there is a previous value.
**
** If isWd is TRUE, do lstat() instead of stat() if allow-symlinks is on.
**
** Return the number of errors.  No error messages are generated.
*/
static int getStat(const char *zFilename, int isWd){
  int rc = 0;
  if( zFilename==0 ){
if( fileStatValid==0 ) rc = 1;
  }else{
if( fossil_stat(zFilename, fileStat, isWd)!=0 ){
  fileStatValid = 0;
  rc = 1;
}else{
  fileStatValid = 1;
  rc = 0;
}
  }
  return rc;
}

/*
** Return the size of a file in bytes.  Return -1 if the file does not
** exist.  If zFilename is NULL, return the size of the most recently
** stat-ed file.
*/
i64 file_size(const char *zFilename){
  return getStat(zFilename, 0) ? -1 : fileStat.st_size;
}

/*
** Same as file_size(), but takes into account symlinks.
*/
i64 file_wd_size(const char *zFilename){
  return getStat(zFilename, 1) ? -1 : fileStat.st_size;
}

/*
** Return the modification time for a file.  Return -1 if the file
** does not exist.  If zFilename is NULL return the size of the most
** recently stat-ed file.
*/
i64 file_mtime(const char *zFilename){
  return getStat(zFilename, 0) ? -1 : fileStat.st_mtime;
}

/*
** Same as file_mtime(), but takes into account symlinks.
*/
i64 file_wd_mtime(const char *zFilename){
  return getStat(zFilename, 1) ? -1 : fileStat.st_mtime;
}

/*
** Return TRUE if the named file is an ordinary file or symlink
** and symlinks are allowed.
** Return false for directories, devices, fifos, etc.
*/
int file_wd_isfile_or_link(const char *zFilename){
  return getStat(zFilename, 1) ? 0 : S_ISREG(fileStat.st_mode) ||
 S_ISLNK(fileStat.st_mode);
}

/*
** Return TRUE if the named file is an ordinary file.  Return false
** for directories, devices, fifos, 

Re: [fossil-users] Find and fix text files committed as binary files

2014-04-14 Thread Jan Nijtmans
2014-04-14 11:20 GMT+02:00 Urmil Parikh urmilpar...@gmail.com:
 I assume last time when I merged and committed these files, they got
 committed as binary files.

 How do I find cause of them considered as binary and how do I fix them so
 that I can merge without any issues?

There are only three ways a file is considered binary:
1) The file contains NUL-bytes
2) The file contains lines longer than 8192 bytes
3) The filename matches the expression in the binary-glob setting.

Since your example doesn't have NUL-bytes neither long lines, your
binary-glob setting is the only thing I can think of.

Regards,
Jan Nijtmans
___
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users


Re: [fossil-users] Find and fix text files committed as binary files

2014-04-14 Thread Urmil Parikh
Thanks, Jan for hints!

I did a forced commit after removing binary-glob and now I;m able to merge
without conflicts.


On Mon, Apr 14, 2014 at 3:30 PM, Jan Nijtmans jan.nijtm...@gmail.comwrote:

 2014-04-14 11:20 GMT+02:00 Urmil Parikh urmilpar...@gmail.com:
  I assume last time when I merged and committed these files, they got
  committed as binary files.
 
  How do I find cause of them considered as binary and how do I fix them so
  that I can merge without any issues?

 There are only three ways a file is considered binary:
 1) The file contains NUL-bytes
 2) The file contains lines longer than 8192 bytes
 3) The filename matches the expression in the binary-glob setting.

 Since your example doesn't have NUL-bytes neither long lines, your
 binary-glob setting is the only thing I can think of.

 Regards,
 Jan Nijtmans
 ___
 fossil-users mailing list
 fossil-users@lists.fossil-scm.org
 http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

___
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users