Add script to update null references in for readOnly_refs and pendingReviewer_refs (#25417)
* Add script to update null references in for readOnly_refs and pendingReviewer_refs * update script to only update readOnly_refs * clean up * use projectAuditLogEntries to find relevant projects * use updateOne GitOrigin-RevId: bbeaa04b837ebb657c802598f0de72879f641bd0
This commit is contained in:
committed by
Copybot
parent
67a436b639
commit
c1f3758aa2
@@ -0,0 +1,175 @@
|
||||
import minimist from 'minimist'
|
||||
import {
|
||||
db,
|
||||
ObjectId,
|
||||
READ_PREFERENCE_SECONDARY,
|
||||
} from '../app/src/infrastructure/mongodb.js'
|
||||
import lodash from 'lodash'
|
||||
|
||||
const args = minimist(process.argv.slice(2), {
|
||||
boolean: ['commit'],
|
||||
})
|
||||
|
||||
const run = async () => {
|
||||
try {
|
||||
const projects = await db.projectAuditLogEntries
|
||||
.find(
|
||||
{
|
||||
operation: 'collaborator-limit-exceeded',
|
||||
timestamp: {
|
||||
$gte: new Date('2025-03-26'),
|
||||
$lt: new Date('2025-04-02'),
|
||||
},
|
||||
},
|
||||
{
|
||||
readPreference: READ_PREFERENCE_SECONDARY,
|
||||
projection: {
|
||||
_id: 1,
|
||||
projectId: 1,
|
||||
},
|
||||
}
|
||||
)
|
||||
.toArray()
|
||||
|
||||
const uniqueProjectIds = lodash.uniq(
|
||||
projects.map(p => p.projectId.toString())
|
||||
)
|
||||
|
||||
console.log(
|
||||
`Found ${uniqueProjectIds.length} projects where collaborator-limit-exceeded operation was logged in provided date range`
|
||||
)
|
||||
|
||||
let readOnlyCount = 0
|
||||
let pendingReviewerCount = 0
|
||||
let reviewerCount = 0
|
||||
|
||||
for (const projectId of uniqueProjectIds) {
|
||||
if (args.commit) {
|
||||
const readOnlyUpdate = await db.projects.updateOne(
|
||||
{
|
||||
_id: new ObjectId(projectId),
|
||||
readOnly_refs: null,
|
||||
},
|
||||
{
|
||||
$set: {
|
||||
readOnly_refs: [],
|
||||
},
|
||||
}
|
||||
)
|
||||
if (readOnlyUpdate.modifiedCount > 0) {
|
||||
console.log(`Updated readOnly_refs for project id ${projectId}`)
|
||||
}
|
||||
readOnlyCount += readOnlyUpdate.modifiedCount
|
||||
} else {
|
||||
const project = await db.projects.findOne(
|
||||
{
|
||||
_id: new ObjectId(projectId),
|
||||
readOnly_refs: null,
|
||||
},
|
||||
{
|
||||
projection: {
|
||||
_id: 1,
|
||||
readOnly_refs: 1,
|
||||
},
|
||||
}
|
||||
)
|
||||
if (project) {
|
||||
readOnlyCount++
|
||||
console.log(
|
||||
`Dry run: Would update readOnly_refs for project id ${projectId}`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (args.commit) {
|
||||
const pendingReviewerUpdate = await db.projects.updateOne(
|
||||
{
|
||||
_id: new ObjectId(projectId),
|
||||
pendingReviewer_refs: null,
|
||||
},
|
||||
{
|
||||
$set: {
|
||||
pendingReviewer_refs: [],
|
||||
},
|
||||
}
|
||||
)
|
||||
if (pendingReviewerUpdate.modifiedCount > 0) {
|
||||
console.log(
|
||||
`Updated pendingReviewer_refs for project id ${projectId}`
|
||||
)
|
||||
}
|
||||
pendingReviewerCount += pendingReviewerUpdate.modifiedCount
|
||||
} else {
|
||||
const project = await db.projects.findOne(
|
||||
{
|
||||
_id: new ObjectId(projectId),
|
||||
pendingReviewer_refs: null,
|
||||
},
|
||||
{
|
||||
projection: {
|
||||
_id: 1,
|
||||
pendingReviewer_refs: 1,
|
||||
},
|
||||
}
|
||||
)
|
||||
if (project) {
|
||||
pendingReviewerCount++
|
||||
console.log(
|
||||
`Dry run: Would update pendingReviewer_refs for project id ${projectId}`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if (args.commit) {
|
||||
const reviewerUpdate = await db.projects.updateOne(
|
||||
{
|
||||
_id: new ObjectId(projectId),
|
||||
reviewer_refs: null,
|
||||
},
|
||||
{
|
||||
$set: {
|
||||
reviewer_refs: [],
|
||||
},
|
||||
}
|
||||
)
|
||||
reviewerCount += reviewerUpdate.modifiedCount
|
||||
} else {
|
||||
const project = await db.projects.findOne(
|
||||
{
|
||||
_id: new ObjectId(projectId),
|
||||
reviewer_refs: null,
|
||||
},
|
||||
{
|
||||
projection: {
|
||||
_id: 1,
|
||||
reviewer_refs: 1,
|
||||
},
|
||||
}
|
||||
)
|
||||
if (project) {
|
||||
reviewerCount++
|
||||
console.log(
|
||||
`Dry run: Would update reviewer_refs for project id ${projectId}`
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (args.commit) {
|
||||
console.log(
|
||||
`Updated readOnly_refs for ${readOnlyCount} projects, pendingReviewer_refs for ${pendingReviewerCount} projects, and reviewer_refs for ${reviewerCount} projects.`
|
||||
)
|
||||
} else {
|
||||
console.log(
|
||||
`Dry run: Would update readOnly_refs for ${readOnlyCount} projects, pendingReviewer_refs for ${pendingReviewerCount} projects, and reviewer_refs for ${reviewerCount} projects.`
|
||||
)
|
||||
}
|
||||
|
||||
process.exit(0)
|
||||
} catch (err) {
|
||||
console.error('Error while processing projects:', err)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
run()
|
||||
Reference in New Issue
Block a user