Răsfoiți Sursa

Store stat data even for hard links to make file listing prettier

Jonas Borgström 14 ani în urmă
părinte
comite
af95b7c996
2 a modificat fișierele cu 14 adăugiri și 4 ștergeri
  1. 3 2
      darc/archive.py
  2. 11 2
      darc/archiver.py

+ 3 - 2
darc/archive.py

@@ -258,8 +258,9 @@ class Archive(object):
         if st.st_nlink > 1:
         if st.st_nlink > 1:
             source = self.hard_links.get((st.st_ino, st.st_dev))
             source = self.hard_links.get((st.st_ino, st.st_dev))
             if (st.st_ino, st.st_dev) in self.hard_links:
             if (st.st_ino, st.st_dev) in self.hard_links:
-                self.add_item({'mode': st.st_mode,
-                               'path': path, 'source': source})
+                item = self.stat_attrs(st, path)
+                item.update({'path': path, 'source': source})
+                self.add_item(item)
                 return
                 return
             else:
             else:
                 self.hard_links[st.st_ino, st.st_dev] = safe_path
                 self.hard_links[st.st_ino, st.st_dev] = safe_path

+ 11 - 2
darc/archiver.py

@@ -150,8 +150,17 @@ class Archiver(object):
                 mode = format_file_mode(item['mode'])
                 mode = format_file_mode(item['mode'])
                 size = item.get('size', 0)
                 size = item.get('size', 0)
                 mtime = format_time(datetime.fromtimestamp(item['mtime']))
                 mtime = format_time(datetime.fromtimestamp(item['mtime']))
-                print '%s%s %-6s %-6s %8d %s %s' % (type, mode, item['user'],
-                                                  item['group'], size, mtime, item['path'])
+                if 'source' in item:
+                    if type == 'l':
+                        extra = ' -> %s' % item['source']
+                    else:
+                        type = 'h'
+                        extra = ' link to %s' % item['source']
+                else:
+                    extra = ''
+                print '%s%s %-6s %-6s %8d %s %s%s' % (type, mode, item['user'],
+                                                  item['group'], size, mtime,
+                                                  item['path'], extra)
         else:
         else:
             for archive in sorted(Archive.list_archives(store, keychain), key=attrgetter('ts')):
             for archive in sorted(Archive.list_archives(store, keychain), key=attrgetter('ts')):
                 print '%-20s %s' % (archive.metadata['name'], to_localtime(archive.ts).strftime('%c'))
                 print '%-20s %s' % (archive.metadata['name'], to_localtime(archive.ts).strftime('%c'))