protected override void CopyFile(FileInfo sourceFile, FileInfo destinationFile)
        {
            #region Sanity checks
            if (sourceFile == null) throw new ArgumentNullException("sourceFile");
            if (destinationFile == null) throw new ArgumentNullException("destinationFile");
            #endregion

            base.CopyFile(sourceFile, destinationFile);

            if (_sourceIsUnixFS && !_destinationIsUnixFS && FileUtils.IsExecutable(sourceFile.FullName))
                FlagUtils.Set(Path.Combine(DestinationPath, FlagUtils.XbitFile), destinationFile.RelativeTo(new DirectoryInfo(DestinationPath)));
        }
示例#2
0
        /// <inheritdoc/>
        protected override void HandleFile(FileInfo file, bool executable = false)
        {
            #region Sanity checks
            if (file == null) throw new ArgumentNullException(nameof(file));
            #endregion

            var entry = new ZipEntry(file.RelativeTo(SourceDirectory))
            {
                Size = file.Length,
                DateTime = file.LastWriteTimeUtc,
                HostSystem = HostSystemID.Unix,
                ExtraData = GetUnixTimestamp(file.LastWriteTimeUtc)
            };
            if (executable)
                entry.ExternalFileAttributes = ZipExtractor.DefaultAttributes | ZipExtractor.ExecuteAttributes;
            _zipStream.PutNextEntry(entry);
            using (var stream = file.OpenRead())
                stream.CopyToEx(_zipStream);
        }
示例#3
-1
        /// <inheritdoc/>
        protected override void HandleFile(FileInfo file, bool executable = false)
        {
            #region Sanity checks
            if (file == null) throw new ArgumentNullException(nameof(file));
            #endregion

            var entry = new TarEntry(new TarHeader
            {
                Name = file.RelativeTo(SourceDirectory),
                ModTime = file.LastWriteTimeUtc,
                Mode = (executable ? TarExtractor.DefaultMode | TarExtractor.ExecuteMode : TarExtractor.DefaultMode)
            });

            var hardlinkTarget = _previousFiles.FirstOrDefault(previousFile => FileUtils.AreHardlinked(previousFile.FullName, file.FullName));
            if (hardlinkTarget != null)
            {
                entry.TarHeader.TypeFlag = TarHeader.LF_LINK;
                entry.TarHeader.LinkName = hardlinkTarget.RelativeTo(SourceDirectory);
                _tarStream.PutNextEntry(entry);
            }
            else
            {
                _previousFiles.Add(file);

                entry.Size = file.Length;
                _tarStream.PutNextEntry(entry);
                using (var stream = file.OpenRead())
                    stream.CopyToEx(_tarStream);
            }
            _tarStream.CloseEntry();
        }