/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to breezy/transform.py

  • Committer: Jelmer Vernooij
  • Date: 2018-11-16 18:35:30 UTC
  • mfrom: (7143.15.15 more-cleanups)
  • mto: This revision was merged to the branch mainline in revision 7178.
  • Revision ID: jelmer@jelmer.uk-20181116183530-ue8yx60h5tinl2wy
Merge more-cleanups.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1915
1915
        paths = FinalPaths(self)
1916
1916
        for trans_id, observed in viewitems(self._observed_sha1s):
1917
1917
            path = paths.get_path(trans_id)
1918
 
            # We could get the file_id, but dirstate prefers to use the path
1919
 
            # anyway, and it is 'cheaper' to determine.
1920
 
            # file_id = self._new_id[trans_id]
1921
 
            self._tree._observed_sha1(None, path, observed)
 
1918
            self._tree._observed_sha1(path, observed)
1922
1919
 
1923
1920
 
1924
1921
class TransformPreview(DiskTreeTransform):
2011
2008
 
2012
2009
    def _get_file_revision(self, path, file_id, vf, tree_revision):
2013
2010
        parent_keys = [
2014
 
            (file_id, t.get_file_revision(t.id2path(file_id), file_id))
2015
 
            for t in self._iter_parent_trees()]
 
2011
                (file_id, t.get_file_revision(t.id2path(file_id)))
 
2012
                for t in self._iter_parent_trees()]
2016
2013
        vf.add_lines((file_id, tree_revision), parent_keys,
2017
 
                     self.get_file_lines(path, file_id))
 
2014
                     self.get_file_lines(path))
2018
2015
        repo = self._get_repository()
2019
2016
        base_vf = repo.texts
2020
2017
        if base_vf not in vf.fallback_versionedfiles:
2038
2035
            executable = False
2039
2036
        else:
2040
2037
            file_id = self._transform.final_file_id(self._path2trans_id(path))
2041
 
            executable = self.is_executable(path, file_id)
 
2038
            executable = self.is_executable(path)
2042
2039
        return kind, executable, None
2043
2040
 
2044
2041
    def is_locked(self):
2178
2175
                ordered_ids.append((trans_id, parent_file_id))
2179
2176
        return ordered_ids
2180
2177
 
2181
 
    def iter_child_entries(self, path, file_id=None):
 
2178
    def iter_child_entries(self, path):
2182
2179
        trans_id = self._path2trans_id(path)
2183
2180
        if trans_id is None:
2184
2181
            raise errors.NoSuchFile(path)
2237
2234
            for path, entry in entries:
2238
2235
                yield path, 'V', entry.kind, entry.file_id, entry
2239
2236
 
2240
 
    def kind(self, path, file_id=None):
 
2237
    def kind(self, path):
2241
2238
        trans_id = self._path2trans_id(path)
2242
2239
        if trans_id is None:
2243
2240
            raise errors.NoSuchFile(path)
2244
2241
        return self._transform.final_kind(trans_id)
2245
2242
 
2246
 
    def stored_kind(self, path, file_id=None):
 
2243
    def stored_kind(self, path):
2247
2244
        trans_id = self._path2trans_id(path)
2248
2245
        if trans_id is None:
2249
2246
            raise errors.NoSuchFile(path)
2250
2247
        try:
2251
2248
            return self._transform._new_contents[trans_id]
2252
2249
        except KeyError:
2253
 
            return self._transform._tree.stored_kind(path, file_id)
 
2250
            return self._transform._tree.stored_kind(path)
2254
2251
 
2255
 
    def get_file_mtime(self, path, file_id=None):
 
2252
    def get_file_mtime(self, path):
2256
2253
        """See Tree.get_file_mtime"""
2257
 
        if file_id is None:
2258
 
            file_id = self.path2id(path)
 
2254
        file_id = self.path2id(path)
2259
2255
        if file_id is None:
2260
2256
            raise errors.NoSuchFile(path)
2261
2257
        if not self._content_change(file_id):
2262
2258
            return self._transform._tree.get_file_mtime(
2263
 
                self._transform._tree.id2path(file_id), file_id)
 
2259
                self._transform._tree.id2path(file_id))
2264
2260
        trans_id = self._path2trans_id(path)
2265
2261
        return self._stat_limbo_file(trans_id).st_mtime
2266
2262
 
2267
 
    def get_file_size(self, path, file_id=None):
 
2263
    def get_file_size(self, path):
2268
2264
        """See Tree.get_file_size"""
2269
2265
        trans_id = self._path2trans_id(path)
2270
2266
        if trans_id is None:
2274
2270
            return None
2275
2271
        if trans_id in self._transform._new_contents:
2276
2272
            return self._stat_limbo_file(trans_id).st_size
2277
 
        if self.kind(path, file_id) == 'file':
2278
 
            return self._transform._tree.get_file_size(path, file_id)
 
2273
        if self.kind(path) == 'file':
 
2274
            return self._transform._tree.get_file_size(path)
2279
2275
        else:
2280
2276
            return None
2281
2277
 
2282
 
    def get_file_verifier(self, path, file_id=None, stat_value=None):
 
2278
    def get_file_verifier(self, path, stat_value=None):
2283
2279
        trans_id = self._path2trans_id(path)
2284
2280
        if trans_id is None:
2285
2281
            raise errors.NoSuchFile(path)
2286
2282
        kind = self._transform._new_contents.get(trans_id)
2287
2283
        if kind is None:
2288
 
            return self._transform._tree.get_file_verifier(path, file_id)
 
2284
            return self._transform._tree.get_file_verifier(path)
2289
2285
        if kind == 'file':
2290
 
            with self.get_file(path, file_id) as fileobj:
 
2286
            with self.get_file(path) as fileobj:
2291
2287
                return ("SHA1", sha_file(fileobj))
2292
2288
 
2293
 
    def get_file_sha1(self, path, file_id=None, stat_value=None):
 
2289
    def get_file_sha1(self, path, stat_value=None):
2294
2290
        trans_id = self._path2trans_id(path)
2295
2291
        if trans_id is None:
2296
2292
            raise errors.NoSuchFile(path)
2297
2293
        kind = self._transform._new_contents.get(trans_id)
2298
2294
        if kind is None:
2299
 
            return self._transform._tree.get_file_sha1(path, file_id)
 
2295
            return self._transform._tree.get_file_sha1(path)
2300
2296
        if kind == 'file':
2301
 
            with self.get_file(path, file_id) as fileobj:
 
2297
            with self.get_file(path) as fileobj:
2302
2298
                return sha_file(fileobj)
2303
2299
 
2304
 
    def is_executable(self, path, file_id=None):
 
2300
    def is_executable(self, path):
2305
2301
        trans_id = self._path2trans_id(path)
2306
2302
        if trans_id is None:
2307
2303
            return False
2309
2305
            return self._transform._new_executability[trans_id]
2310
2306
        except KeyError:
2311
2307
            try:
2312
 
                return self._transform._tree.is_executable(path, file_id)
 
2308
                return self._transform._tree.is_executable(path)
2313
2309
            except OSError as e:
2314
2310
                if e.errno == errno.ENOENT:
2315
2311
                    return False
2379
2375
            raise ValueError('want_unversioned is not supported')
2380
2376
        return self._transform.iter_changes()
2381
2377
 
2382
 
    def get_file(self, path, file_id=None):
 
2378
    def get_file(self, path):
2383
2379
        """See Tree.get_file"""
2384
 
        if file_id is None:
2385
 
            file_id = self.path2id(path)
 
2380
        file_id = self.path2id(path)
2386
2381
        if not self._content_change(file_id):
2387
 
            return self._transform._tree.get_file(path, file_id)
 
2382
            return self._transform._tree.get_file(path)
2388
2383
        trans_id = self._path2trans_id(path)
2389
2384
        name = self._transform._limbo_name(trans_id)
2390
2385
        return open(name, 'rb')
2391
2386
 
2392
 
    def get_file_with_stat(self, path, file_id=None):
2393
 
        return self.get_file(path, file_id), None
 
2387
    def get_file_with_stat(self, path):
 
2388
        return self.get_file(path), None
2394
2389
 
2395
 
    def annotate_iter(self, path, file_id=None,
 
2390
    def annotate_iter(self, path,
2396
2391
                      default_revision=_mod_revision.CURRENT_REVISION):
2397
 
        if file_id is None:
2398
 
            file_id = self.path2id(path)
 
2392
        file_id = self.path2id(path)
2399
2393
        changes = self._iter_changes_cache.get(file_id)
2400
2394
        if changes is None:
2401
2395
            get_old = True
2407
2401
            get_old = (kind[0] == 'file' and versioned[0])
2408
2402
        if get_old:
2409
2403
            old_annotation = self._transform._tree.annotate_iter(
2410
 
                path, file_id=file_id, default_revision=default_revision)
 
2404
                path, default_revision=default_revision)
2411
2405
        else:
2412
2406
            old_annotation = []
2413
2407
        if changes is None:
2422
2416
        #       It would be nice to be able to use the new Annotator based
2423
2417
        #       approach, as well.
2424
2418
        return annotate.reannotate([old_annotation],
2425
 
                                   self.get_file(path, file_id).readlines(),
 
2419
                                   self.get_file(path).readlines(),
2426
2420
                                   default_revision)
2427
2421
 
2428
 
    def get_symlink_target(self, path, file_id=None):
 
2422
    def get_symlink_target(self, path):
2429
2423
        """See Tree.get_symlink_target"""
2430
 
        if file_id is None:
2431
 
            file_id = self.path2id(path)
 
2424
        file_id = self.path2id(path)
2432
2425
        if not self._content_change(file_id):
2433
2426
            return self._transform._tree.get_symlink_target(path)
2434
2427
        trans_id = self._path2trans_id(path)
2454
2447
                else:
2455
2448
                    kind = 'unknown'
2456
2449
                    versioned_kind = self._transform._tree.stored_kind(
2457
 
                        self._transform._tree.id2path(file_id),
2458
 
                        file_id)
 
2450
                        self._transform._tree.id2path(file_id))
2459
2451
                if versioned_kind == 'directory':
2460
2452
                    subdirs.append(child_id)
2461
2453
                children.append((path_from_root, basename, kind, None,
2635
2627
                    trans_id = tt.create_path(entry.name, parent_id)
2636
2628
                    file_trans_id[file_id] = trans_id
2637
2629
                    tt.version_file(file_id, trans_id)
2638
 
                    executable = tree.is_executable(tree_path, file_id)
 
2630
                    executable = tree.is_executable(tree_path)
2639
2631
                    if executable:
2640
2632
                        tt.set_executability(executable, trans_id)
2641
2633
                    trans_data = (trans_id, file_id,
2739
2731
        return True
2740
2732
    if entry.kind == "file":
2741
2733
        with open(target_path, 'rb') as f1, \
2742
 
                tree.get_file(tree_path, file_id) as f2:
 
2734
                 tree.get_file(tree_path) as f2:
2743
2735
            if osutils.compare_files(f1, f2):
2744
2736
                return True
2745
2737
    elif entry.kind == "symlink":
2746
 
        if tree.get_symlink_target(tree_path, file_id) == os.readlink(target_path):
 
2738
        if tree.get_symlink_target(tree_path) == os.readlink(target_path):
2747
2739
            return True
2748
2740
    return False
2749
2741
 
2783
2775
    name = entry.name
2784
2776
    kind = entry.kind
2785
2777
    if kind == 'file':
2786
 
        with tree.get_file(path, entry.file_id) as f:
2787
 
            executable = tree.is_executable(path, entry.file_id)
 
2778
        with tree.get_file(path) as f:
 
2779
            executable = tree.is_executable(path)
2788
2780
            return tt.new_file(
2789
2781
                name, parent_id, osutils.file_iterator(f), entry.file_id,
2790
2782
                executable)
2794
2786
            tt.set_tree_reference(entry.reference_revision, trans_id)
2795
2787
        return trans_id
2796
2788
    elif kind == 'symlink':
2797
 
        target = tree.get_symlink_target(path, entry.file_id)
 
2789
        target = tree.get_symlink_target(path)
2798
2790
        return tt.new_symlink(name, parent_id, target, entry.file_id)
2799
2791
    else:
2800
2792
        raise errors.BadFileKindError(name, kind)
2808
2800
      content filters to apply to the bytes output in the working tree.
2809
2801
      This only applies if the working tree supports content filtering.
2810
2802
    """
2811
 
    kind = tree.kind(path, file_id)
 
2803
    kind = tree.kind(path)
2812
2804
    if kind == 'directory':
2813
2805
        tt.create_directory(trans_id)
2814
2806
    elif kind == "file":
2815
2807
        if chunks is None:
2816
 
            f = tree.get_file(path, file_id)
 
2808
            f = tree.get_file(path)
2817
2809
            chunks = osutils.file_iterator(f)
2818
2810
        else:
2819
2811
            f = None
2829
2821
            if f is not None:
2830
2822
                f.close()
2831
2823
    elif kind == "symlink":
2832
 
        tt.create_symlink(tree.get_symlink_target(path, file_id), trans_id)
 
2824
        tt.create_symlink(tree.get_symlink_target(path), trans_id)
2833
2825
    else:
2834
2826
        raise AssertionError('Unknown kind %r' % kind)
2835
2827
 
2911
2903
            if changed_content:
2912
2904
                keep_content = False
2913
2905
                if wt_kind == 'file' and (backups or target_kind is None):
2914
 
                    wt_sha1 = working_tree.get_file_sha1(wt_path, file_id)
 
2906
                    wt_sha1 = working_tree.get_file_sha1(wt_path)
2915
2907
                    if merge_modified.get(file_id) != wt_sha1:
2916
2908
                        # acquire the basis tree lazily to prevent the
2917
2909
                        # expense of accessing it when it's not needed ?
2925
2917
                            if target_kind is None and not target_versioned:
2926
2918
                                keep_content = True
2927
2919
                        else:
2928
 
                            if wt_sha1 != basis_tree.get_file_sha1(basis_path, file_id):
 
2920
                            if wt_sha1 != basis_tree.get_file_sha1(basis_path):
2929
2921
                                keep_content = True
2930
2922
                if wt_kind is not None:
2931
2923
                    if not keep_content:
2947
2939
                    tt.create_directory(trans_id)
2948
2940
                    if target_kind == 'tree-reference':
2949
2941
                        revision = target_tree.get_reference_revision(
2950
 
                            target_path, file_id)
 
2942
                            target_path)
2951
2943
                        tt.set_tree_reference(revision, trans_id)
2952
2944
                elif target_kind == 'symlink':
2953
2945
                    tt.create_symlink(target_tree.get_symlink_target(
2954
 
                        target_path, file_id), trans_id)
 
2946
                        target_path), trans_id)
2955
2947
                elif target_kind == 'file':
2956
2948
                    deferred_files.append(
2957
2949
                        (target_path, (trans_id, mode_id, file_id)))
2958
2950
                    if basis_tree is None:
2959
2951
                        basis_tree = working_tree.basis_tree()
2960
2952
                        basis_tree.lock_read()
2961
 
                    new_sha1 = target_tree.get_file_sha1(target_path, file_id)
2962
 
                    basis_path = find_previous_path(
2963
 
                        target_tree, basis_tree, target_path)
2964
 
                    if (basis_path is not None
2965
 
                            and new_sha1 == basis_tree.get_file_sha1(basis_path, file_id)):
 
2953
                    new_sha1 = target_tree.get_file_sha1(target_path)
 
2954
                    basis_path = find_previous_path(target_tree, basis_tree, target_path)
 
2955
                    if (basis_path is not None and
 
2956
                            new_sha1 == basis_tree.get_file_sha1(basis_path)):
2966
2957
                        if file_id in merge_modified:
2967
2958
                            del merge_modified[file_id]
2968
2959
                    else: