Kaynağa Gözat

Unify fetch and receive ObjectChecker setup

This avoids duplication of code between receive-pack and fetch-pack paths.
Separate methods are still required to check use of receive.fsckobjects vs.
fetch.fsckobjects, both of which default to transfer.fsckobjects.

Change-Id: I41193e093e981a79fc2f63914e273aaa44b82162
tags/v4.2.0.201601211800-r
Shawn Pearce 8 yıl önce
ebeveyn
işleme
018a91b715

+ 9
- 36
org.eclipse.jgit/src/org/eclipse/jgit/transport/BaseReceivePack.java Dosyayı Görüntüle

db = into; db = into;
walk = new RevWalk(db); walk = new RevWalk(db);


final ReceiveConfig cfg = db.getConfig().get(ReceiveConfig.KEY);
objectChecker = cfg.newObjectChecker();
allowCreates = cfg.allowCreates;
TransferConfig tc = db.getConfig().get(TransferConfig.KEY);
objectChecker = tc.newReceiveObjectChecker();

ReceiveConfig rc = db.getConfig().get(ReceiveConfig.KEY);
allowCreates = rc.allowCreates;
allowAnyDeletes = true; allowAnyDeletes = true;
allowBranchDeletes = cfg.allowDeletes;
allowNonFastForwards = cfg.allowNonFastForwards;
allowOfsDelta = cfg.allowOfsDelta;
allowBranchDeletes = rc.allowDeletes;
allowNonFastForwards = rc.allowNonFastForwards;
allowOfsDelta = rc.allowOfsDelta;
advertiseRefsHook = AdvertiseRefsHook.DEFAULT; advertiseRefsHook = AdvertiseRefsHook.DEFAULT;
refFilter = RefFilter.DEFAULT; refFilter = RefFilter.DEFAULT;
advertisedHaves = new HashSet<ObjectId>(); advertisedHaves = new HashSet<ObjectId>();
clientShallowCommits = new HashSet<ObjectId>(); clientShallowCommits = new HashSet<ObjectId>();
signedPushConfig = cfg.signedPush;
signedPushConfig = rc.signedPush;
} }


/** Configuration for receive operations. */ /** Configuration for receive operations. */
} }
}; };


final boolean checkReceivedObjects;
final boolean allowLeadingZeroFileMode;
final boolean allowInvalidPersonIdent;
final boolean safeForWindows;
final boolean safeForMacOS;

final boolean allowCreates; final boolean allowCreates;
final boolean allowDeletes; final boolean allowDeletes;
final boolean allowNonFastForwards; final boolean allowNonFastForwards;
final boolean allowOfsDelta; final boolean allowOfsDelta;

final SignedPushConfig signedPush; final SignedPushConfig signedPush;


ReceiveConfig(final Config config) { ReceiveConfig(final Config config) {
checkReceivedObjects = config.getBoolean(
"receive", "fsckobjects", //$NON-NLS-1$ //$NON-NLS-2$
config.getBoolean("transfer", "fsckobjects", false)); //$NON-NLS-1$ //$NON-NLS-2$
allowLeadingZeroFileMode = checkReceivedObjects
&& config.getBoolean("fsck", "allowLeadingZeroFileMode", false); //$NON-NLS-1$ //$NON-NLS-2$
allowInvalidPersonIdent = checkReceivedObjects
&& config.getBoolean("fsck", "allowInvalidPersonIdent", false); //$NON-NLS-1$ //$NON-NLS-2$
safeForWindows = checkReceivedObjects
&& config.getBoolean("fsck", "safeForWindows", false); //$NON-NLS-1$ //$NON-NLS-2$
safeForMacOS = checkReceivedObjects
&& config.getBoolean("fsck", "safeForMacOS", false); //$NON-NLS-1$ //$NON-NLS-2$

allowCreates = true; allowCreates = true;
allowDeletes = !config.getBoolean("receive", "denydeletes", false); //$NON-NLS-1$ //$NON-NLS-2$ allowDeletes = !config.getBoolean("receive", "denydeletes", false); //$NON-NLS-1$ //$NON-NLS-2$
allowNonFastForwards = !config.getBoolean("receive", //$NON-NLS-1$ allowNonFastForwards = !config.getBoolean("receive", //$NON-NLS-1$
true); true);
signedPush = SignedPushConfig.KEY.parse(config); signedPush = SignedPushConfig.KEY.parse(config);
} }

ObjectChecker newObjectChecker() {
if (!checkReceivedObjects)
return null;
return new ObjectChecker()
.setAllowLeadingZeroFileMode(allowLeadingZeroFileMode)
.setAllowInvalidPersonIdent(allowInvalidPersonIdent)
.setSafeForWindows(safeForWindows)
.setSafeForMacOS(safeForMacOS);
}
} }


/** /**

+ 27
- 13
org.eclipse.jgit/src/org/eclipse/jgit/transport/TransferConfig.java Dosyayı Görüntüle

import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;


import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.lib.Config; import org.eclipse.jgit.lib.Config;
import org.eclipse.jgit.lib.Config.SectionParser; import org.eclipse.jgit.lib.Config.SectionParser;
import org.eclipse.jgit.lib.ObjectChecker; import org.eclipse.jgit.lib.ObjectChecker;
} }
}; };


private final boolean checkReceivedObjects;
private final boolean fetchFsck;
private final boolean receiveFsck;
private final boolean allowLeadingZeroFileMode; private final boolean allowLeadingZeroFileMode;
private final boolean allowInvalidPersonIdent; private final boolean allowInvalidPersonIdent;
private final boolean safeForWindows; private final boolean safeForWindows;
} }


TransferConfig(final Config rc) { TransferConfig(final Config rc) {
checkReceivedObjects = rc.getBoolean(
"fetch", "fsckobjects", //$NON-NLS-1$ //$NON-NLS-2$
rc.getBoolean("transfer", "fsckobjects", false)); //$NON-NLS-1$ //$NON-NLS-2$
allowLeadingZeroFileMode = checkReceivedObjects
&& rc.getBoolean("fsck", "allowLeadingZeroFileMode", false); //$NON-NLS-1$ //$NON-NLS-2$
allowInvalidPersonIdent = checkReceivedObjects
&& rc.getBoolean("fsck", "allowInvalidPersonIdent", false); //$NON-NLS-1$ //$NON-NLS-2$
safeForWindows = checkReceivedObjects
&& rc.getBoolean("fsck", "safeForWindows", //$NON-NLS-1$ //$NON-NLS-2$
boolean fsck = rc.getBoolean("transfer", "fsckobjects", false); //$NON-NLS-1$ //$NON-NLS-2$
fetchFsck = rc.getBoolean("fetch", "fsckobjects", fsck); //$NON-NLS-1$ //$NON-NLS-2$
receiveFsck = rc.getBoolean("receive", "fsckobjects", fsck); //$NON-NLS-1$ //$NON-NLS-2$
allowLeadingZeroFileMode = rc.getBoolean("fsck", "allowLeadingZeroFileMode", false); //$NON-NLS-1$ //$NON-NLS-2$
allowInvalidPersonIdent = rc.getBoolean("fsck", "allowInvalidPersonIdent", false); //$NON-NLS-1$ //$NON-NLS-2$
safeForWindows = rc.getBoolean("fsck", "safeForWindows", //$NON-NLS-1$ //$NON-NLS-2$
SystemReader.getInstance().isWindows()); SystemReader.getInstance().isWindows());
safeForMacOS = checkReceivedObjects
&& rc.getBoolean("fsck", "safeForMacOS", //$NON-NLS-1$ //$NON-NLS-2$
safeForMacOS = rc.getBoolean("fsck", "safeForMacOS", //$NON-NLS-1$ //$NON-NLS-2$
SystemReader.getInstance().isMacOS()); SystemReader.getInstance().isMacOS());


allowTipSha1InWant = rc.getBoolean( allowTipSha1InWant = rc.getBoolean(
* enabled in the repository configuration. * enabled in the repository configuration.
* @since 3.6 * @since 3.6
*/ */
@Nullable
public ObjectChecker newObjectChecker() { public ObjectChecker newObjectChecker() {
if (!checkReceivedObjects)
return newObjectChecker(fetchFsck);
}

/**
* @return checker to verify objects pushed into this repository, or null if
* checking is not enabled in the repository configuration.
* @since 4.2
*/
@Nullable
public ObjectChecker newReceiveObjectChecker() {
return newObjectChecker(receiveFsck);
}

private ObjectChecker newObjectChecker(boolean check) {
if (!check) {
return null; return null;
}
return new ObjectChecker() return new ObjectChecker()
.setAllowLeadingZeroFileMode(allowLeadingZeroFileMode) .setAllowLeadingZeroFileMode(allowLeadingZeroFileMode)
.setAllowInvalidPersonIdent(allowInvalidPersonIdent) .setAllowInvalidPersonIdent(allowInvalidPersonIdent)

Loading…
İptal
Kaydet