Hello community,
here is the log from the commit of package ntfs-3g
checked in at Fri Jul 13 18:37:30 CEST 2007.
--------
--- ntfs-3g/ntfs-3g.changes 2007-07-03 18:00:45.000000000 +0200
+++ /mounts/work_src_done/STABLE/ntfs-3g/ntfs-3g.changes 2007-07-13 16:07:20.471138000 +0200
@@ -1,0 +2,13 @@
+Fri Jul 13 15:56:16 CEST 2007 - bk@suse.de
+
+- Update to version 1.710:
+ change: more troubleshooting hints if a volume can't be mounted
+ change: logging improvements
+ fix: move, rename and hard link could return "input/output error"
+ fix: very rare, recoverable directory corruption
+- Do not obsolete ntfsprogs-fuse and do not provide mount.ntfs
+ Can coexist with ntfsmount and kernel ntfs module now, but you
+ have to use "ntfs-3g" as filesystem type in fstab and mount -t,
+ as done in the examples on http://www.ntfs-3g.org/index.html#usage
+
+-------------------------------------------------------------------
Old:
----
ntfs-3g-1.616.tar.bz2
New:
----
ntfs-3g-1.710.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ntfs-3g.spec ++++++
--- /var/tmp/diff_new_pack.A28107/_old 2007-07-13 18:36:51.000000000 +0200
+++ /var/tmp/diff_new_pack.A28107/_new 2007-07-13 18:36:51.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package ntfs-3g (Version 1.616)
+# spec file for package ntfs-3g (Version 1.710)
#
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -11,18 +11,15 @@
Name: ntfs-3g
Summary: Linux NTFS-3G userspace filesystem driver using fuse
-Version: 1.616
+Version: 1.710
Release: 1
License: GPL v2 or later
Group: System/Base
-Source0: %{name}-%{version}.tar.bz2
+Source0: http://www.ntfs-3g.org/%{name}-%{version}.tar.bz2
URL: http://www.ntfs-3g.org
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: fuse-devel pkgconfig
Requires: fuse
-Provides: ntfsprogs-fuse = %{version}-%{release}
-Obsoletes: ntfsprogs-fuse
-Provides: fuse-ntfs-3g = %{version}-%{release}
%define _exec_prefix /
%define _libdir /%_lib
@@ -37,8 +34,8 @@
and are the same for all files. Requests to change access rights are
silently ignored.
-The filesystem module is implemented in user space though the kernel's
-fuse (Filesystem in USErspace), but performance is very fast.
+The filesystem module is implemented in user space though the fuse
+(fuse (Filesystem in USErspace)), but performance is very fast.
@@ -54,16 +51,10 @@
make
%install
-rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
cd $RPM_BUILD_ROOT
rm .%{_libdir}/libntfs-3g.{so,la}
rm -rf .%{_includedir}/ntfs-3g/
-cd $RPM_BUILD_ROOT/sbin
-ln -s mount.ntfs-3g mount.ntfs-fuse
-ln -s mount.ntfs-3g mount.ntfs
-cd $RPM_BUILD_ROOT%{_bindir}
-ln -s ntfs-3g ntfsmount
%clean
rm -rf $RPM_BUILD_ROOT
@@ -77,15 +68,22 @@
%files
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog CREDITS NEWS README
-/sbin/mount.ntfs
/sbin/mount.ntfs-3g
-/sbin/mount.ntfs-fuse
%{_bindir}/ntfs-3g
-%{_bindir}/ntfsmount
%{_libdir}/libntfs-3g.so.*
%{_mandir}/man8/*
%changelog
+* Fri Jul 13 2007 - bk@suse.de
+- Update to version 1.710:
+ change: more troubleshooting hints if a volume can't be mounted
+ change: logging improvements
+ fix: move, rename and hard link could return "input/output error"
+ fix: very rare, recoverable directory corruption
+- Do not obsolete ntfsprogs-fuse and do not provide mount.ntfs
+ Can coexist with ntfsmount and kernel ntfs module now, but you
+ have to use "ntfs-3g" as filesystem type in fstab and mount -t,
+ as done in the examples on http://www.ntfs-3g.org/index.html#usage
* Tue Jul 03 2007 - bk@suse.de
- Update to version 1.616:
new: ensure mount works during boot: move binaries to the rootfs
++++++ ntfs-3g-1.616.tar.bz2 -> ntfs-3g-1.710.tar.bz2 ++++++
++++ 32326 lines of diff (skipped)
++++ retrying with extended exclude list
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/ChangeLog new/ntfs-3g-1.710/ChangeLog
--- old/ntfs-3g-1.616/ChangeLog 2007-06-16 23:34:30.000000000 +0200
+++ new/ntfs-3g-1.710/ChangeLog 2007-07-10 00:40:15.000000000 +0200
@@ -1,3 +1,99 @@
+2007-07-10 01:41 szaka
+
+ * configure.ac:
+
+ release 1.710
+
+2007-07-10 01:25 szaka
+
+ * src/ntfs-3g.c:
+
+ portability fixes
+
+2007-07-10 01:18 szaka
+
+ * libntfs-3g/volume.c:
+
+ ntfs_attr_free()/ntfs_inode_free(): don't scare users with bogus errors
+
+2007-07-10 00:49 szaka
+
+ * src/: ntfs-3g.c, utils.c:
+
+ Give more hints what the problem could be during mount
+
+2007-07-10 00:03 szaka
+
+ * src/ntfs-3g.c:
+
+ portability fixes
+
+2007-07-08 23:47 szaka
+
+ * libntfs-3g/logging.c:
+
+ ntfs_log_handler_syslog(): don't lose errno in an error path
+
+2007-07-08 23:45 szaka
+
+ * libntfs-3g/attrib.c, libntfs-3g/index.c, src/ntfs-3g.c:
+
+ No need to check for ENOSPC because ntfs_log_perror() does it now
+
+2007-07-08 23:38 szaka
+
+ * libntfs-3g/logging.c:
+
+ Log ENOSPC (full disk) errors only during debug
+
+2007-07-08 21:41 szaka
+
+ * libntfs-3g/index.c:
+
+ fix very rare, recoverable directory corruption
+
+2007-07-08 18:02 szaka
+
+ * libntfs-3g/lcnalloc.c, src/ntfs-3g.c:
+
+ fix trace logging
+
+2007-07-08 17:56 szaka
+
+ * libntfs-3g/attrib.c:
+
+ ntfs_resident_attr_resize(), ntfs_non_resident_attr_expand(): log all errors
+
+2007-07-08 17:27 szaka
+
+ * src/ntfs-3g.c:
+
+ fix: move & hard link input/output error in 1.616 (Nicolò Chieffo, Szaka)
+
+2007-07-08 02:11 szaka
+
+ * libntfs-3g/index.c:
+
+ ntfs_ir_truncate(): log all errors
+
+2007-07-08 02:10 szaka
+
+ * libntfs-3g/index.c:
+
+ ntfs_index_add_filename(): don't lose errno
+
+2007-06-28 10:17 szaka
+
+ * libntfs-3g/index.c:
+
+ ntfs_ib_write(): don't log ENOSPC error (full disk)
+
+2007-06-28 10:17 szaka
+
+ * libntfs-3g/dir.c:
+
+ ntfs_readdir(): log errors
+
2007-06-17 00:35 szaka
* configure.ac:
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/compile new/ntfs-3g-1.710/compile
--- old/ntfs-3g-1.616/compile 2007-06-16 23:35:07.000000000 +0200
+++ new/ntfs-3g-1.710/compile 2007-07-10 00:40:43.000000000 +0200
@@ -1,9 +1,9 @@
#! /bin/sh
# Wrapper for compilers which do not understand `-c -o'.
-scriptversion=2004-10-12.08
+scriptversion=2005-05-14.22
-# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# Written by Tom Tromey .
#
# This program is free software; you can redistribute it and/or modify
@@ -18,7 +18,7 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -47,11 +47,11 @@
Report bugs to .
EOF
- exit 0
+ exit $?
;;
-v | --v*)
echo "compile $scriptversion"
- exit 0
+ exit $?
;;
esac
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/config.h.in new/ntfs-3g-1.710/config.h.in
--- old/ntfs-3g-1.616/config.h.in 2007-06-16 23:35:01.000000000 +0200
+++ new/ntfs-3g-1.710/config.h.in 2007-07-10 00:40:37.000000000 +0200
@@ -286,8 +286,8 @@
#undef inline
#endif
-/* Define to `long' if does not define. */
+/* Define to `long int' if does not define. */
#undef off_t
-/* Define to `unsigned' if does not define. */
+/* Define to `unsigned int' if does not define. */
#undef size_t
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/configure.ac new/ntfs-3g-1.710/configure.ac
--- old/ntfs-3g-1.616/configure.ac 2007-06-16 23:35:39.000000000 +0200
+++ new/ntfs-3g-1.710/configure.ac 2007-07-10 00:41:25.000000000 +0200
@@ -24,8 +24,8 @@
AC_PREREQ(2.59)
-AC_INIT([ntfs-3g],[1.616],[ntfs-3g-devel@lists.sf.net])
-LIBNTFS_3G_VERSION=4:0:0
+AC_INIT([ntfs-3g],[1.710],[ntfs-3g-devel@lists.sf.net])
+LIBNTFS_3G_VERSION=5:0:0
AC_CANONICAL_HOST([])
AC_CANONICAL_TARGET([])
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/COPYING new/ntfs-3g-1.710/COPYING
--- old/ntfs-3g-1.616/COPYING 2007-06-16 23:35:08.000000000 +0200
+++ new/ntfs-3g-1.710/COPYING 2007-07-10 00:40:43.000000000 +0200
@@ -2,7 +2,7 @@
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
@@ -305,7 +305,7 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/INSTALL new/ntfs-3g-1.710/INSTALL
--- old/ntfs-3g-1.616/INSTALL 2007-06-16 23:35:08.000000000 +0200
+++ new/ntfs-3g-1.710/INSTALL 2007-07-10 00:40:43.000000000 +0200
@@ -1,7 +1,7 @@
Installation Instructions
*************************
-Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004 Free
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005 Free
Software Foundation, Inc.
This file is free documentation; the Free Software Foundation gives
@@ -102,16 +102,16 @@
Installation Names
==================
-By default, `make install' will install the package's files in
-`/usr/local/bin', `/usr/local/man', etc. You can specify an
-installation prefix other than `/usr/local' by giving `configure' the
-option `--prefix=PREFIX'.
+By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc. You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
You can specify separate installation prefixes for
architecture-specific files and architecture-independent files. If you
-give `configure' the option `--exec-prefix=PREFIX', the package will
-use PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files will still use the regular prefix.
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
In addition, if you use an unusual directory layout you can give
options like `--bindir=DIR' to specify different values for particular
@@ -159,7 +159,7 @@
need to know the machine type.
If you are _building_ compiler tools for cross-compiling, you should
-use the `--target=TYPE' option to select the type of system they will
+use the option `--target=TYPE' to select the type of system they will
produce code for.
If you want to _use_ a cross compiler, that generates code for a
@@ -189,8 +189,13 @@
./configure CC=/usr/local2/bin/gcc
-will cause the specified gcc to be used as the C compiler (unless it is
-overridden in the site shell script).
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script). Here is a another example:
+
+ /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+Here the `CONFIG_SHELL=/bin/bash' operand causes subsequent
+configuration-related scripts to be executed by `/bin/bash'.
`configure' Invocation
======================
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/libntfs-3g/attrib.c new/ntfs-3g-1.710/libntfs-3g/attrib.c
--- old/ntfs-3g-1.616/libntfs-3g/attrib.c 2007-04-22 22:56:36.000000000 +0200
+++ new/ntfs-3g-1.710/libntfs-3g/attrib.c 2007-07-08 22:45:14.000000000 +0200
@@ -3489,9 +3489,7 @@
rl = ntfs_cluster_alloc(vol, 0, new_allocated_size >>
vol->cluster_size_bits, -1, DATA_ZONE);
if (!rl) {
- if (errno != ENOSPC)
- ntfs_log_trace("Eeek! Failed to allocate "
- "cluster(s). Aborting...\n");
+ ntfs_log_perror("Failed to allocate clusters");
return -1;
}
} else
@@ -3640,6 +3638,7 @@
if (ntfs_attr_lookup(na->type, na->name, na->name_len, 0, 0, NULL, 0,
ctx)) {
err = errno;
+ ntfs_log_perror("ntfs_attr_lookup failed");
goto put_err_out;
}
vol = na->ni->vol;
@@ -3649,11 +3648,9 @@
*/
if (ntfs_attr_size_bounds_check(vol, na->type, newsize) < 0) {
err = errno;
- if (err == ERANGE) {
- ntfs_log_trace("Eeek! Size bounds check failed. "
- "Aborting...\n");
- } else if (err == ENOENT)
+ if (err == ENOENT)
err = EIO;
+ ntfs_log_perror("%s: bounds check failed", __FUNCTION__);
goto put_err_out;
}
/*
@@ -3688,8 +3685,7 @@
return ntfs_attr_truncate(na, newsize);
} else if (errno != ENOSPC && errno != EPERM) {
err = errno;
- ntfs_log_trace("Eeek! Failed to make attribute non-resident. "
- "Aborting...\n");
+ ntfs_log_perror("Failed to make attribute non-resident");
goto put_err_out;
}
@@ -3716,7 +3712,7 @@
le16_to_cpu(a->name_offset)), a->name_length);
if (!tna) {
err = errno;
- ntfs_log_trace("Couldn't open attribute.\n");
+ ntfs_log_perror("Couldn't open attribute");
goto put_err_out;
}
if (ntfs_attr_make_non_resident(tna, ctx)) {
@@ -3731,7 +3727,7 @@
/* Check whether error occurred. */
if (errno != ENOENT) {
err = errno;
- ntfs_log_trace("Attribute lookup failed.\n");
+ ntfs_log_perror("%s: Attribute lookup failed 1", __FUNCTION__);
goto put_err_out;
}
@@ -3740,8 +3736,8 @@
ntfs_attr_put_search_ctx(ctx);
if (ntfs_inode_free_space(na->ni, offsetof(ATTR_RECORD,
non_resident_end) + 8)) {
- ntfs_log_trace("Couldn't free space in the MFT record to "
- "make attribute list non resident.\n");
+ ntfs_log_perror("Couldn't free space in the MFT record to "
+ "make attribute list non resident");
return -1;
}
return ntfs_resident_attr_resize(na, newsize);
@@ -3756,7 +3752,7 @@
ntfs_attr_init_search_ctx(ctx, na->ni, NULL);
if (ntfs_attr_lookup(na->type, na->name, na->name_len, CASE_SENSITIVE,
0, NULL, 0, ctx)) {
- ntfs_log_trace("Attribute lookup failed.\n");
+ ntfs_log_perror("%s: Attribute lookup failed 2", __FUNCTION__);
err = errno;
goto put_err_out;
}
@@ -3789,13 +3785,13 @@
ni = ntfs_mft_record_alloc(vol, ni);
if (!ni) {
err = errno;
- ntfs_log_trace("Couldn't allocate new MFT record.\n");
+ ntfs_log_perror("Couldn't allocate new MFT record");
goto put_err_out;
}
/* Move attribute to it. */
if (ntfs_attr_record_move_to(ctx, ni)) {
err = errno;
- ntfs_log_trace("Couldn't move attribute to new MFT record.\n");
+ ntfs_log_perror("Couldn't move attribute to new MFT record");
goto put_err_out;
}
/* Update ntfs attribute. */
@@ -3812,7 +3808,6 @@
* written out later.
*/
ntfs_inode_mark_dirty(ctx->ntfs_ino);
- /* Done! */
ntfs_attr_put_search_ctx(ctx);
return 0;
put_err_out:
@@ -4250,15 +4245,12 @@
ntfs_attr_put_search_ctx(ctx);
if (ntfs_inode_free_space(na->ni, mp_size -
cur_max_mp_size)) {
- if (errno != ENOSPC)
- return -1;
- ntfs_log_error("Attribute list mapping "
- "pairs size to big, "
+ ntfs_log_perror("Attribute list mapping"
+ " pairs size to big, "
"can't fit them in the "
"base MFT record. "
"Defragment volume and "
"try once again.\n");
- errno = ENOSPC;
return -1;
}
goto retry;
@@ -4607,11 +4599,9 @@
* against @newsize and fail if @newsize is too big.
*/
if (ntfs_attr_size_bounds_check(vol, na->type, newsize) < 0) {
- if (errno == ERANGE) {
- ntfs_log_trace("Eeek! Size bounds check failed. "
- "Aborting...\n");
- } else if (errno == ENOENT)
+ if (errno == ENOENT)
errno = EIO;
+ ntfs_log_perror("%s: bounds check failed", __FUNCTION__);
return -1;
}
@@ -4626,8 +4616,7 @@
*/
if ((na->allocated_size >> vol->cluster_size_bits) < first_free_vcn) {
if (ntfs_attr_map_whole_runlist(na)) {
- ntfs_log_trace("Eeek! ntfs_attr_map_whole_runlist "
- "failed.\n");
+ ntfs_log_perror("ntfs_attr_map_whole_runlist failed");
return -1;
}
@@ -4680,7 +4669,7 @@
vol->cluster_size_bits), lcn_seek_from,
DATA_ZONE);
if (!rl) {
- ntfs_log_trace("Eeek! Cluster allocation failed.\n");
+ ntfs_log_perror("Cluster allocation failed");
return -1;
}
}
@@ -4690,7 +4679,7 @@
if (!rln) {
/* Failed, free just allocated clusters. */
err = errno;
- ntfs_log_trace("Eeek! Run list merge failed.\n");
+ ntfs_log_perror("Run list merge failed");
ntfs_cluster_free_from_rl(vol, rl);
free(rl);
errno = err;
@@ -4704,7 +4693,7 @@
if (ntfs_attr_update_mapping_pairs(na, 0 /*na->allocated_size >>
vol->cluster_size_bits*/)) {
err = errno;
- ntfs_log_trace("Eeek! Mapping pairs update failed.\n");
+ ntfs_log_perror("Mapping pairs update failed");
goto rollback;
}
}
@@ -4712,7 +4701,7 @@
ctx = ntfs_attr_get_search_ctx(na->ni, NULL);
if (!ctx) {
err = errno;
- ntfs_log_trace("Failed to get search context.\n");
+ ntfs_log_perror("Failed to get search context");
if (na->allocated_size == org_alloc_size) {
errno = err;
return -1;
@@ -4723,7 +4712,7 @@
if (ntfs_attr_lookup(na->type, na->name, na->name_len, CASE_SENSITIVE,
0, NULL, 0, ctx)) {
err = errno;
- ntfs_log_trace("Lookup of first attribute extent failed.\n");
+ ntfs_log_perror("Lookup of first attribute extent failed");
if (err == ENOENT)
err = EIO;
if (na->allocated_size != org_alloc_size) {
@@ -4750,8 +4739,8 @@
/* Free allocated clusters. */
if (ntfs_cluster_free(vol, na, org_alloc_size >>
vol->cluster_size_bits, -1) < 0) {
- ntfs_log_trace("Eeek! Leaking clusters. Run chkdsk!\n");
err = EIO;
+ ntfs_log_perror("Leaking clusters");
}
/* Now, truncate the runlist itself. */
if (ntfs_rl_truncate(&na->rl, org_alloc_size >>
@@ -4762,15 +4751,14 @@
*/
free(na->rl);
na->rl = NULL;
- ntfs_log_trace("Couldn't truncate runlist. Rollback failed.\n");
+ ntfs_log_perror("Couldn't truncate runlist. Rollback failed");
} else {
/* Prepare to mapping pairs update. */
na->allocated_size = org_alloc_size << vol->cluster_size_bits;
/* Restore mapping pairs. */
if (ntfs_attr_update_mapping_pairs(na, 0 /*na->allocated_size >>
vol->cluster_size_bits*/)) {
- ntfs_log_trace("Failed to restore old mapping pairs. "
- "Rollback failed.\n");
+ ntfs_log_perror("Failed to restore old mapping pairs");
}
}
errno = err;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/libntfs-3g/dir.c new/ntfs-3g-1.710/libntfs-3g/dir.c
--- old/ntfs-3g-1.616/libntfs-3g/dir.c 2007-06-05 02:14:06.000000000 +0200
+++ new/ntfs-3g-1.710/libntfs-3g/dir.c 2007-06-28 09:17:00.000000000 +0200
@@ -752,8 +752,8 @@
/* Find the index root attribute in the mft record. */
if (ntfs_attr_lookup(AT_INDEX_ROOT, NTFS_INDEX_I30, 4, CASE_SENSITIVE, 0, NULL,
0, ctx)) {
- ntfs_log_debug("Index root attribute missing in directory inode "
- "0x%llx.\n", (unsigned long long)dir_ni->mft_no);
+ ntfs_log_perror("Index root attribute missing in directory inode "
+ "0x%llx", (unsigned long long)dir_ni->mft_no);
goto dir_err_out;
}
/* Get to the index root value. */
@@ -764,7 +764,7 @@
index_block_size = le32_to_cpu(ir->index_block_size);
if (index_block_size < NTFS_BLOCK_SIZE ||
index_block_size & (index_block_size - 1)) {
- ntfs_log_debug("Index block size %u is invalid.\n",
+ ntfs_log_error("Index block size %u is invalid.\n",
(unsigned)index_block_size);
goto dir_err_out;
}
@@ -850,7 +850,7 @@
bmp_pos = ia_pos >> index_block_size_bits;
if (bmp_pos >> 3 >= bmp_na->data_size) {
- ntfs_log_debug("Current index position exceeds index bitmap "
+ ntfs_log_error("Current index position exceeds index bitmap "
"size.\n");
goto dir_err_out;
}
@@ -907,7 +907,7 @@
ia_start = ia_pos & ~(s64)(index_block_size - 1);
if (sle64_to_cpu(ia->index_block_vcn) != ia_start >>
index_vcn_size_bits) {
- ntfs_log_debug("Actual VCN (0x%llx) of index buffer is different "
+ ntfs_log_error("Actual VCN (0x%llx) of index buffer is different "
"from expected VCN (0x%llx) in inode 0x%llx.\n",
(long long)sle64_to_cpu(ia->index_block_vcn),
(long long)ia_start >> index_vcn_size_bits,
@@ -915,7 +915,7 @@
goto dir_err_out;
}
if (le32_to_cpu(ia->index.allocated_size) + 0x18 != index_block_size) {
- ntfs_log_debug("Index buffer (VCN 0x%llx) of directory inode 0x%llx "
+ ntfs_log_error("Index buffer (VCN 0x%llx) of directory inode 0x%llx "
"has a size (%u) differing from the directory "
"specified size (%u).\n", (long long)ia_start >>
index_vcn_size_bits,
@@ -926,7 +926,7 @@
}
index_end = (u8*)&ia->index + le32_to_cpu(ia->index.index_length);
if (index_end > (u8*)ia + index_block_size) {
- ntfs_log_debug("Size of index buffer (VCN 0x%llx) of directory inode "
+ ntfs_log_error("Size of index buffer (VCN 0x%llx) of directory inode "
"0x%llx exceeds maximum size.\n",
(long long)ia_start >> index_vcn_size_bits,
(unsigned long long)dir_ni->mft_no);
@@ -948,7 +948,7 @@
sizeof(INDEX_ENTRY_HEADER) > index_end ||
(u8*)ie + le16_to_cpu(ie->key_length) >
index_end) {
- ntfs_log_debug("Index entry out of bounds in directory inode "
+ ntfs_log_error("Index entry out of bounds in directory inode "
"0x%llx.\n", (unsigned long long)dir_ni->mft_no);
goto dir_err_out;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/libntfs-3g/index.c new/ntfs-3g-1.710/libntfs-3g/index.c
--- old/ntfs-3g-1.616/libntfs-3g/index.c 2007-05-29 22:41:55.000000000 +0200
+++ new/ntfs-3g-1.710/libntfs-3g/index.c 2007-07-08 22:45:14.000000000 +0200
@@ -87,9 +87,8 @@
ret = ntfs_attr_mst_pwrite(icx->ia_na, ntfs_ib_vcn_to_pos(icx, vcn),
1, icx->block_size, buf);
if (ret != 1) {
- ntfs_log_perror("Failed to write index block %lld of inode "
- "%llu", (long long)vcn,
- (unsigned long long)icx->ni->mft_no);
+ ntfs_log_perror("Failed to write index block %lld, inode %llu",
+ (long long)vcn, (unsigned long long)icx->ni->mft_no);
return STATUS_ERROR;
}
@@ -459,6 +458,17 @@
return ir;
}
+static INDEX_ROOT *ntfs_ir_lookup2(ntfs_inode *ni, ntfschar *name, u32 len)
+{
+ ntfs_attr_search_ctx *ctx;
+ INDEX_ROOT *ir;
+
+ ir = ntfs_ir_lookup(ni, name, len, &ctx);
+ if (ir)
+ ntfs_attr_put_search_ctx(ctx);
+ return ir;
+}
+
/**
* Find a key in the index block.
*
@@ -1109,7 +1119,7 @@
static int ntfs_ir_reparent(ntfs_index_context *icx)
{
- ntfs_attr_search_ctx *ctx;
+ ntfs_attr_search_ctx *ctx = NULL;
INDEX_ROOT *ir;
INDEX_ENTRY *ie;
INDEX_BLOCK *ib = NULL;
@@ -1118,18 +1128,22 @@
ntfs_log_trace("Entering\n");
- ir = ntfs_ir_lookup(icx->ni, icx->name, icx->name_len, &ctx);
+ ir = ntfs_ir_lookup2(icx->ni, icx->name, icx->name_len);
if (!ir)
- return -1;
+ goto out;
if ((ir->index.ih_flags & NODE_MASK) == SMALL_INDEX)
if (ntfs_ia_add(icx))
- goto err_out;
+ goto out;
new_ib_vcn = ntfs_ibm_get_free(icx);
if (new_ib_vcn == -1)
- goto err_out;
+ goto out;
+ ir = ntfs_ir_lookup2(icx->ni, icx->name, icx->name_len);
+ if (!ir)
+ goto clear_bmp;
+
ib = ntfs_ir_to_ib(ir, new_ib_vcn);
if (ib == NULL) {
ntfs_log_perror("Failed to move index root to index block");
@@ -1139,6 +1153,10 @@
if (ntfs_ib_write(icx, new_ib_vcn, ib))
goto clear_bmp;
+ ir = ntfs_ir_lookup(icx->ni, icx->name, icx->name_len, &ctx);
+ if (!ir)
+ goto clear_bmp;
+
ntfs_ir_nill(ir);
ie = ntfs_ie_get_first(&ir->index);
@@ -1153,8 +1171,8 @@
if (ntfs_resident_attr_value_resize(ctx->mrec, ctx->attr,
sizeof(INDEX_ROOT) - sizeof(INDEX_HEADER) +
le32_to_cpu(ir->index.allocated_size)))
- /* FIXME: revert bitmap, index root */
- goto err_out;
+ /* FIXME: revert index root */
+ goto clear_bmp;
/*
* FIXME: do it earlier if we have enough space in IR (should always),
* so in error case we wouldn't lose the IB.
@@ -1165,6 +1183,7 @@
err_out:
free(ib);
ntfs_attr_put_search_ctx(ctx);
+out:
return ret;
clear_bmp:
ntfs_ibm_clear(icx, new_ib_vcn);
@@ -1195,18 +1214,14 @@
ret = ntfs_attr_truncate(na, data_size + offsetof(INDEX_ROOT, index));
if (ret == STATUS_OK) {
- ntfs_attr_search_ctx *ctx;
-
- icx->ir = ntfs_ir_lookup(icx->ni, icx->name, icx->name_len, &ctx);
+ icx->ir = ntfs_ir_lookup2(icx->ni, icx->name, icx->name_len);
if (!icx->ir)
return STATUS_ERROR;
icx->ir->index.allocated_size = cpu_to_le32(data_size);
- ntfs_attr_put_search_ctx(ctx);
-
- } else if (errno != ENOSPC)
- ntfs_log_trace("Failed to truncate INDEX_ROOT");
+ } else
+ ntfs_log_perror("Failed to truncate INDEX_ROOT");
ntfs_attr_close(na);
return ret;
@@ -1304,6 +1319,10 @@
ntfs_log_trace("Entering\n");
+ icx->ir = ntfs_ir_lookup2(icx->ni, icx->name, icx->name_len);
+ if (!icx->ir)
+ return STATUS_ERROR;
+
new_size = le32_to_cpu(icx->ir->index.index_length) +
le16_to_cpu(median->length);
if (!(median->ie_flags & INDEX_ENTRY_NODE))
@@ -1312,6 +1331,10 @@
ret = ntfs_ir_make_space(icx, new_size);
if (ret != STATUS_OK)
return ret;
+
+ icx->ir = ntfs_ir_lookup2(icx->ni, icx->name, icx->name_len);
+ if (!icx->ir)
+ return STATUS_ERROR;
return ntfs_ih_insert(&icx->ir->index, median, new_vcn,
ntfs_icx_parent_pos(icx));
@@ -1478,7 +1501,7 @@
{
INDEX_ENTRY *ie;
ntfs_index_context *icx;
- int fn_size, ie_size, ret = -1;
+ int fn_size, ie_size, err, ret = -1;
ntfs_log_trace("Entering\n");
@@ -1506,8 +1529,9 @@
goto out;
ret = ntfs_ie_add(icx, ie);
-
+ err = errno;
ntfs_index_ctx_put(icx);
+ errno = err;
out:
free(ie);
return ret;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/libntfs-3g/lcnalloc.c new/ntfs-3g-1.710/libntfs-3g/lcnalloc.c
--- old/ntfs-3g-1.616/libntfs-3g/lcnalloc.c 2007-03-17 02:58:39.000000000 +0100
+++ new/ntfs-3g-1.710/libntfs-3g/lcnalloc.c 2007-07-08 17:02:49.000000000 +0200
@@ -85,7 +85,7 @@
int max_range = 0;
s64 start_pos = -1;
- ntfs_log_trace("Entering");
+ ntfs_log_trace("Entering\n");
for (i = 0; i < size; i++, buf++) {
@@ -115,7 +115,7 @@
{
s64 written;
- ntfs_log_trace("Entering");
+ ntfs_log_trace("Entering\n");
if (!*writeback)
return 0;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/libntfs-3g/logging.c new/ntfs-3g-1.710/libntfs-3g/logging.c
--- old/ntfs-3g-1.616/libntfs-3g/logging.c 2007-05-29 22:38:13.000000000 +0200
+++ new/ntfs-3g-1.710/libntfs-3g/logging.c 2007-07-08 22:47:48.000000000 +0200
@@ -358,10 +358,15 @@
char log[LOG_LINE_LEN];
int ret, olderr = errno;
+#ifndef DEBUG
+ if ((level & NTFS_LOG_LEVEL_PERROR) && errno == ENOSPC)
+ return 1;
+#endif
ret = vsnprintf(log, LOG_LINE_LEN, format, args);
if (ret < 0) {
vsyslog(LOG_NOTICE, format, args);
- return 1;
+ ret = 1;
+ goto out;
}
if ((LOG_LINE_LEN > ret + 3) && (level & NTFS_LOG_LEVEL_PERROR)) {
@@ -371,7 +376,7 @@
}
syslog(LOG_NOTICE, "%s", log);
-
+out:
errno = olderr;
return ret;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/libntfs-3g/volume.c new/ntfs-3g-1.710/libntfs-3g/volume.c
--- old/ntfs-3g-1.616/libntfs-3g/volume.c 2007-06-09 01:11:55.000000000 +0200
+++ new/ntfs-3g-1.710/libntfs-3g/volume.c 2007-07-10 00:18:07.000000000 +0200
@@ -85,8 +85,7 @@
if (na && *na) {
ntfs_attr_close(*na);
*na = NULL;
- } else
- ntfs_log_error("Tried to free NULL attribute pointer (%p)\n", na);
+ }
}
static int ntfs_inode_free(ntfs_inode **ni)
@@ -96,8 +95,7 @@
if (ni && *ni) {
ret = ntfs_inode_close(*ni);
*ni = NULL;
- } else
- ntfs_log_error("Tried to free NULL inode pointer (%p)\n", ni);
+ }
return ret;
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/missing new/ntfs-3g-1.710/missing
--- old/ntfs-3g-1.616/missing 2007-06-16 23:35:06.000000000 +0200
+++ new/ntfs-3g-1.710/missing 2007-07-10 00:40:41.000000000 +0200
@@ -1,9 +1,9 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
-scriptversion=2004-09-07.08
+scriptversion=2005-06-08.21
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
# Originally by Fran,cois Pinard , 1996.
@@ -19,8 +19,8 @@
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -87,12 +87,12 @@
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Send bug reports to ."
- exit 0
+ exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
- exit 0
+ exit $?
;;
-*)
@@ -288,11 +288,18 @@
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
- file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
- fi
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
+ fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
touch $file
;;
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/src/ntfs-3g.c new/ntfs-3g-1.710/src/ntfs-3g.c
--- old/ntfs-3g-1.616/src/ntfs-3g.c 2007-06-16 23:34:13.000000000 +0200
+++ new/ntfs-3g-1.710/src/ntfs-3g.c 2007-07-10 00:25:15.000000000 +0200
@@ -144,16 +144,9 @@
" be correct or visible. Please see the potential solution at\n"
" http://ntfs-3g.org/support.html#locale\n";
-static const char *fuse26_kmod_msg =
-"WARNING: Deficient Linux kernel detected. Some driver features are\n"
-" not available (swap file on NTFS, boot from NTFS by LILO), and\n"
-" unmount is not safe unless it's made sure the ntfs-3g process\n"
-" naturally terminates after calling 'umount'. If you wish this\n"
-" message to disappear then you should upgrade to at least kernel\n"
-" version 2.6.20, or request help from your distribution to fix\n"
-" the kernel problem. The below web page has more information:\n"
-" http://ntfs-3g.org/support.html#fuse26\n"
-"\n";
+static const char *dev_fuse_msg =
+"HINT: You should be root, or make ntfs-3g setuid root, or load the FUSE\n"
+" kernel module as root (modprobe fuse) and make sure /dev/fuse exist.\n";
static const char *usage_msg =
"\n"
@@ -742,7 +735,7 @@
}
while (size) {
res = ntfs_attr_pwrite(na, offset, size, buf);
- if (res < (s64)size && errno != ENOSPC)
+ if (res < (s64)size)
ntfs_log_perror("ntfs_attr_pwrite partial write (%lld: "
"%lld <> %d)", (s64)offset, (s64)size, res);
if (res <= 0) {
@@ -994,11 +987,15 @@
if (ntfs_link(ni, dir_ni, uname, uname_len))
res = -errno;
exit:
+ /*
+ * Must close dir_ni first otherwise ntfs_inode_sync_file_name(ni)
+ * may fail because ni may not be in parent's index on the disk yet.
+ */
+ if (dir_ni && ntfs_inode_close(dir_ni))
+ set_fuse_error(&res);
if (ni && ntfs_inode_close(ni))
set_fuse_error(&res);
free(uname);
- if (dir_ni && ntfs_inode_close(dir_ni))
- set_fuse_error(&res);
free(path);
return res;
}
@@ -1094,7 +1091,7 @@
{
int ret;
- ntfs_log_trace("Entering");
+ ntfs_log_trace("Entering\n");
ret = ntfs_fuse_link(new_path, tmp);
if (ret)
@@ -1134,7 +1131,7 @@
char *tmp;
const char *ext = ".ntfs-3g-";
- ntfs_log_trace("Entering");
+ ntfs_log_trace("Entering\n");
len = strlen(new_path) + strlen(ext) + 10 + 1; /* wc(str(2^32)) + \0 */
tmp = ntfs_malloc(len);
@@ -2005,18 +2002,32 @@
return 0;
}
+#ifdef linux
+
+static const char *fuse26_kmod_msg =
+"WARNING: Deficient Linux kernel detected. Some driver features are\n"
+" not available (swap file on NTFS, boot from NTFS by LILO), and\n"
+" unmount is not safe unless it's made sure the ntfs-3g process\n"
+" naturally terminates after calling 'umount'. If you wish this\n"
+" message to disappear then you should upgrade to at least kernel\n"
+" version 2.6.20, or request help from your distribution to fix\n"
+" the kernel problem. The below web page has more information:\n"
+" http://ntfs-3g.org/support.html#fuse26\n"
+"\n";
+
static void create_dev_fuse(void)
{
struct stat st;
if (stat("/dev/fuse", &st) && (errno == ENOENT)) {
- if (mknod("/dev/fuse", S_IFCHR | 0666, makedev(10, 229)))
+ if (mknod("/dev/fuse", S_IFCHR | 0666, makedev(10, 229))) {
ntfs_log_perror("Failed to create /dev/fuse");
+ if (errno == EPERM)
+ ntfs_log_error(dev_fuse_msg);
+ }
}
}
-#ifdef linux
-
static fuse_fstype get_fuse_fstype(void)
{
char buf[256];
@@ -2157,8 +2168,9 @@
fstype = get_fuse_fstype();
if (fstype == FSTYPE_NONE || fstype == FSTYPE_UNKNOWN)
fstype = load_fuse_module();
-#endif
+
create_dev_fuse();
+#endif
if (stat(opts.device, &sbuf)) {
ntfs_log_perror("Failed to access '%s'", opts.device);
@@ -2209,9 +2221,10 @@
goto err_out;
}
+#ifdef linux
if (S_ISBLK(sbuf.st_mode) && (fstype == FSTYPE_FUSE))
ntfs_log_info(fuse26_kmod_msg);
-
+#endif
if (!ctx->no_detach) {
if (daemon(0, ctx->debug))
ntfs_log_error("Failed to daemonize.\n");
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/ntfs-3g-1.616/src/utils.c new/ntfs-3g-1.710/src/utils.c
--- old/ntfs-3g-1.616/src/utils.c 2007-06-09 02:10:04.000000000 +0200
+++ new/ntfs-3g-1.710/src/utils.c 2007-07-09 23:49:52.000000000 +0200
@@ -52,9 +52,13 @@
"partition (e.g. /dev/hda, not /dev/hda1)? Or the other way around?\n";
static const char *corrupt_volume_msg =
-"NTFS is inconsistent. Run chkdsk /f on Windows then reboot it TWICE!\n"
-"The usage of the /f parameter is very IMPORTANT! No modification was\n"
-"made to NTFS by this software.\n";
+"NTFS is either inconsistent, or you have hardware faults, or you have a\n"
+"SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows\n"
+"then reboot into Windows TWICE. The usage of the /f parameter is very\n"
+"important! If you have SoftRAID/FakeRAID then first you must activate\n"
+"it and mount a different device under the /dev/mapper/ directory, (e.g.\n"
+"/dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation\n"
+"for the details.\n";
static const char *hibernated_volume_msg =
"The NTFS partition is hibernated. Please resume and shutdown Windows\n"
@@ -77,7 +81,7 @@
static const char *fakeraid_msg =
"You seem to have a SoftRAID/FakeRAID hardware and must use an activated,\n"
-"different device under /dev/mapper, (e.g. /dev/mapper/nvidia_eahaabcc1)\n"
+"different device under /dev/mapper/, (e.g. /dev/mapper/nvidia_eahaabcc1)\n"
"to mount NTFS. Please see the 'dmraid' documentation for help.\n";
static const char *dirty_volume_msg =
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org