diff options
Diffstat (limited to 'ext/pathname')
-rw-r--r-- | ext/pathname/depend | 6 | ||||
-rw-r--r-- | ext/pathname/extconf.rb | 1 | ||||
-rw-r--r-- | ext/pathname/lib/pathname.rb | 16 | ||||
-rw-r--r-- | ext/pathname/pathname.c | 53 | ||||
-rw-r--r-- | ext/pathname/pathname.gemspec | 13 |
5 files changed, 43 insertions, 46 deletions
diff --git a/ext/pathname/depend b/ext/pathname/depend index 0860334b7f..cca7877dad 100644 --- a/ext/pathname/depend +++ b/ext/pathname/depend @@ -7,7 +7,6 @@ pathname.o: $(hdrdir)/ruby/backward.h pathname.o: $(hdrdir)/ruby/backward/2/assume.h pathname.o: $(hdrdir)/ruby/backward/2/attributes.h pathname.o: $(hdrdir)/ruby/backward/2/bool.h -pathname.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h pathname.o: $(hdrdir)/ruby/backward/2/inttypes.h pathname.o: $(hdrdir)/ruby/backward/2/limits.h pathname.o: $(hdrdir)/ruby/backward/2/long_long.h @@ -16,6 +15,7 @@ pathname.o: $(hdrdir)/ruby/backward/2/stdarg.h pathname.o: $(hdrdir)/ruby/defines.h pathname.o: $(hdrdir)/ruby/encoding.h pathname.o: $(hdrdir)/ruby/intern.h +pathname.o: $(hdrdir)/ruby/internal/abi.h pathname.o: $(hdrdir)/ruby/internal/anyargs.h pathname.o: $(hdrdir)/ruby/internal/arithmetic.h pathname.o: $(hdrdir)/ruby/internal/arithmetic/char.h @@ -53,6 +53,7 @@ pathname.o: $(hdrdir)/ruby/internal/attr/noexcept.h pathname.o: $(hdrdir)/ruby/internal/attr/noinline.h pathname.o: $(hdrdir)/ruby/internal/attr/nonnull.h pathname.o: $(hdrdir)/ruby/internal/attr/noreturn.h +pathname.o: $(hdrdir)/ruby/internal/attr/packed_struct.h pathname.o: $(hdrdir)/ruby/internal/attr/pure.h pathname.o: $(hdrdir)/ruby/internal/attr/restrict.h pathname.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h @@ -121,7 +122,6 @@ pathname.o: $(hdrdir)/ruby/internal/intern/enumerator.h pathname.o: $(hdrdir)/ruby/internal/intern/error.h pathname.o: $(hdrdir)/ruby/internal/intern/eval.h pathname.o: $(hdrdir)/ruby/internal/intern/file.h -pathname.o: $(hdrdir)/ruby/internal/intern/gc.h pathname.o: $(hdrdir)/ruby/internal/intern/hash.h pathname.o: $(hdrdir)/ruby/internal/intern/io.h pathname.o: $(hdrdir)/ruby/internal/intern/load.h @@ -152,12 +152,12 @@ pathname.o: $(hdrdir)/ruby/internal/memory.h pathname.o: $(hdrdir)/ruby/internal/method.h pathname.o: $(hdrdir)/ruby/internal/module.h pathname.o: $(hdrdir)/ruby/internal/newobj.h -pathname.o: $(hdrdir)/ruby/internal/rgengc.h pathname.o: $(hdrdir)/ruby/internal/scan_args.h pathname.o: $(hdrdir)/ruby/internal/special_consts.h pathname.o: $(hdrdir)/ruby/internal/static_assert.h pathname.o: $(hdrdir)/ruby/internal/stdalign.h pathname.o: $(hdrdir)/ruby/internal/stdbool.h +pathname.o: $(hdrdir)/ruby/internal/stdckdint.h pathname.o: $(hdrdir)/ruby/internal/symbol.h pathname.o: $(hdrdir)/ruby/internal/value.h pathname.o: $(hdrdir)/ruby/internal/value_type.h diff --git a/ext/pathname/extconf.rb b/ext/pathname/extconf.rb index 84e68277aa..b4e1617b9e 100644 --- a/ext/pathname/extconf.rb +++ b/ext/pathname/extconf.rb @@ -1,4 +1,3 @@ # frozen_string_literal: false require 'mkmf' -have_func("rb_file_s_birthtime") create_makefile('pathname') diff --git a/ext/pathname/lib/pathname.rb b/ext/pathname/lib/pathname.rb index 3799d589d5..dc639174d5 100644 --- a/ext/pathname/lib/pathname.rb +++ b/ext/pathname/lib/pathname.rb @@ -14,6 +14,8 @@ require 'pathname.so' class Pathname + VERSION = "0.3.0" + # :stopdoc: # to_path is implemented so Pathname objects are usable with File.open, etc. @@ -338,6 +340,8 @@ class Pathname # # Appends a pathname fragment to +self+ to produce a new Pathname object. + # Since +other+ is considered as a path relative to +self+, if +other+ is + # an absolute path, the new Pathname object is created from just +other+. # # p1 = Pathname.new("/usr") # Pathname:/usr # p2 = p1 + "bin/ruby" # Pathname:/usr/bin/ruby @@ -399,6 +403,8 @@ class Pathname # # Joins the given pathnames onto +self+ to create a new Pathname object. + # This is effectively the same as using Pathname#+ to append +self+ and + # all arguments sequentially. # # path0 = Pathname.new("/usr") # Pathname:/usr # path0 = path0.join("bin/ruby") # Pathname:/usr/bin/ruby @@ -575,24 +581,24 @@ end class Pathname # * FileUtils * - autoload(:FileUtils, 'fileutils') - # Creates a full path, including any intermediate directories that don't yet # exist. # # See FileUtils.mkpath and FileUtils.mkdir_p def mkpath(mode: nil) + require 'fileutils' FileUtils.mkpath(@path, mode: mode) nil end # Recursively deletes a directory, including all directories beneath it. # - # See FileUtils.rm_r - def rmtree + # See FileUtils.rm_rf + def rmtree(noop: nil, verbose: nil, secure: nil) # The name "rmtree" is borrowed from File::Path of Perl. # File::Path provides "mkpath" and "rmtree". - FileUtils.rm_r(@path) + require 'fileutils' + FileUtils.rm_rf(@path, noop: noop, verbose: verbose, secure: secure) nil end end diff --git a/ext/pathname/pathname.c b/ext/pathname/pathname.c index 1d4ed2814b..cdecb3f897 100644 --- a/ext/pathname/pathname.c +++ b/ext/pathname/pathname.c @@ -35,6 +35,7 @@ static ID id_lchmod; static ID id_lchown; static ID id_link; static ID id_lstat; +static ID id_lutime; static ID id_mkdir; static ID id_mtime; static ID id_open; @@ -130,32 +131,6 @@ path_freeze(VALUE self) } /* - * call-seq: - * pathname.taint -> obj - * - * Returns pathname. This method is deprecated and will be removed in Ruby 3.2. - */ -static VALUE -path_taint(VALUE self) -{ - rb_warn("Pathname#taint is deprecated and will be removed in Ruby 3.2."); - return self; -} - -/* - * call-seq: - * pathname.untaint -> obj - * - * Returns pathname. This method is deprecated and will be removed in Ruby 3.2. - */ -static VALUE -path_untaint(VALUE self) -{ - rb_warn("Pathname#untaint is deprecated and will be removed in Ruby 3.2."); - return self; -} - -/* * Compare this pathname with +other+. The comparison is string-based. * Be aware that two different paths (<tt>foo.txt</tt> and <tt>./foo.txt</tt>) * can refer to the same file. @@ -504,7 +479,6 @@ path_atime(VALUE self) return rb_funcall(rb_cFile, id_atime, 1, get_strpath(self)); } -#if defined(HAVE_RB_FILE_S_BIRTHTIME) /* * call-seq: * pathname.birthtime -> time @@ -519,10 +493,6 @@ path_birthtime(VALUE self) { return rb_funcall(rb_cFile, id_birthtime, 1, get_strpath(self)); } -#else -/* check at compilation time for `respond_to?` */ -# define path_birthtime rb_f_notimplement -#endif /* * call-seq: @@ -765,6 +735,19 @@ path_utime(VALUE self, VALUE atime, VALUE mtime) } /* + * Update the access and modification times of the file. + * + * Same as Pathname#utime, but does not follow symbolic links. + * + * See File.lutime. + */ +static VALUE +path_lutime(VALUE self, VALUE atime, VALUE mtime) +{ + return rb_funcall(rb_cFile, id_lutime, 3, atime, mtime, get_strpath(self)); +} + +/* * Returns the last component of the path. * * See File.basename. @@ -1212,7 +1195,7 @@ path_entries(VALUE self) ary = rb_funcall(rb_cDir, id_entries, 1, str); ary = rb_convert_type(ary, T_ARRAY, "Array", "to_ary"); for (i = 0; i < RARRAY_LEN(ary); i++) { - VALUE elt = RARRAY_AREF(ary, i); + VALUE elt = RARRAY_AREF(ary, i); elt = rb_class_new_instance(1, &elt, klass); rb_ary_store(ary, i, elt); } @@ -1274,6 +1257,7 @@ static VALUE path_each_entry(VALUE self) { VALUE args[1]; + RETURN_ENUMERATOR(self, 0, 0); args[0] = get_strpath(self); return rb_block_call(rb_cDir, id_foreach, 1, args, each_entry_i, rb_obj_class(self)); @@ -1464,6 +1448,7 @@ path_f_pathname(VALUE self, VALUE str) * - #make_symlink(old) * - #truncate(length) * - #utime(atime, mtime) + * - #lutime(atime, mtime) * - #basename(*args) * - #dirname * - #extname @@ -1521,8 +1506,6 @@ Init_pathname(void) rb_cPathname = rb_define_class("Pathname", rb_cObject); rb_define_method(rb_cPathname, "initialize", path_initialize, 1); rb_define_method(rb_cPathname, "freeze", path_freeze, 0); - rb_define_method(rb_cPathname, "taint", path_taint, 0); - rb_define_method(rb_cPathname, "untaint", path_untaint, 0); rb_define_method(rb_cPathname, "==", path_eq, 1); rb_define_method(rb_cPathname, "===", path_eq, 1); rb_define_method(rb_cPathname, "eql?", path_eq, 1); @@ -1562,6 +1545,7 @@ Init_pathname(void) rb_define_method(rb_cPathname, "make_symlink", path_make_symlink, 1); rb_define_method(rb_cPathname, "truncate", path_truncate, 1); rb_define_method(rb_cPathname, "utime", path_utime, 2); + rb_define_method(rb_cPathname, "lutime", path_lutime, 2); rb_define_method(rb_cPathname, "basename", path_basename, -1); rb_define_method(rb_cPathname, "dirname", path_dirname, 0); rb_define_method(rb_cPathname, "extname", path_extname, 0); @@ -1645,6 +1629,7 @@ InitVM_pathname(void) id_lchown = rb_intern("lchown"); id_link = rb_intern("link"); id_lstat = rb_intern("lstat"); + id_lutime = rb_intern("lutime"); id_mkdir = rb_intern("mkdir"); id_mtime = rb_intern("mtime"); id_open = rb_intern("open"); diff --git a/ext/pathname/pathname.gemspec b/ext/pathname/pathname.gemspec index 5aaa8f8dd7..890bc2fde9 100644 --- a/ext/pathname/pathname.gemspec +++ b/ext/pathname/pathname.gemspec @@ -1,13 +1,20 @@ +name = File.basename(__FILE__, ".gemspec") +version = ["lib", "ext/lib"].find do |dir| + break File.foreach(File.join(__dir__, dir, "#{name}.rb")) do |line| + /^\s*VERSION\s*=\s*"(.*)"/ =~ line and break $1 + end rescue nil +end + Gem::Specification.new do |spec| - spec.name = "pathname" - spec.version = "0.2.0" + spec.name = name + spec.version = version spec.authors = ["Tanaka Akira"] spec.email = ["akr@fsij.org"] spec.summary = %q{Representation of the name of a file or directory on the filesystem} spec.description = %q{Representation of the name of a file or directory on the filesystem} spec.homepage = "https://github.com/ruby/pathname" - spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") + spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0") spec.licenses = ["Ruby", "BSD-2-Clause"] spec.metadata["homepage_uri"] = spec.homepage |